定义选择屏幕
PARAMETERS: P_FILE LIKE RLGRAP-FILENAME MODIF ID M12.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
PERFORM FRM_UPLOAD.
获取文件路径
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
MASK = ',*.* ,*.*.'(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.
GV_FILE = P_FILE.
FORM FRM_IMP .
DATA:LT_IMP LIKE TABLE OF ZJZSDT_QTCO_TLCO,
LS_IMP TYPE ZJZSDT_QTCO_TLCO.
DATA: LT_DATA TYPE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE.
DATA: LS_DATA TYPE ALSMEX_TABLINE.
DATA: LV_STRING(100) TYPE C,
LV_STRING1(50) TYPE C,
LV_STRING2(50) TYPE C.
RANGES: LR_WERKS FOR T001W-WERKS,
LR_BU_SORT1 FOR BUT000-BU_SORT1.
SELECT
WERKS
INTO TABLE @DATA(LT_WERKS)
FROM T001W.
SELECT
BU_SORT1
INTO TABLE @DATA(LT_SORT)
FROM BUT000
WHERE BU_SORT1 NE ''.
LOOP AT LT_WERKS ASSIGNING FIELD-SYMBOL(<FS_WERKS>).
LR_WERKS[] = VALUE #( BASE LR_WERKS[]
( SIGN = 'I' OPTION = 'EQ' LOW = <FS_WERKS>-WERKS )
).
ENDLOOP.
LOOP AT LT_SORT ASSIGNING FIELD-SYMBOL(<FS_SORT>).
LR_BU_SORT1[] = VALUE #( BASE LR_BU_SORT1[]
( SIGN = 'I' OPTION = 'EQ' LOW = <FS_SORT>-BU_SORT1 )
).
ENDLOOP.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE' "读取excel文件中的内容
EXPORTING
FILENAME = GV_FILE
I_BEGIN_COL = '1'
I_BEGIN_ROW = '1'
I_END_COL = '50'
I_END_ROW = '5000'
TABLES
INTERN = LT_DATA.
SORT LT_DATA BY ROW COL VALUE.
*---整理到内表数据
DELETE LT_DATA WHERE ROW EQ 1.
FIELD-SYMBOLS: <FS_VALUE>.
LOOP AT LT_DATA INTO LS_DATA.
ASSIGN COMPONENT LS_DATA-COL OF STRUCTURE GS_DATAIMP TO <FS_VALUE>.
IF SY-SUBRC = 0.
<FS_VALUE> = LS_DATA-VALUE.
ENDIF.
AT END OF ROW.
GS_DATAIMP-UNAME = SY-UNAME.
GS_DATAIMP-UDATE = SY-DATUM.
GS_DATAIMP-UTIME = SY-UZEIT.
APPEND GS_DATAIMP TO GT_DATAIMP.
LS_IMP-WERKS = GS_DATAIMP-WERKS.
IF LS_IMP-WERKS NOT IN LR_WERKS.
LV_STRING1 = '工厂' && LS_IMP-WERKS .
ENDIF.
LS_IMP-BU_SORT = GS_DATAIMP-BU_SORT.
IF LS_IMP-BU_SORT IS INITIAL.
ELSE.
IF LS_IMP-BU_SORT NOT IN LR_BU_SORT1.
LV_STRING2 = '客户代码' && LS_IMP-BU_SORT.
ENDIF.
ENDIF.
LS_IMP-TLSTA = GS_DATAIMP-TLSTA.
LS_IMP-ZDATE = GS_DATAIMP-ZDATE.
LS_IMP-ZTLCO = GS_DATAIMP-ZTLCO.
LS_IMP-UNAME = GS_DATAIMP-UNAME.
LS_IMP-UDATE = GS_DATAIMP-UDATE.
LS_IMP-UTIME = GS_DATAIMP-UTIME.
APPEND LS_IMP TO LT_IMP.
CLEAR LS_IMP.
CLEAR GS_DATAIMP.
ENDAT.
CLEAR LS_DATA.
ENDLOOP.
IF LV_STRING1 IS NOT INITIAL OR LV_STRING2 IS NOT INITIAL.
LV_STRING = LV_STRING1 && LV_STRING2 && '不存在。请检查!'.
MESSAGE LV_STRING TYPE 'S' DISPLAY LIKE 'E'.
RETURN.
ENDIF.
MODIFY ZJZSDT_QTCO_TLCO FROM TABLE LT_IMP.
IF SY-SUBRC = 0.
COMMIT WORK.
MESSAGE '数据导入成功!'TYPE 'S'.
ELSE.
ROLLBACK WORK.
MESSAGE '数据导入失败!' TYPE 'E'.
ENDIF.
ENDFORM.