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.