SAP ABAP 标准导出excel功能实现

前言: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.

代码也很简单,兼容性强。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值