可以为.CSV使用CL_FDT_XL_SPREADSHEET类吗?

sr4lhrrt  于 2022-12-15  发布在  其他
关注(0)|答案(1)|浏览(219)

我有一个程序,通过将表导出到Excel电子表格来维护自定义Z表,它还可以刷新表并从Excel电子表格中更新。XSLX文件。
但是,我也希望该程序接受.CSV文件。
我使用CL_GUI_FRONTEND_SERVICES=>GUI_UPLOAD方法获取原始数据,但是当我尝试将原始数据转换为XSTRING时,抛出了一个错误
我的问题:CL_FDT_XL_SPREADSHEET类是适合.CSV文件数据还是只适合.XLSX文件?
从.XLSX上传到SAP是通过CL_GUI_FRONTEND_SERVICES=>GUI_UPLOAD方法获取原始数据完成的,然后转换为XSTRING并传递到CL_FDT_XL_SPREADSHEET类,然后调用IF_FDT_DOC_SPREADSHEET~GET_ITAB_FROM_WORKSHEET方法将该数据传递到一个变量,该变量用于另一个方法以上传到SAP。
代码:

METHOD import_excel_data.

    DATA: lt_xtab TYPE cpt_x255,
          lv_size TYPE i.

    IF i_filetype = abap_true. "******.XLSX UPLOAD*********
      cl_gui_frontend_services=>gui_upload( EXPORTING filename   = i_file
                                                      filetype   = 'BIN'
                                            IMPORTING filelength = lv_size
                                             CHANGING data_tab   = lt_xtab
                                             EXCEPTIONS
                                                      file_open_error = 1
                                                      file_read_error = 2
                                                      error_no_gui            = 3
                                                      not_supported_by_gui    = 4
                                                      OTHERS                  = 5 ).
      IF sy-subrc <> 0.
        RAISE EXCEPTION TYPE zcx_excel_exception EXPORTING i_message = |Invalid File { i_file }| ##no_text.
      ENDIF.
    ELSE."******.CSV UPLOAD*********

      cl_gui_frontend_services=>gui_upload( EXPORTING filename   = i_file
                                                      filetype   = 'ASC'
                                                      has_field_separator = abap_true
                                            IMPORTING filelength = lv_size
                                            CHANGING data_tab   = lt_xtab
                                            EXCEPTIONS
                                                    file_open_error = 1
                                                    file_read_error = 2
                                                    error_no_gui            = 3
                                                    not_supported_by_gui    = 4
                                                    OTHERS                  = 5 ).
      IF sy-subrc <> 0.
        RAISE EXCEPTION TYPE zcx_excel_exception EXPORTING i_message = |Invalid File { i_file }| ##no_text.
      ENDIF.

    ENDIF.

    cl_scp_change_db=>xtab_to_xstr( EXPORTING im_xtab    = lt_xtab
                                              im_size    = lv_size
                                    IMPORTING ex_xstring = DATA(lv_xstring) ).

    DATA(lo_excel) = NEW cl_fdt_xl_spreadsheet( document_name = i_file
                                                xdocument     = lv_xstring ).
    lo_excel->if_fdt_doc_spreadsheet~get_worksheet_names(
      IMPORTING worksheet_names = DATA(lt_worksheets) ).

    rt_table = lo_excel->if_fdt_doc_spreadsheet~get_itab_from_worksheet( lt_worksheets[ 1 ] ).

    IF rt_table IS INITIAL.
      RAISE EXCEPTION TYPE zcx_excel_exception EXPORTING i_message = 'No Data found in Excel File' ##no_text.
    ENDIF.
  ENDMETHOD.
chy5wohz

chy5wohz1#

CL_FDT_XL_SPREADSHEET类适用于.CSV文件数据还是只适用于.XLSX文件?
不可以。CL_FDT_XL_SPREADSHEET基于ABAP iXML framework,并且仅适用于符合OOXML specification的XML格式,XLSX也基于OOXML specification
CSV远没有达到这个先决条件,所以它不起作用。

相关问题