前言
在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 ).
方法介绍
方法定义如下图
**参数名称** | **参数描述
** | **可选
** | **备注
**
---|---|---|---
IV_W3OBJID | 模板名称 | 必输 | SMW0维护的EXCEL模板名称
IT_DATA | 打印数据 | 必输 | 每个sheet页的填充数据
IV_XLSM | 启用宏 | 可选 | 如果EXCEL模板中有宏,需传入'X'
IV_AUTOPRINT | 自动打印 | 可选 | 传'X'时跳过EXCEL预览,弹出打印界面
IV_FILENAME | 文件名
| 可选
| EXCEL另存时的文件名称
使用示例
如模板所示,第3行和第6行定义了两个名称ITEM和ITEM1,对应着ABAP中的内表名,用中括号[]包裹的为字段名。
*&---------------------------------------------------------------------**& 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\. 效果展示
总结
如果企业终端客户具备使用EXCEL的条件,使用EXCEL模板打印,可以充分利用EXCEL强大的功能,如样式处理、宏处理等,快速地开发出各种精美的报表。
GITHUB地址:https://github.com/a87b01c14/ZCL_COMMON