sap ABAP excel模板导入内表 修改数据库

定义选择屏幕
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.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值