适用函数ALSM_EXCEL_TO_INTERNAL_TABLE把excel文件传输到内表中
相关文章:http://www.cnblogs.com/caizjian/archive/2013/04/12/3016284.html
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.