2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

一 介绍说明

        前段时间做财务报表项目,由于用户集团下面公司众多,每个月看财务管控的报表需要看几十张客制化的报表,而且是在一个excel文件中,相当于一个公司一个sheet页,而且excel的样式需要根据客户的需求进行不同的定制。之前用户在一家公司下使用excel导出是采用SMW0模板+OLE输出到excel单元格的方式,下载一张财务报表需要几分钟,现在需要扩展到全集团,下载几十家公司的财务报表速度就及其的慢了,所以看到网上有XLSX Workbench开源项目,所以就自己研究了一下安利给了客户,结果就是导出几十家公司的客制报表数据仅需要十几秒

 

XLSX Workbench是一种高效Excel输出的工具,用于在SAP环境中设计基于Excel的表单。由于采用了完全可视化的形式来开发表格(像SMARTFORMS进行开发),因此它非常易于学习和使用。XLSX Workbench的可视化方法使您即使没有ABAP技能也可以开发打印表格。
XLSX Workbench是功能强大且非常灵活的工具,适用于具有图片,图表,层次结构和其他格式设置功能的简单表单和复杂动态表单的开发。而且XLSX Workbench提供了高性能的生成打印表格结果文件的功能。

二 XLSX Workbench 安装

安装方式有2种,一种是通过SAPLink安装,另一种就是自己手动去创建,个人还是推荐使用SAPLink去安装的,这样避免一些不必要的错误的产生。

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

如果通过人工手工创建程序则需要:

(1)通过se38创建程序:ZXLWB

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

(2)创建事务代码:ZXLWB_WORKBENCH

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

(3)创建包含程序:ZXLWB_INCLUDE

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

(4)创建函数组:ZXLWB

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

同时创建

Function:ZXLWB_CALLFORM 和 ZXLWB_WORKBENCH

LZXLWBF01 LZXLWBTOP ZXLWB_INCLUDE

代码详情 请自行下载文件(下载链接关注文章末尾)

(5)GUI状态为如下图:其他地方为空白

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

(6)GUI 标题

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

(7)屏幕0100

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

(8)Function ZXLWB_CALLFORM参数:

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

(9)Function ZXLWB_WORKBENCH参数:

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

(10)安装时可能会出现的问题

10.1 如果CL_HRPAYNA_GUI_ALV_TREE 这个类不在你的系统中,请自行创建一个类来代替SE24创建自定义类

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

继承超类CL_GUI_ALV_TREE

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

创建一个Method :GET_OUTTAB

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

参数如下:

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

 

10.2 如果系统中不存在CKF_FIELD_VALUE_TABLE 结构,请自行创建结构代替

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

三 Demo客制化模板制作

3.1 我们使用系统自带的SFLIGHT表来构建下航班信息输出报表

首先我们创建需要用到的内表结构

表头数据

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

内表数据

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

3.2 使用事务码ZXLWB_WORKBENCH来创建输出模板

(1)输入名称并点击create

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

如下图,你可以看到编辑excel模板的界面,操作方发类似于smartforms的操作

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench双击模板名称,在Name of context 栏位点击2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench,将创建好的结构分配给模板

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

如果需要自动根据结构创建模板结构,可以点击Auto

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

如下图自动创建了form的结构,status 为红色的表示仍需要操作

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

如下可以设置当前绑定的是excel界面中的哪个sheet

在sheet name at runtime 中可以设置输出sheet页名称为自动的sheet1,sheet2...

也可以点击

如下可以设置当前绑定的是excel界面中的哪个sheet

在sheet name at runtime 中可以设置输出sheet页名称为自动的sheet1,sheet2...

也可以点击2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench设置sheet name 关联ZXWLB_S_001_HEADER中的字段来赋值字段

设置sheet name 关联ZXWLB_S_001_HEADER中的字段来赋值字段

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

(2)在EXCEL的区域设置好Excel模板,如下图,模板上Excel单元格格式和输出时Excel保持一致

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

(3)将FORM Structure 和 Excel模板区块对应绑定上:

选中如下图1中的excel区域,双击ZXWLB_S_001_HEADER, 然后点击2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench绑定excel区域和ZXWLB_S_001_HEADER

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

绑定之后,ZXWLB_S_001_HEADER 的Status变成绿色,下方显示绑定区域位置

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

对于ZXWLB_S_001_HEADER下层字段绑定只能在ZXWLB_S_001_HEADER与Excel模板绑定的区域中进行绑定字段

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

Convert value to ext.format 打勾相当于 = ALPHA

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

其他2个抬头字段如上操作

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

下图为绑定了内表-ITEM,该2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench标识表示每一次循环完毕之后向下增加条目

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

绑定关系如下图:

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

同时删除不需要的字段

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

保存和激活设计的模板

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

四 调用设计好的模板

部分调用代码如下:

FORM frm_down_excel USING uv_filename TYPE string .
  DATA ls_header TYPE zxwlb_s_001_header.
  DATA ls_item TYPE zxwlb_s_001_item.
  DATA lt_item TYPE zxwlb_t_001_item.
  "赋值
  ls_header-flight_info = 'Tab Flight'.
  ls_header-currency = 'CNY'.
  LOOP AT sflight INTO DATA(ls_sflight).
    MOVE-CORRESPONDING ls_sflight TO ls_item.
    ls_header-total_price = ls_header-total_price + ls_item-price.
    APPEND ls_item TO lt_item.
    CLEAR ls_item.
  ENDLOOP.
  APPEND LINES OF lt_item TO ls_header-item.
  "调用function
  CALL FUNCTION 'ZXLWB_CALLFORM'
    EXPORTING
      iv_formname        = 'ZXLSX_WORKBENCH_001'" xlsx workbench form 模板名称
      iv_context_ref     = ls_header "数据
*     IV_VIEWER_TITLE    = SY-TITLE
*     IV_VIEWER_INPLACE  = 'X'
*     IV_VIEWER_CALLBACK_PROG       = SY-CPROG
*     IV_VIEWER_CALLBACK_FORM       =
      iv_viewer_suppress = 'X' " 为空的,则调用内嵌EXCEL 显示数据
*     IV_PROTECT         =
      iv_save_as         = uv_filename  "C:\Users\*****\Desktop\EXPORT.xlsx  保存在PC目录
*     IV_SAVE_AS_APPSERVER          =
*     IV_STARTUP_MACRO   =
*     IT_DOCPROPERTIES   =
* IMPORTING
*     EV_DOCUMENT_RAWDATA           =
*     EV_DOCUMENT_EXTENSION         =
    EXCEPTIONS
      process_terminated = 1
      OTHERS             = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1
    sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.

当我们运行程序后,点击Down Excel可以直接下载Excel

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

下载出来的excel如下图所示

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

这样一个简单的demo就制作完毕,总体来说下载速度是杠杠的,然后代码仅仅写了调用和赋值两块内容,Excel中的格式可以按照需求修改+绑定数据结构,就可以实现客户化的excel输出了。

 最后附上saplink nugg文档和XLSX Workbench链接

链接:https://pan.baidu.com/s/1GZaEv8c2BjtWNHBb_ymGBQ 

提取码:whgk 

2021.02.07 【ABAP随笔】-Excel高效输出工具-xlsx workbench

 

上一篇:C-001


下一篇:Window.open()打开新窗口只打开一次,可以被其他网页取代