Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet

作者:SAPTAB 约 7 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, Data Engineering, WM, 仓库管理, 开发, 数据工程
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图

原创 Tab Zhu [ SAP TAB ](javascript:void\(0\);)

**点击蓝字关注我们**

富强 民主 文明 和谐

自由 平等 公正 法制

爱国 敬业 诚信 友善

**不念过** **去**

**START**

**不畏将来**

****_Title -_ ** XLSX Workbench输出多个Sheet **

****一** 数据准备 **

今天说一下如何使用XLSX Workbench输出多个Sheet

我们根据上一篇文章所用得数据SFLIGHT(航班信息),我们再引入两张table(SCARR,SPFLI)作为Sheet2

Shee3得输出表,接着上一次的文章-> [ Excel高效输出工具-XLSX Workbench

](http://mp.weixin.qq.com/s?__biz=MzUxODI4MTQyMg==&mid=2247483931&idx=1&sn=ca208df11c014b8e5799b3dd17f25cad&chksm=f98a03bacefd8aac960bd8ea6c14263b600ac711a87ca5f8eeacbaae64dde4267e84a15824f2&scene=21#wechat_redirect)

首先我们在前面取数部分取出航线和航班计划数据

Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图

****二** Function ZXLWB_CALLFORM使用结构 **

1.在这一部分,我们先创建一个通用的附带header和item内容的结构 ** ZXWLB_S_COMMAN_HEADER **

PS :当然你也可以创建一个你需要的结构 ( 如 ZXWLB_S_001_HEADER) 来存放需要的数据

Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图

** 注意 ** :其中 ZWLWB_T_HEADER 和 ZXLWB_T_ITEM 必须定义为结构,不能使用预定于类型

Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图

ITEM_T 为双层的嵌套表

Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图

在 ZXLWB_S_ITEM_LINES 下面再嵌套一层表

Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图

2\. 我们仍使用上此使用的结构 ZXWLB_S_001_HEADER, 增加2个结构字段

将之前创建好的结构 ZXWLB_S_COMMAN_HEADER 放入结构,创建入下图,需要几个 Sheet

就可以放几个,当然你也可以再嵌套一层,做一个 sheet 的表类型嵌套

ZXWLB_T_COMMAN_HEADER(我们这里简化了,暂时不创建嵌套SHEET表)

Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图

**三** **事务码ZXLWB_WORKBENCH修改FORM**

1\. 在Form Structure中增加2个sheet页节点

Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图

创建 2 个 sheet

Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图

接着在右击 SHEET2_SCARR 创建 Loop

Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图

接着在Loop下一层级创建Pattern

Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图

在 excel 的区域新建一个如下的 sheet

Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图

将 SHEET2_SCARR 和 SHEET3_SPFLI 绑定到

Sheet2(这里说一下,Excel区域的Sheet2仅仅是一个模板,可以理解为形参,而绑定指的是SHEET2_SCARR和SHEET3_SPFLI参照Sheet2来输出)

Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图

双击 LOOP_SCARR_HEADER 绑定内表 ZXWLB_S_001_HEADER-SHEET02-HEADER_T

Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图

右击 PATTERN_SCARR_HEADER 创建子节点,双击 VALUE 后面的

Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图

按钮,从结构中选取

Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图

双击 context 后前面的状态变为

Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图

, 点击右下方的创建按钮

Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图

分配内容

Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图

由于 HEADER 是横向的排列的,所以需要修改方向箭头向右

Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图

点击下方

Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图

按钮即可切换方向

Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图

2.下面我们创建ITEM的循环结构和内容

我们首先创建了一个LOOP_SCARR_ITEM_LINES循环节点,绑定内容为ITEM_T的第一层table

Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图

因为 ITEM 下面有两层 table ,所以我们先再 LOOP_SCARR_ITEM_LINES 下面添加一个文件夹节点

-FOLDER_SCARR_ITEM ,输出方向为向下,这个节 点就是用来让数据向下输出

(你可以理解为换行,因为每输出完一行数据,是需要换行的暨向下输出数据)

Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图

然后再 FOLDER_SCARR_ITEM 下面添加 LOOP_SCARR_ITEM- 用来循环每一行行内的数据

Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图

然后再 LOOP_SCARR_ITEM 下面添加结构 PATTERN_SCARR_ITEM ,以及下一层的内容

CONTEXT_SCARR_ITEM, 绑定 Excel 中 ITEM1 位置,输出方向是向右

Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图

将 LOOP_SCARR_HEADER 和 LOOP_SCARR_ITEM 复制到 SHEET3_SPFLI 下面

Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图

将复制的节点直接拖拽到 SHEET3_SPFLI 下面,修改名称

Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图

最终节点结构如下图

Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图

( ** 注意: ** 如果你在制作模板的过程中修改了绑定结构,同时找不到新增的结构,则在 Form structure 中重新填如下 NAME

OF THE CONTEXT), 保存退出重新进入设计界面 )

Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图
Excel 高效输出工具 XLSXWorkbench 输出多个 Sheet - 封面图

****四** 使用FUN:ZXLWB_CALLFORM调用模板 **

这里直接给上程序,sheet2和sheet3的结构赋值设计非扁平结构的赋值,大家可以自行理解一下

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 .

DATA : lcl_tab TYPE REF TO cl_abap_tabledescr ,

lcl_tab_struc TYPE REF TO cl_abap_structdescr ,

lt_comps_tab TYPE abap_compdescr_tab .

DATA l_t_item TYPE zxlwb_t_item .

DATA l_s_item_lines TYPE zxlwb_s_item_lines .

_ "赋值 _

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 .

_ "sheet2 和 sheet3 _

_ * PERFORM frm_corresponding_sheet _

lcl_tab ?= cl_abap_tabledescr => describe_by_data ( scarr[] ). _

"根据内表获取表类型 _

lcl_tab_struc ?= lcl_tab -> get_table_line_type ( ). _ "获取结构类型 _

lt_comps_tab = lcl_tab_struc -> components . _ "获取字段组件属性 _ LOOP AT lt_comps_tab INTO DATA ( ls_comps_tab ). _ "根据字段组件内容

将抬头数据放在HEARER_T[]中 _

APPEND ls_comps_tab \- name TO ls_header \- sheet02 \- header_t[] . ENDLOOP .
LOOP AT scarr INTO DATA ( ls_scarr ). _ "将航班数据按照字段结构放到SHEET02-ITEM_T[]中

CLEAR l_t_item .

LOOP AT lt_comps_tab INTO ls_comps_tab .

ASSIGN COMPONENT ls_comps_tab \- name OF STRUCTURE ls_scarr TO FIELD \-

SYMBOL ( <fs_line_value> ).

IF sy \- subrc EQ 0 . APPEND <fs_line_value> TO l_t_item . ENDIF . ENDLOOP .

l_s_item_lines \- lines = l_t_item .

APPEND l_s_item_lines TO ls_header \- sheet02 \- item_t[] . ENDLOOP .

lcl_tab ?= cl_abap_tabledescr => describe_by_data ( spfli[] ). _

"根据内表获取表类型 _

lcl_tab_struc ?= lcl_tab -> get_table_line_type ( ). _ "获取结构类型 _

lt_comps_tab = lcl_tab_struc -> components . _ "获取字段组件属性 _
LOOP AT lt_comps_tab I

...

SAPTAB

关于作者:SAPTAB

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「Excel高效输出工具XLSXWorkbench输出多个Sheet.md」整理生成,仅用于内部技术分享与学习交流。