二维码

批量上传大量数据,SAP标准函数dump

Twilight发表于 2025-05-17 22:02Twilight 最后回复于 2025-05-17 22:02 [复制链接] 32 0

采用批次处理的方式,循环调用ALSM_EXCEL_TO_INTERNAL_TABLE
  1. FORM frm_excel_up .
  2. * 局部变量的定义
  3.   DATA:lt_excel TYPE TABLE OF alsmex_tabline,
  4.        ls_excel TYPE alsmex_tabline.
  5.   DATA:lv_date      TYPE string,
  6.        lv_time      TYPE string,
  7.        lv_begin_row TYPE i,
  8.        lv_end_row   TYPE i.

  9.   CLEAR gt_upload[].
  10. * 选择文件后做后续处理
  11.   CHECK p_file IS NOT INITIAL.

  12.   lv_begin_row = 4.
  13.   lv_end_row   = 100000.
  14.   DO 10 TIMES.
  15.     REFRESH:lt_excel[].
  16. * 把文件的数据变成内表
  17.     CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
  18.       EXPORTING
  19.         filename                = p_file
  20.         i_begin_col             = 1
  21.         i_begin_row             = lv_begin_row "4
  22.         i_end_col               = 6
  23.         i_end_row               = lv_end_row "1000000
  24.       TABLES
  25.         intern                  = lt_excel
  26.       EXCEPTIONS
  27.         inconsistent_parameters = 1
  28.         upload_ole              = 2
  29.         OTHERS                  = 3.
  30.     IF sy-subrc <> 0.
  31.       MESSAGE '文件打开失败!'(010) TYPE  'E'.
  32.     ENDIF.

  33. *  判断导入的数据是否为空
  34.     IF lt_excel[] IS INITIAL.
  35.       EXIT.
  36.     ENDIF.

  37. * 处理内表数据
  38.     LOOP AT lt_excel INTO ls_excel.
  39.       CASE ls_excel-col.
  40.         WHEN 1.
  41.           gt_upload-bolnr  = ls_excel-value.
  42.         WHEN 2.
  43.           gt_upload-vbeln_vl  = |{ ls_excel-value ALPHA = IN }|.
  44.         WHEN 3.
  45.           IF ls_excel-value CA '-'.
  46.             SPLIT ls_excel-value AT space INTO lv_date lv_time.
  47.             IF sy-subrc = 0.
  48.               gt_upload-sdate = lv_date+0(4) && lv_date+5(2) && lv_date+8(2).
  49.             ELSE.
  50.               gt_upload-sdate  = ls_excel-value.
  51.             ENDIF.
  52.           ELSE.
  53.             IF ls_excel-value CA '/'.
  54.               SPLIT ls_excel-value AT space INTO lv_date lv_time.
  55.               IF sy-subrc = 0.
  56.                 TRY.
  57.                     CALL METHOD cl_abap_datfm=>conv_date_ext_to_int
  58.                       EXPORTING
  59.                         im_datext   = lv_date
  60.                         im_datfmdes = '5'
  61.                       IMPORTING
  62.                         ex_datint   = gt_upload-sdate.
  63.                   CATCH cx_abap_datfm_no_date .
  64.                   CATCH cx_abap_datfm_invalid_date .
  65.                   CATCH cx_abap_datfm_format_unknown .
  66.                   CATCH cx_abap_datfm_ambiguous .
  67.                 ENDTRY.
  68.               ELSE.
  69.                 gt_upload-sdate  = ls_excel-value.
  70.               ENDIF.
  71.             ELSE.
  72.               gt_upload-sdate  = ls_excel-value.
  73.             ENDIF.
  74.           ENDIF.
  75.         WHEN 4.
  76.           gt_upload-stype = ls_excel-value.
  77.           CONDENSE gt_upload-stype NO-GAPS.
  78.         WHEN 5.
  79.           gt_upload-yunfei = ls_excel-value.
  80.         WHEN 6.
  81.           gt_upload-waerk  = ls_excel-value.
  82.         WHEN OTHERS.
  83.       ENDCASE.
  84.       AT END OF row.
  85.         APPEND gt_upload.
  86.         CLEAR:gt_upload.
  87.       ENDAT.
  88.     ENDLOOP.

  89.     lv_begin_row = lv_end_row + 1.
  90.     lv_end_row   = lv_end_row + 100000.
  91.   ENDDO.

  92. ENDFORM.
复制代码
回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表