2008 Jan 19 1:21 PM
Hi All,
How to upload a tab delimited excel sheet to an internal table.
am able to upload the data into the internal table( i have declare this table as text os string type) by using the gui_upload FM .but am uable to split the data and pass into another internal table.
points will be rewarded for helpful anwers
thanks!!
Hi Padmasri,
check this code to upload excel data to internal table itab.
DATA:IT_EXCEL LIKE TABLE OF ALSMEX_TABLINE WITH HEADER LINE.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-002.
PARAMETERS: P_FILE TYPE LOCALFILE OBLIGATORY .
SELECTION-SCREEN END OF BLOCK B1.
**********************AT SELECTION SCREEN EVENTS BEGINS***************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
EXPORTING
STATIC = 'X'
CHANGING
FILE_NAME = P_FILE.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = P_FILE
I_BEGIN_COL = 1 "From 1st Column
I_BEGIN_ROW = 2 "From 2nd row
I_END_COL = 6 "Till 6th Column
I_END_ROW = 65536 "Till Row
TABLES
INTERN = IT_EXCEL
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3.
CLEAR IT_EXCEL.
DESCRIBE TABLE IT_EXCEL.
IF SY-TFILL = 0.
MESSAGE I937.
STOP.
ENDIF.
LOOP AT IT_EXCEL.
CASE IT_EXCEL-COL.
WHEN '0001'.
MOVE: IT_EXCEL-VALUE TO RECORD1-MATNR_005.
WHEN '0002'.
MOVE: IT_EXCEL-VALUE TO RECORD1-WERKS_006.
WHEN '0003'.
MOVE: IT_EXCEL-VALUE TO RECORD1-BUDAT_002.
WHEN '0004'.
MOVE: IT_EXCEL-VALUE TO RECORD1-BKTXT_004.
WHEN '0005'.
MOVE: IT_EXCEL-VALUE TO RECORD1-ERFMG_007.
WHEN '0006'.
MOVE: IT_EXCEL-VALUE TO RECORD1-ERFMG_008.
ENDCASE.
AT END OF ROW.
APPEND RECORD1.
CLEAR RECORD1.
ENDAT.
ENDLOOP.
pls reward if found useful.
cheers,
Hema.
2008 Jan 19 1:30 PM
Hi Padmasri,
Hi,
Use the following code......Using function module TEXT_CONVERT_XLS_TO_SAP as shown in code.
codeREPORT zvexceltodbms .
TABLES : zvresult.
TYPE-POOLS: truxs.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS: filename TYPE rlgrap-filename.
SELECTION-SCREEN END OF BLOCK b1.
TYPES: BEGIN OF t_datatab,
empid LIKE zvresult-empid,
bitsid LIKE zvresult-bitsid,
name LIKE zvresult-name,
maths LIKE zvresult-maths,
sp LIKE zvresult-sp,
de LIKE zvresult-de,
mgmt LIKE zvresult-mgmt,
total LIKE zvresult-total,
avrg LIKE zvresult-avrg,
END OF t_datatab.
DATA: itab TYPE STANDARD TABLE OF t_datatab WITH HEADER LINE,
seltab TYPE STANDARD TABLE OF t_datatab WITH HEADER LINE.
DATA: it_raw TYPE truxs_t_text_data.
At selection screen
AT SELECTION-SCREEN ON VALUE-REQUEST FOR filename.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
field_name = 'P_FILE'
IMPORTING
file_name = filename.
***********************************************************************
*START-OF-SELECTION.
START-OF-SELECTION.
IF filename IS NOT INITIAL.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
I_FIELD_SEPERATOR =
i_line_header = 'X'
i_tab_raw_data = it_raw " WORK TABLE
i_filename = filename
TABLES
i_tab_converted_data = itab[] "ACTUAL DATA
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ELSE.
MESSAGE s001(zmsgclass).
ENDIF.
***********************************************************************
END-OF-SELECTION.
END-OF-SELECTION.
[/code]
kindly reward, if useful.
cheers.
Hema.
2008 Jan 19 1:32 PM
Hi Padmasri,
check this code to upload excel data to internal table itab.
DATA:IT_EXCEL LIKE TABLE OF ALSMEX_TABLINE WITH HEADER LINE.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-002.
PARAMETERS: P_FILE TYPE LOCALFILE OBLIGATORY .
SELECTION-SCREEN END OF BLOCK B1.
**********************AT SELECTION SCREEN EVENTS BEGINS***************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
EXPORTING
STATIC = 'X'
CHANGING
FILE_NAME = P_FILE.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = P_FILE
I_BEGIN_COL = 1 "From 1st Column
I_BEGIN_ROW = 2 "From 2nd row
I_END_COL = 6 "Till 6th Column
I_END_ROW = 65536 "Till Row
TABLES
INTERN = IT_EXCEL
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3.
CLEAR IT_EXCEL.
DESCRIBE TABLE IT_EXCEL.
IF SY-TFILL = 0.
MESSAGE I937.
STOP.
ENDIF.
LOOP AT IT_EXCEL.
CASE IT_EXCEL-COL.
WHEN '0001'.
MOVE: IT_EXCEL-VALUE TO RECORD1-MATNR_005.
WHEN '0002'.
MOVE: IT_EXCEL-VALUE TO RECORD1-WERKS_006.
WHEN '0003'.
MOVE: IT_EXCEL-VALUE TO RECORD1-BUDAT_002.
WHEN '0004'.
MOVE: IT_EXCEL-VALUE TO RECORD1-BKTXT_004.
WHEN '0005'.
MOVE: IT_EXCEL-VALUE TO RECORD1-ERFMG_007.
WHEN '0006'.
MOVE: IT_EXCEL-VALUE TO RECORD1-ERFMG_008.
ENDCASE.
AT END OF ROW.
APPEND RECORD1.
CLEAR RECORD1.
ENDAT.
ENDLOOP.
pls reward if found useful.
cheers,
Hema.
2008 Jan 19 1:42 PM
Hi Hema,
i have uploaded the data like dis...
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = l_filename
FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = ' '
tables
data_tab = tb_text
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
OTHERS = 17.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE c_s NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
To delete the header data
DELETE tb_text FROM 1 TO 5.
ENDIF.
now the entries in the tb_text as below shown...
1. #010#B#/1/99/4/22####1//99/12/3##2#746###GR##I#442#3#OS0754#/2/00/7/19#16:89
so wat i did is...
LOOP AT tb_text .
SPLIT: tb_text-text AT '#'
INTO wa_ysorgh-mandt
wa_ysorgh-zrelid
wa_ysorgh-zval_frm
but am unable to move the content..plz help me in dis regard
2008 Jan 19 1:54 PM
hai padmasri we hav fm to upload data from excel to internal table which must has the structure alsmex_tabline.
and we hav to move data from that int tab to our internal table. try it its easy.
Edited by: sudheer b on Jan 19, 2008 2:57 PM
2008 Jan 19 5:51 PM
Hi Padma
W_STRING =' #H#263##030108'.
SPLIT W_STRING AT '#' INTO E_HEAD-FIRST E_HEAD-RTYPE E_HEAD-BUKRS......
or
Loop at itab into wa_itab.
split at 'tab' into f1 f2 f3 f3 ....
append to table you wanted.
endloop.
2008 Jan 19 1:35 PM
hai use this code it will help u
DATA: t_excel LIKE alsmex_tabline OCCURS 0 WITH HEADER LINE .
FILL DATA FROM A SPECIFIED FILE TO T_ITAB INTERNAL TABLE
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_flname
i_begin_col = 1
i_begin_row = 2
i_end_col = 6
i_end_row = 9999
TABLES
intern = t_excel
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
LOOP AT t_excel.
IF t_excel-col = 1 .
t_itab1-newko1 = t_excel-value.
ELSEIF t_excel-col = 2 .
t_itab1-newko2 = t_excel-value.
ELSEIF t_excel-col = 3 .
MOVE t_excel-value TO t_itab1-wrbtr.
ELSEIF t_excel-col = 4 .
t_itab1-txt = t_excel-value.
ELSEIF t_excel-col = 5 .
t_itab1-ltxt = t_excel-value.
ELSEIF t_excel-col = 6 .
t_itab1-kostl1 = t_excel-value.
ELSEIF t_excel-col = 7 .
t_itab1-kostl2 = t_excel-value.
ENDIF.
endloop.
Edited by: sudheer b on Jan 19, 2008 2:56 PM
| User | Count |
|---|---|
| 6 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |