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和小数位格式保留。