ALSM_EXCEL_TO_INTERNAL_TABLE修改

使用限制

用系统自带的函数 ALSM_EXCEL_TO_INTERNAL_TABLE 有2个限制:

  1. 读取cell最多读取前50个字符(CHAR50)
  2. 如果超过9999行,行号会初始化为从零开始(INT4) 

    ALSM_EXCEL_TO_INTERNAL_TABLE修改插图

    通过代码展示一下。

    D:/sapboy.xlsx文件内容: 第1列第6行的数据已经超过了50字符。

    ALSM_EXCEL_TO_INTERNAL_TABLE修改插图1

    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:

    ALSM_EXCEL_TO_INTERNAL_TABLE修改插图2

    函数参数 i_begin_row 从第二行开始读取,所以这里itab内表第一行的值是"第2行第1列"。

    原本应该是56字符的被截取成50字符了。

修改限制

创建函数组

  1. 创建函数组 ZFG02 .ALSM_EXCEL_TO_INTERNAL_TABLE修改插图3
  2. 修改 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 '"'.
    
  3. 复制 INCLUDE LALSMEXF01.

    复制函数修改参数

  1. 修改函数表参数的结构-这样就可以自定义限制。这里定义的结构类型,在函数组TOP里面要进行对应的修改上一步有标注。

    ALSM_EXCEL_TO_INTERNAL_TABLE修改插图4

    ALSM_EXCEL_TO_INTERNAL_TABLE修改插图5

函数组激活

建议SE80->函数组->全部激活。

版权声明:
作者:FAN
链接:https://sapboy.com/index.php/2022/06/28/alsm_excel_to_internal_table%e4%bf%ae%e6%94%b9/
来源:SAPBoy
文章版权归作者所有,未经允许请勿转载。

THE END
分享
ALSM_EXCEL_TO_INTERNAL_TABLE修改
使用限制 用系统自带的函数 ALSM_EXCEL_TO_INTERNAL_TABLE 有2个限制: 读取cell最多读取前50个字符(CHAR50) 如果超过9999行,行号会初始化为从零开始(INT……
<<上一篇
下一篇>>
文章目录
关闭
目 录