(1)先在屏幕上增加上傳文件的按鈕
"屏幕選擇條件"
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
?? ?PARAMETERS : p_source ?LIKE rlgrap-filename .
SELECTION-SCREEN END OF BLOCK b1.
你會發現,上面的代碼只是簡單的單文本框,沒有可以讓我們選擇的界面
(2)為單文本框增添搜索幫助(PARAMETERS自定義搜索幫助)
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_source."防止數據復用"CLEAR p_source."獲取文件名稱"PERFORM get_filename.START-OF-SELECTION."屏幕選擇結束標志/處理數據程序開始執行"
get_filename 的四種方法
① 獲取文件名稱方法一(不推薦)
FORM GET_FILENAME1.TRY.CALL FUNCTION 'WS_FILENAME_GET' "雖然該函數仍然可以使用 , 但是該函數已經過時了"EXPORTINGDEF_FILENAME = '' "默認文件名稱"DEF_PATH = '' "路徑"" 格式 : (空格不可少) 名稱1 , *.xls (格式1),名稱2 , *.xlsx(格式2) ,名稱3 ,*.*.(格式3 , 注意 : . 號不可缺) """MASK = ' XLS,*.xls,XLSX,*.xlsx,All Files,*.*.'MASK = ''" 彈出框的模式 S -- 用來保存文件 O -- 用來打開文件 "MODE = '0'TITLE = '請選擇文件 'IMPORTINGFILENAME = p_source" RC = "EXCEPTIONSINV_WINSYS = 1NO_BATCH = 2SELECTION_CANCEL = 3 "如果用戶取消了對話框"SELECTION_ERROR = 4OTHERS = 5 .ENDTRY.ENDFORM.
② 獲取文件名稱方法二
FORM GET_FILENAME2.DATA : G_RC TYPE I.DATA : L_OBJ TYPE REF TO CL_GUI_FRONTEND_SERVICES.DATA : IT_FILE TYPE FILETABLE WITH HEADER LINE.CREATE OBJECT L_OBJ.CALL METHOD L_OBJ->FILE_OPEN_DIALOGEXPORTINGFILE_FILTER = ''INITIAL_DIRECTORY = ''CHANGINGFILE_TABLE = IT_FILE[]RC = G_RCEXCEPTIONSfile_open_dialog_failed = 1cntl_error = 2error_no_gui = 3not_supported_by_gui = 4OTHERS = 5.READ TABLE IT_FILE INDEX 1.P_SOURCE = IT_FILE-FILENAME.ENDFORM.
③ 獲取文件名稱方法三
FORM GET_FILENAME3.CALL FUNCTION 'F4_FILENAME'EXPORTINGPROGRAM_NAME = SYST-CPROG "程序名"DYNPRO_NUMBER = SYST-DYNNR "當前屏幕號"FIELD_NAME = ' ' "文件類型 , 默認為空"IMPORTINGFILE_NAME = P_SOURCE. "文件名稱"
ENDFORM.
④ 獲取文件名稱方法四
FORM GET_FILENAME4.CALL FUNCTION 'KD_GET_FILENAME_ON_F4'EXPORTINGPROGRAM_NAME = SYST-REPIDDYNPRO_NUMBER = SYST-DYNNRFIELD_NAME = ' 'STATIC = ' 'MASK = ' 'FILEOPERATION = 'R'PATH = ' 'CHANGINGFILE_NAME = P_SOURCE"LOCATION_FLAG = 'P'EXCEPTIONSMASK_TOO_LONG = 1OTHERS = 2.
ENDFORM.
這時候就能獲取文件的路徑了
(3)將excel數據讀取到內表
① 定義內表(推薦全局定義)
"接收EXCEL報表數據的內表 (承接excel數據的內表格式一般都是string類型,內表定義多少列,就會讀取EXCEL 前幾列)"
DATA :
? BEGIN OF gt_excel OCCURS 0,
? ? aufnr(12), " 工單號碼"
? ? gstrs(10), " 工單開始日期"
? ? gltrs(10), " 工單結束日期"
? ? info(50),"信息提示"
? END OF gt_excel.
② 將excel數據讀取到內表
?
FORM get_excel .
? "如果為空,表示沒有選中文件"
? IF p_source EQ ''.
? ? MESSAGE s000(1) WITH '未選擇文件!' DISPLAY LIKE 'E'.
? ? STOP.
? ENDIF.? "文件選中后 , 將文件信息讀取到內表 , 注意 : 文件信息的排版 , 必須與獲取數據內表的數據結構 , 排版要一致 , 不然會報錯"
? CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP' "可以是Excel文件,也可以是Txt文件"
? ? EXPORTING
"* ? ? I_FIELD_SEPERATOR ? ?= 分隔符,默認為TAB"
? ? ? i_line_header ? ? ? ?= 'X' "文本中的第一行是否是標題頭,如果是則不會讀取"
? ? ? i_tab_raw_data ? ? ? = il_raw "該參數實際上沒有使用到,但為必輸參數"
? ? ? i_filename ? ? ? ? ? = p_source
? ? TABLES
? ? ? i_tab_converted_data = gt_excel "會自動的將Excel、Txt文件中的數據一行行讀取到數據內表中"
? ? EXCEPTIONS
? ? ? conversion_failed ? ?= 1
? ? ? OTHERS ? ? ? ? ? ? ? = 2.? "如果excel 數據格式不正確 或 excel 數據為空 , 提示重新選擇文件"
? IF gt_excel[] IS ?INITIAL .
? ? MESSAGE s000(1) WITH '文件無數據或文件格式出錯,請重新選擇文件!' DISPLAY LIKE 'E'.
? ? LEAVE LIST-PROCESSING.
? ENDIF.
*----------------------------------------------------------------------*
* LEAVE LIST-PROCESSING.
*
* 如果寫在at selection-screen 就返回到輸出界面
* 如果寫在start-of-selection. 就返回到initialization事件
*
*----------------------------------------------------------------------*
ENDFORM.
?