上传EXCEL到ABAP内表
将EXCEL文件上载到内表两种方式:
一、直接将excel数据读入具有相同结构的内表
二、将excel数据读入一个行号,列号,值组成的内表,然后通过指针将数据读到与excel结构相同的内表
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
CALL FUNCTION 'F4_FILENAME'
IMPORTING
file_name = P_FILE.
CLEAR PROGRESS_TEXT.
CONCATENATE '正在上载、转换文件,请稍侯......' '' INTO progress_text.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
TEXT = progress_text.
DATA l_size TYPE I .
"可以省略upload
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
filename = p_file
filetype = 'BIN'
IMPORTING
filelength = l_size
TABLES
data_tab = rawdata.
"内表结构与excel一致,字段最好定义为C类型,读入内表之后,转换成系统对应字段类型
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING "i_line_header = 'X'"表示包括字段名
i_tab_raw_data = rawdata
i_filename = p_file
TABLES
i_tab_converted_data = gt_itab
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
**********************************************************************************************8
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
PERFORM SELECT_FILE.
FORM SELECT_FILE .
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
MASK = ',Excel Files,*.xls,All Files,*.*.'(101)
TITLE = '选择文件'(100)
IMPORTING
FILENAME = P_FILE
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4
OTHERS = 5.
IF SY-SUBRC <> 0 AND SY-SUBRC <> 3.
MESSAGE E100(ZDEV) WITH '选择文件出错!'(007).
ENDIF.
ENDFORM. " SELECT_FILE
"接收excel数据的内表
DATA: GT_DATA TYPE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE.
FORM UPLOAD_ITAB .
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = P_FILE
I_BEGIN_COL = '1'
I_BEGIN_ROW = '2'
I_END_COL = '100'
I_END_ROW = '30000'
TABLES
INTERN = GT_DATA.
SORT GT_DATA BY ROW COL VALUE.
"将数据转换成一般处理内表结构的数据
LOOP AT GT_DATA.
MOVE GT_DATA-COL TO L_INDEX.
ASSIGN COMPONENT L_INDEX OF STRUCTURE GT_ITAB TO <FS>.
MOVE GT_DATA-VALUE TO <FS>.
AT END OF ROW.
APPEND GT_ITAB.
CLEAR GT_ITAB.
ENDAT.
ENDLOOP.
IF GT_ITAB IS NOT INITIAL.
APPEND GT_ITAB.
CLEAR GT_ITAB.
ENDIF.
ENDFORM. " UPLOAD_ITAB