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去安装的,这样避免一些不必要的错误的产生。

image.png

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

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

image.png

(2)创建事务代码:ZXLWB_WORKBENCH

image.png

(3)创建包含程序:ZXLWB_INCLUDE

image.png

(4)创建函数组:ZXLWB

image.png

同时创建

Function:ZXLWB_CALLFORM 和 ZXLWB_WORKBENCH

LZXLWBF01 LZXLWBTOP ZXLWB_INCLUDE

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

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

image.png

(6)GUI 标题

image.png

(7)屏幕0100

image.png

image.png

(8)Function ZXLWB_CALLFORM参数:

image.png

image.png

image.png

(9)Function ZXLWB_WORKBENCH参数:

image.pngimage.png

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

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

image.png

image.png

继承超类CL_GUI_ALV_TREE

image.png

创建一个Method :GET_OUTTAB

image.png

参数如下:

image.png

image.png

 

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

image.png

image.png

image.png

三 Demo客制化模板制作

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

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

表头数据

image.png

内表数据

image.png

image.png

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

(1)输入名称并点击create

image.png

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

image.png双击模板名称,在Name of context 栏位点击image.png,将创建好的结构分配给模板

image.png

image.png

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

image.png

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

image.png

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

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

也可以点击

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

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

也可以点击image.png设置sheet name 关联ZXWLB_S_001_HEADER中的字段来赋值字段

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

image.png

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

image.png

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

选中如下图1中的excel区域,双击ZXWLB_S_001_HEADER, 然后点击image.png绑定excel区域和ZXWLB_S_001_HEADER

image.png

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

image.png

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

image.png

image.png

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

image.png

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

image.png

下图为绑定了内表-ITEM,该image.png标识表示每一次循环完毕之后向下增加条目

image.png

绑定关系如下图:

image.png

同时删除不需要的字段

image.png

保存和激活设计的模板

image.png

四 调用设计好的模板

部分调用代码如下:

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

image.png

下载出来的excel如下图所示

image.png

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

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

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

提取码:whgk 

 

posted @ 2021-02-07 19:57  TAB_Zhu  阅读(3466)  评论(3编辑  收藏  举报