Data Export->EXCLE

1.FM 'SAP_CONVERT_TO_XLS_FORMAT'

  可直接导出'XLSX'类型EXCEL.

CALL FUNCTION 'SAP_CONVERT_TO_XLS_FORMAT'
  EXPORTING
    i_filename        = 'C:\temp\1.xlsx'    "路径名
  TABLES
    i_tab_sap_data    = gt_alv    "导出内表
  EXCEPTIONS
    conversion_failed = 1
    OTHERS            = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

2.Class

  可根据ALV格式导出EXCEL,将需要下载的内表先转换成XML stream,然后再通过gui_download的BIN模式将xml stream下载成.xlsx文件。

DATA: l_defaultname TYPE string,
        l_filename    TYPE string,
        l_path        TYPE string,
        l_fullpath    TYPE string,
        l_result      TYPE i.

  DATA: l_length     TYPE i,
        l_xml_stream TYPE xml_rawdata,
        l_flavour    TYPE string,
        l_version    TYPE string.

  DATA: lr_alv_new_data TYPE REF TO data,
        lr_result_data  TYPE REF TO cl_salv_ex_result_data_table.

  DATA: ls_xml_choice TYPE if_salv_bs_xml=>s_type_xml_choice,
        xml           TYPE xstring.

  GET REFERENCE OF gt_itab INTO lr_alv_new_data.
 "自定义保存路径
  CONCATENATE 'Filename'  INTO l_defaultname.
  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      window_title         = 'Save as...'
      default_file_name    = l_defaultname
      default_extension    = 'XLSX'
      file_filter          = '.XLSX'
    CHANGING
      filename             = l_filename
      path                 = l_path
      fullpath             = l_fullpath
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.

  IF sy-subrc <> 0.
*    MESSAGE
  ELSE.
    IF l_fullpath IS NOT INITIAL.
    "根据fieldcat生成内表
      lr_result_data = cl_salv_ex_util=>factory_result_data_table(
        r_data                      = lr_alv_new_data
        t_fieldcatalog              = gt_fieldcat_sla
         ).
      CASE cl_salv_bs_a_xml_base=>get_version( ).
        WHEN if_salv_bs_xml=>version_25.
          l_version = if_salv_bs_xml=>version_25.
        WHEN if_salv_bs_xml=>version_26.
          l_version = if_salv_bs_xml=>version_26. " = 2.6
      ENDCASE.

      l_flavour = if_salv_bs_c_tt=>c_tt_xml_flavour_export. "Flavor for Complete ALV XML

      CALL METHOD cl_salv_bs_tt_util=>if_salv_bs_tt_util~transform
        EXPORTING
          xml_type      = if_salv_bs_xml=>c_type_xlsx  "XLSX
          xml_version   = l_version
          r_result_data = lr_result_data
          xml_flavour   = l_flavour
          gui_type      = if_salv_bs_xml=>c_gui_type_gui  "Y6DK066330
        IMPORTING
          xml           = xml.

      IF NOT l_filename IS INITIAL.
        CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
          EXPORTING
            buffer        = xml
          IMPORTING
            output_length = l_length
          TABLES
            binary_tab    = l_xml_stream.

        CALL METHOD cl_gui_frontend_services=>gui_download
          EXPORTING
            bin_filesize = l_length
            filetype     = 'BIN'
            filename     = l_filename
          CHANGING
            data_tab     = l_xml_stream
          EXCEPTIONS
            OTHERS       = 1.
        IF sy-subrc <> 0.
          MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                     WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
        ENDIF.
      ENDIF.
    ENDIF.
  ENDIF.

 

posted on 2022-03-04 15:05  Π几  阅读(60)  评论(0)    收藏  举报