SAP ABAP内表导出excel文件

SAP ABAP内表导出excel文件

需求描述:
内表导出excel文件,要求保留前导0,小数位等格式。
尝试用过GUI_DOWNLOAD导出文件,但无法同时解决这两个问题。①正常导出,前导0等格式被消除②保留前导0等格式,但下划线特殊字符存在时文件格式破坏无法打开且抬头描述字段超过10位会被自动截断。
所以尝试着用alv标准导出方式解决。
详细示例代码如下:

*&---------------------------------------------------------------------*
*& Report ZMM_RPT_538_WU0
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zmm_rpt_538_wu0.
TYPES:BEGIN OF ty_download,
        uuid  TYPE uuid,
        werks TYPE werks_d,
        matnr TYPE matnr,
        menge TYPE menge_d,
      END OF ty_download.
DATA: lt_download TYPE STANDARD TABLE OF ty_download.

START-OF-SELECTION.
  APPEND INITIAL LINE TO lt_download ASSIGNING FIELD-SYMBOL(<lfs_download>).
  <lfs_download>-uuid = '00001233'.
  <lfs_download>-werks = '3121'.
  <lfs_download>-matnr = '_-35℃工作液-Ⅰ型Q/ZZ 21007_1000KG/桶' .
  <lfs_download>-menge = '9.120'.
  APPEND INITIAL LINE TO lt_download ASSIGNING <lfs_download>.
  <lfs_download>-uuid = '00001233'.
  <lfs_download>-werks = '3121'.
  <lfs_download>-matnr = '_-35℃工作液-Ⅰ型Q/ZZ 21007_1000KG/桶' .
  <lfs_download>-menge = '9.123'.

  PERFORM frm_down_excel.

FORM frm_down_excel.
  DATA:lt_fieldcat TYPE lvc_t_fcat.
  DATA:lo_table TYPE REF TO data.
  DATA:lv_xstr TYPE xstring.
  DATA:lt_rawdata TYPE solix_tab.
  DATA:lo_result_data_table TYPE REF TO cl_salv_ex_result_data_table.
  DATA:lo_bs_ex_office2007 TYPE REF TO cl_salv_bs_ex_office2007.
  DATA:lv_version TYPE string.
  DATA:lv_flavour TYPE string.

*获取数据
  GET REFERENCE OF lt_download INTO lo_table.
*构造列字段
  PERFORM frm_create_fieldcat CHANGING lt_fieldcat.
*获取cl_salv_ex_result_data_table类对象
  lo_result_data_table = cl_salv_ex_util=>factory_result_data_table(
    r_data = lo_table
    t_fieldcatalog =  lt_fieldcat ).
*获取xml版本信息
  lv_version = cl_salv_bs_a_xml_base=>get_version( ).
  IF lv_version = if_salv_bs_xml=>version_25.
    lv_version = if_salv_bs_xml=>version_25.
  ELSEIF lv_version = if_salv_bs_xml=>version_26.
    lv_version = if_salv_bs_xml=>version_26.
  ENDIF.
  lv_flavour = if_salv_bs_c_tt=>c_tt_xml_flavour_export.
*转换xstring
  cl_salv_bs_tt_util=>if_salv_bs_tt_util~transform(
    EXPORTING
      xml_version   = lv_version
      r_result_data = lo_result_data_table
      xml_type      = if_salv_bs_xml=>c_type_xlsx  " XML Type as SALV Constant
      xml_flavour   = lv_flavour
      gui_type      = if_salv_bs_xml=>c_gui_type_gui " Constant
    IMPORTING
      xml           = lv_xstr
   ).

  PERFORM f_dialog_xml USING lv_xstr.
ENDFORM.

FORM frm_create_fieldcat
  CHANGING it_fieldcat TYPE lvc_t_fcat.
  DATA:ls_fieldcat TYPE lvc_s_fcat.
  CLEAR ls_fieldcat.
  ls_fieldcat-col_pos = 1.        "column position
  ls_fieldcat-fieldname = 'UUID'.
  ls_fieldcat-reptext = 'UUID'.
  APPEND ls_fieldcat TO it_fieldcat.
  CLEAR ls_fieldcat.
  ls_fieldcat-col_pos = 2.        "column position
  ls_fieldcat-fieldname = 'WERKS'.
  ls_fieldcat-reptext = '工厂'.
  APPEND ls_fieldcat TO it_fieldcat.
  CLEAR ls_fieldcat.
  ls_fieldcat-col_pos = 3.        "column position
  ls_fieldcat-fieldname = 'MATNR'.
  ls_fieldcat-reptext = '物料'.
  APPEND ls_fieldcat TO it_fieldcat.
  CLEAR ls_fieldcat.
  ls_fieldcat-col_pos = 4.        "column position
  ls_fieldcat-fieldname = 'MENGE'.
  ls_fieldcat-reptext = '数量'.
  APPEND ls_fieldcat TO it_fieldcat.
ENDFORM.

*下载弹窗
FORM f_dialog_xml
  USING iv_xml TYPE xstring.
  DATA:lv_extension TYPE string VALUE 'XLSX'.
  DATA:lv_directory TYPE string VALUE 'D:/'.
  DATA:lv_filename TYPE string VALUE 'test'.
  DATA:lv_mask TYPE string VALUE 'Excel (*.XLSX)|*.XLSX'.
  CALL FUNCTION 'XML_EXPORT_DIALOG'
    EXPORTING
      i_xml               = iv_xml
      i_default_extension = lv_extension
      i_initial_directory = lv_directory
      i_default_file_name = lv_filename
      i_mask              = lv_mask
*     I_APPLICATION       =
   EXCEPTIONS
     APPLICATION_NOT_EXECUTABLE       = 1
     OTHERS              = 2
    .
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.
ENDFORM.

最后看一下最后导出文件。前导0和小数位格式保留。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值