思路:在选择屏幕中点开选择电脑中需要上传的EXCEL文件( PERFORM FILESYSTEM_SHOW CHANGING G_SUBRC P_FILE.),文件上传后用相应FUNCTIONG传到内表中。(ZHRIT101)
FORM filesystem_show CHANGING pl_subrc TYPE i
pl_file TYPE rlgrap-filename.
DATA: l_file_tab TYPE filetable,
l_file TYPE file_table,
l_title TYPE string.
l_title = text-001.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = l_title
CHANGING
file_table = l_file_tab
rc = pl_subrc
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
OTHERS = 4.
CHECK sy-subrc = 0.
LOOP AT l_file_tab INTO l_file.
str_file = l_file.
MOVE str_file TO pl_file.
EXIT.
ENDLOOP.
ENDFORM. " FILESYSTEM_SHOW,从电脑中选择excel文件
FORM upload_excel_file .
DATA: lt_intern LIKE alsmex_tabline OCCURS 0 WITH HEADER LINE.
DATA: l_tabix LIKE sy-tabix.
DATA: l_begcol TYPE i,
l_begrow TYPE i,
l_endcol TYPE i,
l_endrow TYPE i,
l_string TYPE string.
** 設定上傳的Excel file所要讀取的範圍
MOVE : '1' TO l_begcol,
'1' TO l_begrow,
'5' TO l_endcol, "excel文件中实际用到多少列就填多少
'65535' TO l_endrow. "65536应该是最大行数吧,呵呵!
FIELD-SYMBOLS : <field> TYPE ANY.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_file
i_begin_col = l_begcol
i_begin_row = l_begrow
i_end_col = l_endcol
i_end_row = l_endrow
TABLES
intern = lt_intern
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE '读取EXCEL出现错误' TYPE 'E'.
ELSE.
** 当第一笔为HEADER时,删除
DELETE IT_INTERN WHERE ROW = 1.
** 检查上传档案是否有资料
IF IT_INTERN IS INITIAL.
MESSAGE '请检查你EXCEL是否有数据' TYPE 'I'.
EXIT.
ENDIF.
SORT IT_INTERN BY ROW COL.
LOOP AT IT_INTERN.
AT NEW ROW.
g_col = 1.
ENDAT.
IF g_col = 1.
codeIF SY-SUBRC <> 0.
MESSAGE '读取EXCEL出现错误' TYPE 'E'.
ELSE.
** 当第一笔为HEADER时,删除
DELETE IT_INTERN WHERE ROW = 1.
** 检查上传档案是否有资料
IF IT_INTERN IS INITIAL.
MESSAGE '请检查你EXCEL是否有数据' TYPE 'I'.
EXIT.
ENDIF.
SORT IT_INTERN BY ROW COL.
LOOP AT IT_INTERN.
********************本来是想 CASE IT_INTERN-COL,可不行哦,不知道为什么,就设了个g_COL的变量*******
g_col = IT_INTERN-COL.
CASE g_col.
WHEN 1.
PERFORM transfer_pernr_to_sap USING IT_INTERN-VALUE CHANGING IT_BJTAB-PERNR.
WHEN 2.
PERFORM transfer_date_to_sap USING IT_INTERN-VALUE CHANGING IT_BJTAB-BEGDA.
WHEN 3.
IT_BJTAB-INFOTYPE = IT_INTERN-VALUE.
WHEN 4.
IT_BJTAB-SUBTY = IT_INTERN-VALUE.
WHEN 5.
IT_BJTAB-PBYER = IT_INTERN-VALUE.
ENDCASE.
CLEAR IT_INTERN.
**************************一行内表全都填到工作区后,要附加到内表中*********************8888
AT END OF ROW.
APPEND IT_BJTAB.
CLEAR IT_BJTAB.
ENDAT.
ENDLOOP.
ENDFORM.