[问题解决]大数据量上载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.

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/19211.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论