适用函数ALSM_EXCEL_TO_INTERNAL_TABLE把excel文件传输到内表中

时间:2023-03-08 17:30:01
适用函数ALSM_EXCEL_TO_INTERNAL_TABLE把excel文件传输到内表中

FM:ALSM_EXCEL_TO_INTERNAL_TABLE 是上载Excel文件的一个函数,但是这个函数有两个限制。

一是每个CELL只能导入前50个字符,二是如果超过9999行,行号会初始化为从零开始

其实解决起来很简单,只要改一下结构 ALSMEX_TABLINE 的字段就行了,然后COPY ALSM_EXCEL_TO_INTERNAL_TABLE 为 ZALSM_EXCEL_TO_INTERNAL_TABLE ,并做少许改动即可。

另外,如果要上载有打开密码保护的Excel,只要修改一下OLE的 OPEN 语句即可。

以及导入指定的Sheet等。。

这个函数的接受内表是ALSMEX_TABLINE类型的内表,只有行和列还有值这三个字段的内表。要是把excel的值传到这个内表中后还需要我们循环处理到想要的内表中。

示例展示:

DATA:lt_excel TYPE TABLE OF ALSMEX_TABLINE.
DATA ls_excel LIKE LINE OF lt_excel.
FIELD-SYMBOLS:<fs>.
CONSTANTS: gc_begin_row TYPE i VALUE 1,
"Beginning row of excel file
           gc_begin_col TYPE i VALUE 1,
           "Beginning column of excel file
           gc_end_row   TYPE i VALUE 999,
           "Ending row of excel file
           gc_end_col   TYPE i VALUE 999.
           "Ending column of excel file
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
  EXPORTING
    filename                      = p_file
    i_begin_col                   = gc_begin_row
    i_begin_row                   = gc_begin_col
    i_end_col                     = gc_end_row
    i_end_row                     = gc_end_col
  TABLES
    intern                        = lt_excel
* EXCEPTIONS
*   INCONSISTENT_PARAMETERS       = 1
*   UPLOAD_OLE                    = 2
*   OTHERS                        = 3
          .
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
LOOP AT lt_excel INTO ls_excel.
  IF  ls_excel-col = 1.
            CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'         "物料代码加前导0 。
          EXPORTING
            input        = ls_excel-value
          IMPORTING
            output       = ls_excel-value
          EXCEPTIONS
            length_error = 1
            OTHERS       = 2.
  ENDIF.

ASSIGN COMPONENT ls_excel-col OF STRUCTURE gs_tab to <fs>.   把工作区gs_tab中的字段赋给字段符号,而工作区gs_tab中的字段取决于内表中的列ls_excel-col
  CONDENSE ls_excel-value.                  " 去掉空格
  <fs> = ls_excel-value.
  at end of row.                                    "如果是最后一行就把工作区gs_tab存到内表gt_tab中
        "gs_tab-row = ls_excel-row.
        APPEND gs_tab TO gt_tab.
        CLEAR: gs_tab.

ENDAT.

ENDLOOP.