前言
业务需求,需要将SAP的一些数据(如交货单数据)进行打印,在SAP中,除了使用SMARTFORMS进行模版设计打印外,也可以使用Excel数据填充技术进行打印。下面以打印交货单数据进行演示。
LOGO为固定位置,公章为动态位置,跟随数据行的多少决定其位置。
第一步:使用Excel制作模版
根据需求使用Excel制作模版的共用部分,包括抬头(head)信息和行项目(items)信息。
第二步:上传Excel模板到SAP数据库中
进入t-code:SMW0;
输入开发者的包名,点执行
点击创建,上传制作好的模版(公章同理)
第三步 下载模版
设置默认文件下载路径
“全局变量
DATA: gv_excel TYPE ole2_object, " Excel object
gv_mapl TYPE ole2_object, " list of workbooks
gv_sheet TYPE ole2_object, " sheet
gv_cell TYPE ole2_object, " cell
gv_font TYPE ole2_object, " font
gv_range TYPE ole2_object, " gange
gv_borders TYPE ole2_object, "BORDERS
gv_pictures TYPE ole2_object. "PICTURE
DATA:gv_xgqz_path TYPE rlgrap-filename. "公章路径
FORM frm_dowm_tempi.
DATA: lv_filename TYPE string,
lv_fullpath TYPE string,
lv_path TYPE string,
ls_wwwdata TYPE wwwdatatab,
lv_msg TYPE string,
lv_subrc TYPE sy-subrc,
c_objid_in_xg TYPE wwwdatatab-objid VALUE 'Excel_name'."Excel名称
DATA:ls_wwwdata_xgqz TYPE wwwdatatab. "公章
lv_filename = 'INVOICE.XLSX' . " 默认给一个名字
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = '模板下载'
default_extension = 'XLS'
default_file_name = lv_filename
CHANGING
filename = lv_filename
path = lv_path
fullpath = lv_fullpath
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
invalid_default_file_name = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE TEXT-006 TYPE c_msgty_s DISPLAY LIKE c_msgty_e.“文件保存出错
LEAVE LIST-PROCESSING.
ELSE.
gv_excelnamei = lv_fullpath.
SELECT SINGLE *
INTO CORRESPONDING FIELDS OF ls_wwwdata
FROM wwwdata
WHERE srtf2 = 0
AND relid = c_relid
AND objid = c_objid_in_xg.
"获取公章
SELECT SINGLE *
INTO CORRESPONDING FIELDS OF ls_wwwdata_xgqz
FROM wwwdata
WHERE srtf2 = 0
AND relid = c_relid
AND objid = 'GZ'.“公章保存时的名称
IF sy-subrc NE 0.
lv_msg = TEXT-007.
MESSAGE lv_msg TYPE c_msgty_s DISPLAY LIKE c_msgty_e."模版不存在
LEAVE LIST-PROCESSING.
ELSE.
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = ls_wwwdata
destination = gv_excelnamei
IMPORTING
rc = lv_subrc.
IF lv_subrc NE 0.
lv_msg = TEXT-008.
MESSAGE lv_msg TYPE c_msgty_s DISPLAY LIKE c_msgty_e.
LEAVE LIST-PROCESSING.
ENDIF.
IF gv_xh = 'X'. "下载公章到指定的文件路径中
gv_xgqz_path = gv_excelnamei.
SPLIT gv_xgqz_path AT '.