我有一个程序,通过将表导出到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.
1条答案
按热度按时间chy5wohz1#
CL_FDT_XL_SPREADSHEET类适用于.CSV文件数据还是只适用于.XLSX文件?
不可以。CL_FDT_XL_SPREADSHEET基于ABAP iXML framework,并且仅适用于符合OOXML specification的XML格式,XLSX也基于OOXML specification。
CSV远没有达到这个先决条件,所以它不起作用。