ALSM_EXCEL_TO_INTERNAL_TABLE修改
使用限制
用系统自带的函数 ALSM_EXCEL_TO_INTERNAL_TABLE 有2个限制:
- 读取cell最多读取前50个字符(CHAR50)
- 如果超过9999行,行号会初始化为从零开始(INT4)
通过代码展示一下。
D:/sapboy.xlsx文件内容: 第1列第6行的数据已经超过了50字符。
data filename type RLGRAP-FILENAME VALUE 'D:\sapboy.xlsx' . "定义读取的文件 DATA:itab TYPE TABLE OF ALSMEX_TABLINE WITH HEADER LINE. "定义读取到的内表 带表头的 CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE' EXPORTING filename = filename i_begin_col = 1 "从第一列开始读取 i_begin_row = 2 "从第二行开始读取 i_end_col = 3 "截至到第三列 i_end_row = 9999 "截至到第9999行 TABLES intern = itab * EXCEPTIONS * INCONSISTENT_PARAMETERS = 1 * UPLOAD_OLE = 2 * OTHERS = 3 . IF sy-subrc <> 0. ENDIF. BREAK-POINT."命令断点调试
我们看一下返回的表 itab:
函数参数 i_begin_row 从第二行开始读取,所以这里itab内表第一行的值是"第2行第1列"。
原本应该是56字符的被截取成50字符了。
修改限制
创建函数组
- 创建函数组 ZFG02 .
- 修改 LZFG02TOP 全局数据,复制函数组ALSMEX的TOP全局数据。函数组ALSMEX的LALSMEXTOP:
FUNCTION-POOL alsmex. "MESSAGE-ID .. TYPE-POOLS: ole2. * value of excel-cell TYPES: ty_d_itabvalue TYPE alsmex_tabline-value, * internal table containing the excel data ty_t_itab TYPE alsmex_tabline OCCURS 0, * line type of sender table BEGIN OF ty_s_senderline, line(4096) TYPE c, END OF ty_s_senderline, * sender table ty_t_sender TYPE ty_s_senderline OCCURS 0. * CONSTANTS: gc_esc VALUE '"'.
其中修改ty_d_itabvalue,ty_t_itab的TYPE对象alsmex_tabline改为自定义结构zalsmex_tabline。
FUNCTION-POOL alsmex. "MESSAGE-ID .. TYPE-POOLS: ole2. * value of excel-cell *----------------------↓修改部分↓------------------------------ TYPES: ty_d_itabvalue TYPE zalsmex_tabline-value, * internal table containing the excel data ty_t_itab TYPE zalsmex_tabline OCCURS 0, *----------------------↑修改部分↑---------------------------- * line type of sender table BEGIN OF ty_s_senderline, line(4096) TYPE c, END OF ty_s_senderline, * sender table ty_t_sender TYPE ty_s_senderline OCCURS 0. * CONSTANTS: gc_esc VALUE '"'.
- 复制 INCLUDE LALSMEXF01.
复制函数修改参数
- 修改函数表参数的结构-这样就可以自定义限制。这里定义的结构类型,在函数组TOP里面要进行对应的修改上一步有标注。
函数组激活
建议SE80->函数组->全部激活。
版权声明:
作者:FAN
链接:https://sapboy.com/index.php/2022/06/28/alsm_excel_to_internal_table%e4%bf%ae%e6%94%b9/
来源:SAPBoy
文章版权归作者所有,未经允许请勿转载。
THE END
0
ALSM_EXCEL_TO_INTERNAL_TABLE修改
使用限制
用系统自带的函数 ALSM_EXCEL_TO_INTERNAL_TABLE 有2个限制:
读取cell最多读取前50个字符(CHAR50)
如果超过9999行,行号会初始化为从零开始(INT……

文章目录
关闭
共有 0 条评论