SAP UI类标准导出XML格式Excel


  DATA:
    gt_fieldcatalog TYPE lvc_t_fcat,
    gs_fieldcatalog TYPE lvc_s_fcat,
    lr_data         TYPE REF TO data,
    r_result_data   TYPE REF TO cl_salv_ex_result_data_table,
    lv_file_name    TYPE string,
    l_version       TYPE string,
    l_mimetype      TYPE char128,
    l_mimet         TYPE string,
    ev_excel        TYPE xstring.
  FIELD-SYMBOLS:
       TYPE any .

* *??字段信息
  DEFINE add_cata.
    GS_FIELDCATALOG-FIELDNAME = &1.
    GS_FIELDCATALOG-SELTEXT   = &2.
    APPEND GS_FIELDCATALOG TO GT_FIELDCATALOG.
  END-OF-DEFINITION.

  add_cata 'SALES_ORG'    'Sales Org. ID'.
  add_cata 'ZZCATEGORY'   'Category'.
  add_cata 'ZZCON_TYPE'   'Consulting Type'.
  add_cata 'ZZCON_TYPET'  'Consulting Type Description'.
  add_cata 'QTY_PHONE'    'Qty By Phone'.
  add_cata 'QTY_MAIL'     'Qty By Email'.
  add_cata 'QTY_OFFSITE'  'Qty By Official Site'.
  add_cata 'QTY_MEDIA'    'Qty By Social Media'.
  add_cata 'QTY_OTHER'    'Qty By Other'.
  add_cata 'QTY_TOTAL'    'Total'.
  add_cata 'QTY_ZSV1'     'HSI Standard SRO'.
  add_cata 'RAT'          'Technical resolution rate'.

  DATA lo_nd_total TYPE REF TO if_wd_context_node.
  DATA lt_total TYPE wd_this->elements_total.
*   navigate from  to  via lead selection
  lo_nd_total = wd_context->get_child_node( name = wd_this->wdctx_total ).
*   @TODO handle non existant child
*   IF lo_nd_total IS INITIAL.
*   ENDIF.
  lo_nd_total->get_static_attributes_table( IMPORTING table = lt_total ).


  GET REFERENCE OF lt_total INTO lr_data.

  lv_file_name = 'export.xls'.


*//导出excel
  r_result_data = cl_salv_ex_util=>factory_result_data_table(
                    r_data          = lr_data
                    t_fieldcatalog  = gt_fieldcatalog ).

  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.
  ENDCASE.

  DATA: gs_choice TYPE if_salv_bs_xml=>s_type_xml_choice.

  gs_choice-version  = if_salv_bs_xml=>version_25.
  gs_choice-xml_type = if_salv_bs_xml=>c_type_excel_xml.

  CALL METHOD cl_salv_bs_tt_util=>if_salv_bs_tt_util~transform
    EXPORTING
      xml_type      = gs_choice-xml_type
      xml_version   = l_version
      r_result_data = r_result_data
      xml_flavour   = if_salv_bs_c_tt=>c_tt_xml_flavour_export
    IMPORTING
      xml           = ev_excel.

  CALL FUNCTION 'SDOK_MIMETYPE_GET'
    EXPORTING
      extension = 'xls'
    IMPORTING
      mimetype  = l_mimetype.

  IF ev_excel IS NOT INITIAL."下载excel
    l_mimet = l_mimetype.

    CALL METHOD cl_wd_runtime_services=>attach_file_to_response
      EXPORTING
        i_filename      = lv_file_name
        i_content       = ev_excel
        i_in_new_window = abap_false
        i_mime_type     = l_mimet.
  ENDIF.