导入文件格式可为TXT或者EXCEL,根据文件格式选择相应代码段
REPORT YHJZ_004_UPLOAD NO STANDARD PAGE HEADING LINE-SIZE 110.
TABLES:SSCRFIELDS."是一个structure
DATA: RESULT TYPE I.
DATA:EXCELITAB LIKE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE.
DATA:BEGIN OF T_YTCTK OCCURS 0.
INCLUDE STRUCTURE YTCTK.
DATA:END OF T_YTCTK.
DATA:BEGIN OF WA .
INCLUDE STRUCTURE YTCTK.
DATA:END OF WA.
DATA:LINE(1000) TYPE C, "存放TXT文件的一行
T_YTCTK1 LIKE TABLE OF LINE WITH HEADER LINE. "存放TXT文件的内表
DATA:L_FLAG TYPE C,COL TYPE I.
SELECTION-SCREEN:BEGIN OF BLOCK B1 WITH FRAME TITLE TT1 NO INTERVALS,
BEGIN OF LINE,
COMMENT (10) TEXT1.
PARAMETERS P_FILE LIKE RLGRAP-FILENAME VISIBLE LENGTH 20.
SELECTION-SCREEN:
PUSHBUTTON 34(10) BTN1 USER-COMMAND CLI1,
END OF LINE,
END OF BLOCK B1.
AT SELECTION-SCREEN .
CASE SSCRFIELDS.
WHEN 'CLI1'.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
DEF_FILENAME = ''
DEF_PATH = 'C:/'
* MASK = ',*.XLS,*.XLS.'
* MODE = '0'
TITLE = '选择需要导入的文件'
IMPORTING
FILENAME = P_FILE
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4
OTHERS = 5.
ENDCASE.
INITIALIZATION.
TT1 = '请选择要上传的文件'.
TEXT1 = '上传文件:'.
BTN1 = '浏览…'.
START-OF-SELECTION.
PERFORM CHECK_FILE.
PERFORM READ_FILE.
PERFORM CONVERSION_ITAB_DATA.
PERFORM MODIFY_TABLE.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form CHECK_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CHECK_FILE .
CALL FUNCTION 'WS_QUERY'
EXPORTING
FILENAME = P_FILE
QUERY = 'FE'
IMPORTING
RETURN = RESULT
EXCEPTIONS
INV_QUERY = 1
NO_BATCH = 2
FRONTEND_ERROR = 3
OTHERS = 4.
IF RESULT = 0.
MESSAGE I888(SABAPDOCU) WITH P_FILE '上传文件不存在!'.
STOP.
ENDIF.
ENDFORM. " CHECK_FILE
*&---------------------------------------------------------------------*
*& Form read_file
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM READ_FILE .
***************************导入EXCEL文件**********************
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = P_FILE
I_BEGIN_COL = 1 "开始列
I_BEGIN_ROW = 2 "开始行
I_END_COL = 50 "结束列
I_END_ROW = 6000 "结束行
TABLES
INTERN = EXCELITAB
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3.
*****************导入TXT文件**********************
** CALL FUNCTION 'WS_UPLOAD' "上传文件
** EXPORTING
** FILENAME = P_FILE
** TABLES
** DATA_TAB = T_YTCTK1
** EXCEPTIONS
** CONVERSION_ERROR = 1
** FILE_OPEN_ERROR = 2
** FILE_READ_ERROR = 3
** INVALID_TYPE = 4
** NO_BATCH = 5
** UNKNOWN_ERROR = 6
** INVALID_TABLE_WIDTH =7
** GUI_REFUSE_FILETRANSFER = 8
** CUSTOMER_ERROR = 9
** OTHERS = 10.
IF SY-SUBRC <> 0.
MESSAGE I888(SABAPDOCU) WITH 'UPLOAD ERROR!'.
ENDIF.
ENDFORM. " read_file
*&---------------------------------------------------------------------*
*& Form conversion_itab_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CONVERSION_ITAB_DATA .
***************************导入EXCEL文件**********************
SORT EXCELITAB BY ROW COL.
LOOP AT EXCELITAB.
TRANSLATE EXCELITAB-VALUE TO UPPER CASE.
CASE EXCELITAB-COL.
WHEN '0001'.
T_YTCTK-GJAHR = EXCELITAB-VALUE.
WHEN '0002'.
T_YTCTK-RPMAX = EXCELITAB-VALUE.
WHEN '0003'.
T_YTCTK-YTCDX = EXCELITAB-VALUE.
WHEN '0004'.
T_YTCTK-YTCLX = EXCELITAB-VALUE.
WHEN '0005'.
T_YTCTK-BZIRK = EXCELITAB-VALUE.
WHEN '0006'.
T_YTCTK-BZTXT = EXCELITAB-VALUE.
WHEN '0007'.
T_YTCTK-VKBUR = EXCELITAB-VALUE.
WHEN '0008'.
T_YTCTK-BEZEI = EXCELITAB-VALUE.
WHEN '0009'.
T_YTCTK-PERNR = EXCELITAB-VALUE.
WHEN '0010'.
T_YTCTK-MVGR1 = EXCELITAB-VALUE.
WHEN '0011'.
T_YTCTK-MVGR3 = EXCELITAB-VALUE.
WHEN '0012'.
T_YTCTK-YBGDA = EXCELITAB-VALUE.
WHEN '0013'.
T_YTCTK-YENDA = EXCELITAB-VALUE.
WHEN '0014'.
T_YTCTK-YTCMB = EXCELITAB-VALUE.
WHEN '0015'.
T_YTCTK-YBEIZ = EXCELITAB-VALUE.
WHEN'0016'.
T_YTCTK-YQDSH = EXCELITAB-VALUE.
ENDCASE.
AT END OF ROW.
IF T_YTCTK-GJAHR <> ''.
APPEND T_YTCTK.
CLEAR T_YTCTK.
ENDIF.
ENDAT.
ENDLOOP.
*****************导入TXT文件**********************
** LOOP AT T_YTCTK1.
** SPLIT T_YTCTK1 AT ',' INTO WA-GJAHR WA-RPMAX WA-YTCDX WA-YTCLX WA-BZIRK WA-BZTXT WA-VKBUR WA-BEZEI
** WA-PERNR WA-MVGR1 WA-MVGR3 WA-YBGDA WA-YENDA WA-YBEIZ WA-YQDSH .
** APPEND WA TO T_YTCTK.
** ENDLOOP.
*****注意:工作区WA的字段数据类型必需为C,N,D,T OR STRING.
ENDFORM. " conversion_itab_data
*&---------------------------------------------------------------------*
*& Form modify_table
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM MODIFY_TABLE .
DESCRIBE TABLE T_YTCTK LINES COL.
IF COL NE 0.
LOOP AT T_YTCTK.
MODIFY YTCTK FROM TABLE T_YTCTK.
IF SY-SUBRC NE 0.
L_FLAG = 'X'.
MESSAGE '导入失败,请联系管理员!' TYPE 'E'.
ENDIF.
ENDLOOP.
IF L_FLAG EQ 'X'.
MESSAGE '导入失败,请联系管理员!' TYPE 'E'.
ELSE.
MESSAGE '数据成功导入!' TYPE 'S'.
ENDIF.
ELSE.
MESSAGE '导入失败,请检查数据源!' TYPE 'E'.
ENDIF.
ENDFORM. " modify_table