打印前需要先下载EXCLE模板
FORM frm_download .
CALL METHOD cl_gui_frontend_services=>file_exist
EXPORTING
file = l_file
RECEIVING
result = l_result
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
wrong_parameter = 3
not_supported_by_gui = 4
OTHERS = 5.
" IF l_result = 'X'.
" MESSAGE '模板ZMM_ZD_0015模具维修出库单.XLS已存在!' TYPE 'S'.
" STOP.
" ELSE.
wwwdata_new-relid = 'MI'.
wwwdata_new-objid = 'ZMM_ZD_0015'. "SMW0定义的对象名称 Z5009201
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = wwwdata_new
destination = 'C:\SAPDOWNLOAD\ZMM_ZD_0015模具维修出库单.XLS'.
IF sy-subrc NE 0.
MESSAGE '下载模板失败!' TYPE 'E'.
ELSE.
MESSAGE '成功下载模板,请重新调整以适应本机!默认下载目录:C:\SAPDOWNLOAD\ZMM_ZD_0015模具维修出库单.XLS。' TYPE 'S'.
ENDIF.
" ENDIF.
打印
FORM frm_print .
*填充数据*
CREATE OBJECT excel 'EXCEL.APPLICATION'.
SET PROPERTY OF excel 'VISIBLE' = 1.
CALL METHOD OF excel 'WORKBOOKS' = workbooks.
CALL METHOD OF workbooks 'OPEN' EXPORTING #1 = 'C:\SAPDOWNLOAD\ZMM_ZD_0015模具维修出库单.XLS'.
SET PROPERTY OF excel 'SCREENUPDATING' = 'TRUE'.
*------BEGIN头部填充
CLEAR:gs_data.
LOOP AT gt_data INTO gs_data.
PERFORM cell_fill USING 3 3 gs_data-aedat. "发料日期
PERFORM cell_fill USING 3 15 gs_data-ebeln. "维修订单
PERFORM cell_fill USING 4 9 gs_data-zname1. "维修商
PERFORM cell_fill USING 11 3 gs_data-ernam. "维修开单人
CLEAR:gs_data.
EXIT.
ENDLOOP.
*------END头部填充
CLEAR:g_lines,g_lines_c,page_count,page_count_s.
g_lines = lines( gt_data ).
g_lines_c = g_lines / page_of_line.
page_count = ceil( g_lines_c ) .
page_count_s = page_count.
CONCATENATE '共' page_count_s '页' INTO page_all SEPARATED BY space. "
*------------END页码处理
SORT gt_data BY ebelp ASCENDING.
CLEAR:gs_data.
LOOP AT gt_data INTO gs_data.
CALL METHOD OF excel 'WORKSHEETS' = sheet
EXPORTING #1 = 1 .
CALL METHOD OF sheet 'ACTIVATE '.
CLEAR page_s.
page_s = page.
CONCATENATE '第' page_s '页' INTO page_s SEPARATED BY space.
page_now = ''.
CONCATENATE page_s page_all INTO page_now SEPARATED BY space.
*&-----------------填充数据----------------------*
PERFORM cell_fill USING l_row 1 gs_data-ebelp. "行项目
PERFORM cell_fill USING l_row 2 gs_data-ean11. "模具资产编码
PERFORM cell_fill USING l_row 4 gs_data-txz01. "模具名称
PERFORM cell_fill USING l_row 12 gs_data-mseht. "计量单位
PERFORM cell_fill USING l_row 13 gs_data-menge. "发料数(重)量
" PERFORM cell_fill USING 12 18 page_now. "页码(暂时不考虑打印页数)
" hxm1 = hxm1 + 1.
" hxm2 = hxm2 + 1.
IF l_count = page_of_line AND hxm2 NE g_lines.
GET PROPERTY OF excel 'ACTIVEWORKBOOK' = workbook.
CALL METHOD OF workbook 'SAVE'.
IF p_ck = 'X'.
CALL METHOD OF workbook 'PRINTPREVIEW'.
ELSE.
CALL METHOD OF workbook 'PRINTOUT'.
ENDIF.
PERFORM free_cell. "清空数据区域
l_count = 0.
l_row = 5. "下一页开始的行数
page = page + 1.
ENDIF.
l_row = l_row + 1.
l_count = l_count + 1.
CLEAR:gs_data.
ENDLOOP.
GET PROPERTY OF excel 'ACTIVEWORKBOOK' = workbook.
CALL METHOD OF workbook 'SAVE'.
IF p_ck = 'X'.
CALL METHOD OF workbook 'PRINTPREVIEW'.
ELSE.
CALL METHOD OF workbook 'PRINTOUT'.
ENDIF.
PERFORM free_cell.
PERFORM free_top.
CALL METHOD OF workbook 'SAVE'.
CALL METHOD OF excel 'QUIT'. "退出
*&---------------------------------------------------------------------*
*& FORM FREE_TOP
*&---------------------------------------------------------------------*
* 清空头部数据
*----------------------------------------------------------------------*
FORM free_top.
PERFORM cell_fill USING 3 3 ''. "发料日期
PERFORM cell_fill USING 3 15 ''. "维修订单
PERFORM cell_fill USING 4 9 ''. "维修商
PERFORM cell_fill USING 11 3 ''. "维修开单人
ENDFORM. "FREE_TOP
*&---------------------------------------------------------------------*
*& FORM FREE_CELL
*&---------------------------------------------------------------------*
* 清空数据区域
*----------------------------------------------------------------------*
FORM free_cell.
DATA l_row_o TYPE i.
l_row_o = 6.
PERFORM cell_fill USING 12 18 ''. "页码
DO page_of_line TIMES.
PERFORM cell_fill USING l_row_o 1 ''. "行项目
PERFORM cell_fill USING l_row_o 2 ''. "模具资产编码
PERFORM cell_fill USING l_row_o 4 ''. "模具名称
PERFORM cell_fill USING l_row_o 12 ''. "计量单位
PERFORM cell_fill USING l_row_o 13 ''. "发料数(重)量
l_row_o = l_row_o + 1 .
ENDDO.
ENDFORM. "FREE_CELL
FORM cell_fill USING l_rowi
l_coli
l_ivalue.
CALL METHOD OF excel 'CELLS' = cell
EXPORTING
#1 = l_rowi
#2 = l_coli.
SET PROPERTY OF cell 'VALUE' = l_ivalue.
ENDFORM. "CELL_FILL
*&---------------------------------------------------------------------*
*& FORM CELL_READ
*&---------------------------------------------------------------------*
* TEXT
*----------------------------------------------------------------------*
* -->L_ROWI TEXT
* -->L_COLI TEXT
* -->L_IVALUE TEXT
*----------------------------------------------------------------------*
FORM cell_read USING l_rowi
l_coli
l_ivalue.
CALL METHOD OF excel 'CELLS' = cell
EXPORTING
#1 = l_rowi
#2 = l_coli.
GET PROPERTY OF cell 'VALUE' = l_ivalue.
ENDFORM. "CELL_READ