这是方法一,还有一个方法就是改ALSM_EXCEL_TO_INTERNAL_TABLE了
9999问题本来就不是问题,行号9999之后再次从0000开始,不影响数据获取。
40000问题才是问题,需要分批次或改标准程序解决
REPORT ztest_s03.
TABLES:sscrfields.
TYPE-POOLS:icon.
TYPES:BEGIN OF ty_upload,
werks TYPE char20,
lgort TYPE char20,
matnr TYPE char20,
psmng TYPE char20,
meins TYPE char20,
attri TYPE char20,
aufnr TYPE char20,
msg TYPE char20,
index TYPE char20,
END OF ty_upload.
*&---------------------------------------------------------------------*
*& Internal Tables Definition
*&---------------------------------------------------------------------*
DATA:gt_upload TYPE TABLE OF ty_upload.
DATA:gs_upload TYPE ty_upload.
DATA:gs_functxt TYPE smp_dyntxt.
PARAMETERS: p_file TYPE rlgrap-filename.
SELECTION-SCREEN: FUNCTION KEY 1.
INITIALIZATION.
gs_functxt-icon_id = icon_export.
gs_functxt-icon_text = 'Template'.
sscrfields-functxt_01 = gs_functxt.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
PERFORM frm_filename.
AT SELECTION-SCREEN.
CASE sscrfields-ucomm.
WHEN 'FC01'.
PERFORM frm_download_template .
ENDCASE.
START-OF-SELECTION.
PERFORM frm_upload.
FORM frm_filename .
CLEAR p_file.
CALL FUNCTION 'F4_FILENAME'
IMPORTING
file_name = p_file.
ENDFORM.
FORM frm_upload .
DATA:ls_exceldata TYPE alsmex_tabline,
lt_exceldata TYPE TABLE OF alsmex_tabline.
FIELD-SYMBOLS: <ls_cell> TYPE any.
CHECK p_file IS NOT INITIAL.
DATA(i_begin_row) = 1.
DATA(i_end_row) = 5000.
DO .
CLEAR: lt_exceldata.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_file
i_begin_col = 1
i_begin_row = i_begin_row
i_end_col = 7
i_end_row = i_end_row
TABLES
intern = lt_exceldata
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc = 0 .
IF lt_exceldata[] IS INITIAL.
EXIT.
ELSE.
SORT lt_exceldata BY row col.
LOOP AT lt_exceldata INTO ls_exceldata.
ASSIGN COMPONENT ls_exceldata-col OF STRUCTURE gs_upload TO <ls_cell>.
IF sy-subrc = 0.
<ls_cell> = ls_exceldata-value.
ENDIF.
AT END OF row.
APPEND gs_upload TO gt_upload.
CLEAR gs_upload.
ENDAT.
CLEAR: ls_exceldata.
ENDLOOP.
ENDIF.
ELSE.
MESSAGE e000(0k) WITH TEXT-003. "File import failed
ENDIF.
i_begin_row = i_end_row + 1.
i_end_row = i_end_row + 5000 .
ENDDO.
ENDFORM.
FORM frm_download_template .
DATA: lv_filename TYPE string,
lv_path TYPE string,
lv_fullpath TYPE string,
lv_key TYPE wwwdatatab,
lv_rc TYPE sy-subrc,
lv_temp TYPE c,
lv_dest TYPE rlgrap-filename,
lv_str TYPE string.
CLEAR: lv_filename, lv_path, lv_fullpath, lv_str.
lv_str = 'MOs Loading File'.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
default_extension = 'xlsx'
default_file_name = lv_str
CHANGING
filename = lv_filename
path = lv_path
fullpath = lv_fullpath
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc = 0.
CLEAR lv_dest.
lv_dest = lv_fullpath.
"Download Data Template
IF lv_dest IS NOT INITIAL.
CLEAR: lv_rc, lv_temp, lv_key.
lv_key-relid = 'MI'.
lv_key-objid = 'ZGLR_MO_OPEN_BOM'.
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = lv_key
destination = lv_dest
IMPORTING
rc = lv_rc
CHANGING
temp = lv_temp.
IF lv_rc EQ 0.
MESSAGE s000(0k) WITH TEXT-001.
ELSE.
MESSAGE e000(0k) WITH TEXT-002.
ENDIF.
ELSE.
ENDIF.
ENDIF.
ENDFORM.