ABAP Excel文件数据读取(xstring文件流)
方式一:
使用标准类 CL_FDT_XL_SPREADSHEET,读取xlsx格式文件流数据,该类在note
2468709 – 标准类 CL_FDT_XL_SPREADSHEET 的使用 中说明不支持在BRFplus工作台之外的场景使用,但是实际使用中出问题的情况很少,属于方便,可用,但是不保证没问题的方式。
示例如下
DATA: document_name TYPE string,
xdocument TYPE xstring.
DATA lo_excel TYPE REF TO cl_fdt_xl_spreadsheet.
DATA:lt_worksheets TYPE STANDARD TABLE OF string,
ls_worksheets TYPE string.
DATA: lo_data TYPE REF TO data,
lo_table TYPE REF TO data,
lo_line TYPE REF TO data.
FIELD-SYMBOLS: <fs_table> TYPE table,
<fs_line> TYPE any,
<fs_field> TYPE any,
<fs_value> TYPE any.
CREATE OBJECT lo_excel
EXPORTING
document_name = document_name
xdocument = xdocument.
"获取Excel sheet页
lo_excel->if_fdt_doc_spreadsheet~get_worksheet_names(
IMPORTING
worksheet_names = lt_worksheets ).
READ TABLE lt_worksheets INTO ls_worksheets INDEX 1.
IF sy-subrc = 0.
CLEAR: lo_data.
"读取sheet页数据
lo_data = lo_excel->if_fdt_doc_spreadsheet~get_itab_from_worksheet( ls_worksheets ).
ASSIGN lo_data->* TO <fs_table>.
" 行数据
CREATE DATA lo_line LIKE LINE OF <fs_table>.
ASSIGN lo_line->* TO <fs_line>.
LOOP AT <fs_table> INTO <fs_line> FROM 2." 数据带标题
" 逐个字段对应数据
DO 8 TIMES.
ASSIGN COMPONENT sy-index OF STRUCTURE <fs_line> TO <fs_field>.
IF sy-subrc = 0.
" 对应的数据内表 映射值
ELSE.
CONTINUE.
ENDIF.
ENDDO.
ENDLOOP.
ENDIF.
方式二:
使用ABAP2XLSX中的类zcl_excel_reader_2007读取数据,相对更可靠一些,只是需要在系统中安装ABAP2XLSX
示例如下
" 字段列数需要定义足够
TYPES: BEGIN OF lty_excel_s,
dummy TYPE dummy.
TYPES: END OF lty_excel_s.
DATA lt_tab TYPE TABLE OF lty_excel_s.
DATA: lv_filename TYPE string,
lt_file TYPE solix_tab,
lv_file_stream TYPE xstring.
DATA: lo_excel TYPE REF TO zcl_excel,
lo_reader TYPE REF TO zif_excel_reader,
lo_worksheet TYPE REF TO zcl_excel_worksheet,
lo_salv TYPE REF TO cl_salv_table.
CREATE OBJECT lo_reader TYPE zcl_excel_reader_2007.
lo_excel = lo_reader->load( lv_file_stream ).
lo_worksheet = lo_excel->get_worksheet_by_index( iv_index = 1 ).
lo_worksheet->get_table( IMPORTING et_table = lt_tab ).
以上两种方式适用于通过接口传输的XLSX格式的Excel文件中数据读取,比如Fiori前端上传文件的数据读取。
post SAP-Garson
原文链接:https://blog.csdn.net/xiefireworks/article/details/126981195文章来自于网络,如果侵犯了您的权益,请联系站长删除!