ABAPEXCEL 打印封装

作者:ABAP三叔 约 4 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, Data Engineering, WM, 仓库管理, 开发, 数据工程
ABAPEXCEL 打印封装 - 封面图
ABAPEXCEL 打印封装 - 封面图

前言

在ABAP中通用的打印方式为Smartform或者Adobeform,这种打印对样式的调整比较麻烦,使用EXCEL作为模板来打印的话就可以比较方便的设置打印样式。

本文将介绍我基于ABAP2XLSX第三方工具包封装的快速打印方法,数据定义完后,一句代码即可, 类似这样

*

zcl_common=>print_excel( iv_w3objid = 'ZDEMO_PRINT_EXCEL' it_data = VALUE #( ( sheet = 'Sheet1' data = REF #( gs_print_sheet ) ) ) iv_xlsm = abap_true ).

方法介绍

方法定义如下图

ABAPEXCEL 打印封装 - 封面图
ABAPEXCEL 打印封装 - 封面图

参数介绍

**参数名称** | **参数描述

** | **可选

** | **备注

**

---|---|---|---

IV_W3OBJID | 模板名称 | 必输 | SMW0维护的EXCEL模板名称 ‍

IT_DATA | 打印数据 | 必输 | 每个sheet页的填充数据

IV_XLSM | 启用宏 | 可选 | 如果EXCEL模板中有宏,需传入'X'

IV_AUTOPRINT | 自动打印 | 可选 | 传'X'时跳过EXCEL预览,弹出打印界面

IV_FILENAME | 文件名

| 可选

| EXCEL另存时的文件名称

使用示例

1. 准备EXCEL模板,上传到SMW0

ABAPEXCEL 打印封装 - 封面图
ABAPEXCEL 打印封装 - 封面图

如模板所示,第3行和第6行定义了两个名称ITEM和ITEM1,对应着ABAP中的内表名,用中括号[]包裹的为字段名。

2. 示例程序

*&---------------------------------------------------------------------**& Report ZTEST_PRINT_EXCEL*&---------------------------------------------------------------------**&*&---------------------------------------------------------------------*REPORT zdemo_print_excel.TYPES: BEGIN OF ty_item, xh TYPE i, dispatch_no TYPE char10, dispatch_date TYPE d, aufnr TYPE aufnr, zzxtno TYPE char10, psmng TYPE menge_d, dz TYPE menge_d, zz TYPE menge_d, matnr TYPE matnr, maktx TYPE maktx, psmng1 TYPE menge_d, bdmng TYPE menge_d, END OF ty_item.TYPES: BEGIN OF ty_item1, xh1 TYPE i, idnrk TYPE idnrk, maktx1 TYPE maktx, bdmng1 TYPE menge_d, meins TYPE meins, END OF ty_item1.TYPES: tt_item TYPE STANDARD TABLE OF ty_item WITH DEFAULT KEY.TYPES: tt_item1 TYPE STANDARD TABLE OF ty_item1 WITH DEFAULT KEY.TYPES: BEGIN OF ty_print_sheet, ernam TYPE ernam, item TYPE tt_item, item1 TYPE tt_item1, END OF ty_print_sheet.DATA: gs_print_sheet TYPE ty_print_sheet.

START-OF-SELECTION. gs_print_sheet = VALUE #( ernam = sy-uname item = VALUE #( ( xh = 1 dispatch_no = '1000000000' dispatch_date = sy-datum aufnr = '001000000000' zzxtno = 'ABC' psmng = 1 dz = '0.1' zz = '10' matnr = 'MAT001' maktx = '测试物料1' psmng1 = '100' bdmng = '200' ) ( xh = 2 dispatch_no = '1000000001' dispatch_date = sy-datum aufnr = '001000000000' zzxtno = 'ABC' psmng = 1 dz = '0.1' zz = '10' matnr = 'MAT002' maktx = '测试物料2' psmng1 = '100' bdmng = '200' ) ( xh = 3 dispatch_no = '1000000002' dispatch_date = sy-datum aufnr = '001000000000' zzxtno = 'ABC' psmng = 1 dz = '0.1' zz = '10' matnr = 'MAT003' maktx = '测试物料3' psmng1 = '100' bdmng = '200' ) ) item1 = VALUE #( ( xh1 = 1 idnrk = 'MAT00101' maktx1 = '子件1' bdmng1 = '10' meins = 'PCS' ) ( xh1 = 2 idnrk = 'MAT00102' maktx1 = '子件2' bdmng1 = '20' meins = 'PCS' ) ( xh1 = 3 idnrk = 'MAT00103' maktx1 = '子件3' bdmng1 = '30' meins = 'PCS' ) ) ). zcl_common=>print_excel( iv_w3objid = 'ZDEMO_PRINT_EXCEL' it_data = VALUE #( ( sheet = 'Sheet1' data = REF #( gs_print_sheet ) ) ) iv_xlsm = abap_true iv_autoprint = abap_false ).

3\. 效果展示

ABAPEXCEL 打印封装 - 封面图
ABAPEXCEL 打印封装 - 封面图

总结

如果企业终端客户具备使用EXCEL的条件,使用EXCEL模板打印,可以充分利用EXCEL强大的功能,如样式处理、宏处理等,快速地开发出各种精美的报表。

GITHUB地址:https://github.com/a87b01c14/ZCL_COMMON

ABAP三叔

关于作者:ABAP三叔

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

来源说明:本文内容由「ABAPEXCEL打印封装.md」整理生成,仅用于内部技术分享与学习交流。