【ABAP函数】+ALSM_EXCEL_TO_INTERNAL_TABLE批导长字段
做批导程序,个人比较喜欢使用函数:'TEXT_CONVERT_XLS_TO_SAP',因为过程比较清晰明了。还有一个函数也是批导EXCEL文件用得比较多的,即'ALSM_EXCEL_TO_INTERNAL_TABLE',在使用时,一般会复制出来使用,即'ZALSM_EXCEL_TO_INTERNAL_TABLE'。
今天有个需求是批导一个长文本字段,大概500个字符长度,最开始使用的就是'TEXT_CONVERT_XLS_TO_SAP'这个函数,但是这个函数在接收字段的时候单元格有长度限制,就自动被截断了,然后我就直接换了一个函数使用,'ALSM_EXCEL_TO_INTERNAL_TABLE',然后修改限制的长度,如下:
直接复制原函数出来,使用Z开头,包含到我们自己的包里面。
然后修改导入参数的限制长度,同样也是复制出来,用Z开头
然后就可以超长字段批导EXCEL了。
FORM FRM_UPLOAD_FILE_LONG .DATA: GT_XLSTMP TYPE ZALSMEX_TABLINE_LONG OCCURS 0 WITH HEADER LINE,CL_EXCEPTION TYPE REF TO CX_ROOT.DATA: GV_OKCODE LIKE SY-UCOMM,GV_INDEX TYPE I,GV_TABIX TYPE I.DATA: LV_PREV_MATNR1 TYPE MATNR,LT_MATNR2 TYPE TABLE OF MATNR.FIELD-SYMBOLS: <FS_G_TABLE> TYPE STANDARD TABLE,<FS_G_TMP_TABLE> TYPE STANDARD TABLE, " excel临时文件存放内表<FS_G_WORK> TYPE ANY,<FS_G_TMP_WORK> TYPE ANY, " excel临时文件存放工作区<FS_G_FIELD>,<FS_G_TMP_FIELD>,<FS_G_DATA> TYPE ANY TABLE. " 存放从submit中返回的ALV的数据CLEAR: GT_XLSTMP.CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLEL'EXPORTINGFILENAME = P_FILEI_BEGIN_COL = 1"从第1列开始读取EXCELI_BEGIN_ROW = 2"从第二行开始读取EXCELI_END_COL = 4"读EXCEL到第四列结束I_END_ROW = 999999"最多读取999999行EXCEL数据TABLESINTERN = GT_XLSTMPEXCEPTIONSINCONSISTENT_PARAMETERS = 1UPLOAD_OLE = 2OTHERS = 3.IF SY-SUBRC <> 0.MESSAGE ID SY-MSGID TYPE 'E' NUMBER SY-MSGNOWITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ELSE.* 将数据转换成自建表的数据格式SORT GT_XLSTMP BY ROW COL.TRY .LOOP AT GT_XLSTMP.CLEAR: GV_INDEX.MOVE GT_XLSTMP-COL TO GV_INDEX.UNASSIGN <FS_G_FIELD>.ASSIGN COMPONENT GV_INDEX OF STRUCTURE GS_EXCEL TO <FS_G_FIELD>.IF SY-SUBRC = 0.MOVE GT_XLSTMP-VALUE TO <FS_G_FIELD>.AT END OF ROW.APPEND GS_EXCEL TO GT_EXCEL.CLEAR: GS_EXCEL.ENDAT.ELSE.MESSAGE '数据格式异常,请检查!' TYPE 'S' DISPLAY LIKE 'E'.LEAVE LIST-PROCESSING.ENDIF.ENDLOOP.CATCH CX_ROOT INTO CL_EXCEPTION. " 捕获数据格式错误异常MESSAGE '数据格式异常,请检查!' TYPE 'S' DISPLAY LIKE 'E'.LEAVE LIST-PROCESSING.ENDTRY.ENDIF.
endform.