[問題解決]大數據量上載excel文件數據到SAP系統[ALSM_EXCEL_TO_INTERNAL_TABLE]


1, 問題描述

用excel上載大數據量的BOM數據到SAP系統中,一次上載的數量級別在10萬條左右,這時用ALSM_EXCEL_TO_INTERNAL_TABLE上載時會dump,查看了代碼發現ALSM_EXCEL_TO_INTERNAL_TABLE中是將數據先保存到剪貼板( Clippboard )上,然后在保存到內表中,很不幸剪貼板大小有限制,超過就會dump。

2017-02-15_15-44-00

2, 問題解決

解決方法比較簡單,就是在循環中調用ALSM_EXCEL_TO_INTERNAL_TABLE,將一次上載的內容分成多次,以便減少保存到剪貼板中的內容。

代碼如下:

下面代碼中,每次上載40000條數據,循環10次,最多可以上載40萬,當然循環次數還可以按需求擴大。

REPORT ztest_upload_excel.

DATA:g_begin_row TYPE i,
     g_end_row   TYPE i.
DATA:git_temp TYPE TABLE OF alsmex_tabline,
     gwa_temp TYPE alsmex_tabline.
TYPES:BEGIN OF ty_upload,
        werks       TYPE ymoe_compalloc-werks,       "Plant
        root        TYPE ymoe_compalloc-root,        "Root material
        maktxr      TYPE makt-maktx,                 "Description ( R )
        parent      TYPE ymoe_compalloc-parent,      "Parent
        maktxp      TYPE makt-maktx,                 "Description ( P )
        beskz       TYPE marc-beskz,                 "Procurement Type
        sobsl       TYPE marc-sobsl,                 "Special Procurement Type
        component   TYPE ymoe_compalloc-component,   "Component
        maktxc      TYPE makt-maktx,                 "Description ( C )
        prodline    TYPE ymoe_compalloc-prodline,    "Production Line
        workstation TYPE ymoe_compalloc-workstation, "Work Station
      END OF ty_upload.
DATA:git_upload TYPE STANDARD TABLE OF ty_upload,
     gwa_upload LIKE LINE OF git_upload.

PARAMETERS:p_file   TYPE rlgrap-filename
               DEFAULT 'C:\temp\upload.xlsx' OBLIGATORY. "File Name

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  PERFORM frm_get_filename.

*----------------------------------------------------------------------*
* Start-of-Selection
*----------------------------------------------------------------------*
START-OF-SELECTION.

  g_begin_row = 2.
  g_end_row = g_begin_row + 40000.

  DO 10 TIMES.
    REFRESH:git_temp.
*   Get EXCEL-Sheet in internal table
    CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
      EXPORTING
        filename                = p_file
        i_begin_col             = '1'
        i_begin_row             = g_begin_row
        i_end_col               = '11'
        i_end_row               = g_end_row
      TABLES
        intern                  = git_temp
      EXCEPTIONS
        inconsistent_parameters = 1
        upload_ole              = 2
        OTHERS                  = 3.

    IF git_temp[] IS INITIAL.
      EXIT.
    ELSE.
      LOOP AT git_temp INTO gwa_temp.
        AT NEW row.
          CLEAR gwa_upload.
        ENDAT.
        CASE gwa_temp-col.
          WHEN '1'.
            gwa_upload-werks = gwa_temp-value.
          WHEN '2'.
            gwa_upload-root = gwa_temp-value.
          WHEN '3'.
            gwa_upload-maktxr = gwa_temp-value.
          WHEN '4'.
            gwa_upload-parent = gwa_temp-value.
          WHEN '5'.
            gwa_upload-maktxp = gwa_temp-value.
          WHEN '6'.
            gwa_upload-beskz = gwa_temp-value.
          WHEN '7'.
            gwa_upload-sobsl = gwa_temp-value.
          WHEN '8'.
            gwa_upload-component = gwa_temp-value.
          WHEN '9'.
            gwa_upload-maktxc = gwa_temp-value.
          WHEN '10'.
            gwa_upload-prodline = gwa_temp-value.
          WHEN '11'.
            gwa_upload-workstation = gwa_temp-value.
        ENDCASE.
        AT END OF row.
          APPEND gwa_upload TO git_upload.
        ENDAT.
      ENDLOOP.
      g_begin_row = g_end_row + 1.
      g_end_row   = g_begin_row + 40000.
    ENDIF.

  ENDDO.

*&---------------------------------------------------------------------*
*&      Form  FRM_GET_FILENAME
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_get_filename .

  DATA:l_filter TYPE string,
       lit_file TYPE STANDARD TABLE OF file_table,
       lwa_file LIKE LINE OF lit_file,
       l_rc     TYPE i.

  CLEAR:p_file.
  l_filter = 'Microsoft Excel Files (*.XLS;*.XLSX;*.XLSM)|*.XLS;*.XLSX;*.XLSM|'.

  CALL METHOD cl_gui_frontend_services=>file_open_dialog
    EXPORTING
*     window_title            =
      default_extension       = '.xlsx'
*     default_filename        =
      file_filter             = l_filter
*     with_encoding           =
*     initial_directory       =
*     multiselection          =
    CHANGING
      file_table              = lit_file
      rc                      = l_rc
*     user_action             =
*     file_encoding           =
    EXCEPTIONS
      file_open_dialog_failed = 1
      cntl_error              = 2
      error_no_gui            = 3
      not_supported_by_gui    = 4
      OTHERS                  = 5.
  IF sy-subrc = 0.
    READ TABLE lit_file INTO lwa_file INDEX 1.
    IF sy-subrc = 0.
      p_file = lwa_file-filename.
    ENDIF.
  ENDIF.

ENDFORM.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM