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前端上传文件的数据读取。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值