zoukankan      html  css  js  c++  java
  • 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*****DesktopEXPORT.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 

  • 相关阅读:
    前端性能优化总结
    Vue style 深度作用选择器 >>> 与 /deep/(sass/less)
    NPM依赖包版本号~和^的区别及最佳实践
    umi部分使用总结
    FIS 插件机制
    从0到1发布一个npm包
    页面性能监控之performance
    1和new Number(1)有什么区别
    实现一个hoverDelay延迟hover
    触发浏览器回流的属性方法一览表
  • 原文地址:https://www.cnblogs.com/jxzhu/p/14386480.html
Copyright © 2011-2022 走看看