OLE EXCEL分批次上载和下载简单介绍
函数ALSM_EXCEL_TO_INTERNAL_TABLE来读取EXCEL采用OLE的技术,读取的数据速度比较快,其原理就是采用SELECT+COPY的把数据写入剪贴板中,然后调用cl_gui_frontend_services=>clipboard_import的方式把剪贴板数据写入内表。
但是ALSM_EXCEL_TO_INTERNAL_TABLE有其限制,那就是取决于ALSMEX_TABLINE类型
这个类型决定了其上传行数和列数和单元格的长度
和
而这个类型决定了一行的长度,一般我这边都会改写这两个类型,比如
TYPES:BEGIN OF ty_alsmex_tabline,
row(8) TYPE n,
col(8) TYPE n,
value(4096) TYPE c,
END OF ty_alsmex_tabline.
回到如何分批上载OLE EXECL的简单介绍,如果EXECL表比较的话,那么可以尝试分批次写法,以下代码只是简单介绍,如果真实的要处理,需要把下面的代码在ALSM_EXCEL_TO_INTERNAL_TABLE中进行改写(可参考分批上载的模式).(这边的介绍的方法上载的数量是在SAP 内存限制的范围内).
REPORT demo.
DO.
PERFORM get_range USING sy-index "当前次数
5000 "倍数
CHANGING begin_row "开始行
end_row. "结束行
IF end_row > 500000."结束信息
end_row = 500000.
ENDIF.
excel_begin_row = begin_row + hline."hline 代表表头行数
excel_end_row = end_row + hline.
CLEAR lt_intern.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = ''
i_begin_col = 1
i_begin_row = excel_begin_row
i_end_col = 20
i_end_row = excel_end_row
TABLES
intern = lt_intern
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*经过处理把 lt_intern 转换为SAP 的内表 比如lt_out1
APPEND LINES OF lt_out1 TO lt_out.
CLEAR lt_out1.
IF end_row >= 500000.
EXIT.
ENDIF.
ENDDO.
*
FORM get_range USING index
multiple
CHANGING low
high.
high = index * multiple.
low = 1 + ( index - 1 ) * multiple.
ENDFORM. " GET_RANGE
同样分批次主要的主要
DO.
CALL METHOD get_range "与上边的Form 出来类似
EXPORTING
index = sy-index
multiple = lines "倍数
IMPORTING
low = begin_row
high = end_row.
IF end_row > lines_row. "这是内表的行数
end_row = lines_row.
ENDIF.
CLEAR .
APPEND LINES OF FROM begin_row TO end_row TO .
CALL METHOD clipboard_export "写入剪贴板
EXPORTING
lt_data = .
excel_begin_row = begin_row + hline.
excel_end_row = end_row + hline.
CALL METHOD paste "黏贴
EXPORTING
col1 = 1
line1 = excel_begin_row
col2 = col2
line2 = excel_end_row.
IF end_row >= lines_row.
EXIT.
ENDIF.
ENDDO.
具体的注意点可以参考我之前介绍说明接口函数动态下载数据,并实现大数据下载
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/203545/viewspace-1450879/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/203545/viewspace-1450879/