前言:SAP支持的excel导出方式很多,其中用的比较多的就是OLE和DOI导出,优点是使用方便,可根据模板导出,缺点很明显:不兼容WEB端,对WEB端很不友好(导出的数据是空的),基于这个问题,个人感觉还是用SAP的标准导出功能,可以实现复杂度一般的excel导出,优点是兼容性强,毕竟是SAP的标准导出功能。实现方式如下:
FORM frm_download_data2.
DATA:gt_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.
"将要导出的内表放入lo_table中
GET REFERENCE OF gt_tree INTO lo_table.
"按照展示ALV字段一样设置字段信息
PERFORM build_fieldcatalog.
"获取cl_salv_ex_result_data_table类对象
lo_result_data_table = cl_salv_ex_util=>factory_result_data_table(
r_data = lo_table
t_fieldcatalog = gt_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.
CREATE OBJECT lo_bs_ex_office2007 EXPORTING r_result_data = lo_result_data_table.
lv_xstr = lo_bs_ex_office2007->transform( ).
lt_rawdata = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_xstr ).
"弹窗下载XML
PERFORM f_dialog_xml USING lv_xstr.
ENDFORM.
"弹窗下载xml
FORM f_dialog_xml
USING iv_xml TYPE xstring.
DATA:lv_extension TYPE string.
DATA:lv_directory TYPE string VALUE 'D:/'.
DATA:lv_filename TYPE string .
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.
代码也很简单,兼容性强。