使用OLE實現操作EXCEL的,是從服務器已經上傳的EXCEL模板中下載模板然后打開修改實現數據保存。也可以直接創建 新的EXCEL文件往里面傳遞數據并設置格式。
- 上傳模板——SMW0 WebRFC 的二進制數據 ,模板數據保存在系統表wwwdata中。
- 程序中下載模板
*& 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
- 打開模板填充數據
*&---------------------------------------------------------------------*
*& 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
- 填充數據
*& 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
- 關閉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