实践中,发现这个函数有个缺陷,如果excel的单元格长度超过50位,就会导致上载截断,因此一般项目中会进行一些改造。
直接复制这个函数,创建一个Z开头的自定义函数ZALSM_EXCEL_TO_INTERNAL_TABLE
复制表参数的结构为ZALSMEX_TABLINE,修改Value的长度
还可以对这个函数再做改变,让这个函数支持指定sheet页上载
在输入参数里面加上一个参数SHEET_NAME参考ALSMEX_TABLINE-VALUE
然后修改函数代码,添加指定sheet页的功能
调用函数的时候要指定一下sheet页名称
DATA: GV_SHEET1 LIKE ALSMEX_TABLINE-VALUE VALUE '物料',
PERFORM FRM_UPLOAD_FROM_EXCEL TABLES GT_I1
USING P_FPATH
GV_SHEET1
'1' "开始列
'2' "开始行
'9' "结束列
'10000'.
*&---------------------------------------------------------------------*
*& Form FRM_UPLOAD_FROM_EXCEL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GT_I3 text
* -->P_P_FPATH text
* -->P_GV_SHEET3 text
* -->P_0409 text
* -->P_0410 text
* -->P_0411 text
* -->P_0412 text
*----------------------------------------------------------------------*
FORM FRM_UPLOAD_FROM_EXCEL TABLES PT_TABLE TYPE STANDARD TABLE
USING P_FILE
P_SHEET
P_BEG_COL
P_BEG_ROW
P_END_COL
P_END_ROW.
DATA: L_FILENAME LIKE RLGRAP-FILENAME.
CLEAR: GT_IEXCEL.
REFRESH: GT_IEXCEL.
L_FILENAME = P_FILE.
CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE2'
EXPORTING
FILENAME = L_FILENAME
I_BEGIN_COL = P_BEG_COL
I_BEGIN_ROW = P_BEG_ROW
I_END_COL = P_END_COL
I_END_ROW = P_END_ROW
SHEET_NAME = P_SHEET
TABLES
INTERN = GT_IEXCEL
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE '导入数据文件失败!' TYPE 'S'.
STOP.
ENDIF.
LOOP AT GT_IEXCEL ASSIGNING <GT_IEXCEL>.
TRY.
ASSIGN COMPONENT <GT_IEXCEL>-COL OF STRUCTURE PT_TABLE TO <F1>.
IF <F1> IS ASSIGNED.
<F1> = <GT_IEXCEL>-VALUE.
ENDIF.
AT END OF ROW.
APPEND PT_TABLE.
CLEAR: PT_TABLE.
ENDAT.
CATCH CX_ROOT.
MESSAGE '待导入的文件中存在错误的数据格式,请检查!' TYPE 'S'.
STOP.
ENDTRY.
ENDLOOP.
SORT PT_TABLE.
DELETE ADJACENT DUPLICATES FROM PT_TABLE COMPARING ALL FIELDS.
ENDFORM. " FRM_UPLOAD_FROM_EXCEL