ABAP报表数据处理:OLE上传模板 填充数据并打印

使用OLE实现操作EXCEL的,是从服务器已经上传的EXCEL模板中下载模板然后打开修改实现数据保存。也可以直接创建 新的EXCEL文件往里面传递数据并设置格式。 1. 上传模板——SMW0 WebRFC 的二进制数据 ,模板数据保存在系统表wwwdata中。 2. 程序中下载模板 ```*&---------------------------------------------------------------------* *& Form FRM_DOWNLOAD_EXCEL_FROMSERVER *&---------------------------------------------------------------------* * 从服务器下载模板 *----------------------------------------------------------------------* * -->PL_OBJID:模板名称 * -->PL_DEST:模板的保存路径 *----------------------------------------------------------------------* FORM f_download_excel_fromserver USING pl_objid TYPE wwwdatatab-objid pl_dest TYPE rlgrap-filename. DATA: l_objdata LIKE wwwdatatab, l_mime LIKE w3mime, l_objnam TYPE string, l_rc LIKE sy-subrc, l_errtxt TYPE string. CONCATENATE pl_objid '.XLS' INTO l_objnam. CONDENSE l_objnam NO-GAPS. * 检查模板是否存在 SELECT SINGLE relid objid FROM wwwdata INTO (l_objdata-relid, l_objdata-objid) WHERE srtf2 = 0 AND relid = 'MI' AND objid = pl_objid. * 模板不存在 IF sy-subrc <> 0 OR l_objdata-objid = space. MESSAGE e002(zsd) WITH l_objnam. ENDIF. * 下载模板到指定路径 CALL FUNCTION 'DOWNLOAD_WEB_OBJECT' EXPORTING key = l_objdata destination = pl_dest IMPORTING rc = l_rc. * 下载模板失败 IF l_rc <> 0. MESSAGE '下载模板失败!' type 'S'. ENDIF. ENDFORM. "FRM_DOWNLOAD_EXCEL_FROMSERVER ``` 3. 打开模板填充数据 ``` *&---------------------------------------------------------------------* *& Form F_OPEN_EXCEL_HIDE *&---------------------------------------------------------------------* *& 初始化OLE控件并打开模版文件同时前台不可见 *&---------------------------------------------------------------------* * -->PL_FILENAME :要打开的Excel文件 * <--PL_APPLICATION:Excel进程 * <--PL_WORKBOOK :工作簿 * <--PL_SUBRC :执行结果返回值 *----------------------------------------------------------------------* FORM f_open_excel_hide USING pl_filename TYPE rlgrap-filename CHANGING pl_application TYPE ole2_object pl_workbook TYPE ole2_object pl_subrc TYPE sy-subrc. * 创建Excel进程 CREATE OBJECT pl_application 'EXCEL.APPLICATION'. * 设置Excel进程不可见 SET PROPERTY OF pl_application 'Visible' = 0. * 打开已有的Excel文件 CALL METHOD OF pl_application 'WORKBOOKS' = pl_workbook. CALL METHOD OF pl_workbook 'OPEN' EXPORTING #1 = pl_filename. * 打开Excel文件是否成功的返回值 pl_subrc = sy-subrc. * 如果打开成功继续执行后继代码,如果失败退出当前子程序 CHECK pl_subrc = 0. * 得到当前活动工作簿 GET PROPERTY OF pl_application 'ACTIVEWORKBOOK' = pl_workbook. CALL METHOD OF pl_application 'CELLS' = cell. "工作表全选 ENDFORM. " F_OPEN_EXCEL_HIDE ``` 4. 填充数据 ```*&---------------------------------------------------------------------* *& Form FILL_CELL *&---------------------------------------------------------------------* * 向指定的单元格填充数据 *----------------------------------------------------------------------* * -->PL_ROW :单元格所在的行 * -->PL_COL :单元格所在的列 * -->PL_VALUE :单元格的值 * <--PL_APPLICATION:Excel进程 *----------------------------------------------------------------------* FORM f_fill_cell USING pl_row TYPE i pl_col TYPE i pl_value TYPE c CHANGING pl_application TYPE ole2_object. DATA l_cells TYPE ole2_object. * 选中单元格 CALL METHOD OF pl_application 'Cells' = l_cells EXPORTING #1 = pl_row #2 = pl_col. * 设置值 SET PROPERTY OF l_cells 'value' = pl_value. ENDFORM. "FILL_CELL ``` 5. 关闭excel写操作 ```*关闭excel写操作 FORM close_excel USING pl_application TYPE ole2_object pl_workbook TYPE ole2_object. CALL METHOD OF pl_workbook 'SAVE'. "保存 CALL METHOD OF pl_application 'QUIT'. FREE OBJECT pl_application. FREE OBJECT pl_workbook . ENDFORM. "CLOSE_EXCEL ```

你可能感兴趣的:(ABAP报表数据处理:OLE上传模板 填充数据并打印)