ABAP中按模板輸出EXCEL文件
轉自:http://dhjdhja.blog.163.com/blog/static/64721136201221910356698/
REPORT Z_DHJ_1.
*定義變量
DATA: gc_filename LIKE rlgrap-filename,
gc_path LIKE rlgrap-filename,
gc_fullpath LIKE rlgrap-filename.
*創建對象實例,用於打開Excel程序
DATA: xl_appl TYPE ole2_object,
xl_sheet TYPE ole2_object,
xl_init_sheet TYPE ole2_object,
xl_template_sheet TYPE ole2_object,
xl_wkbks TYPE ole2_object,
xl_cell TYPE ole2_object,
xl_row TYPE ole2_object,
blankrow TYPE i VALUE 0,
currentrow TYPE i VALUE 0.
*----------------------------------------------------------------------*
* PARAMETERS/SELECT-OPTIONS
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-000.
PARAMETERS: p_txt1(20) TYPE c,
p_txt2 TYPE p.
SELECTION-SCREEN END OF BLOCK b1.
START-OF-SELECTION.
"下載EXCEL模板,使用WMW0上傳模板
PERFORM fm_down_model USING 'ZR_FI_0009'.
WRITE: '下載EXCEL模板完成'.
"打開Excel
PERFORM fm_openexcel.
"寫入數據
PERFORM fm_filldata_into_cell.
WRITE: '數據寫入完成'.
*----------------------------------------------------------------------*
*& Form FM_DOWN_MODEL excel模板下載
*&---------------------------------------------------------------------*
*& text excel_name 傳遞的是制定模版的名稱(上傳模版時創建的模版對象號)
*&---------------------------------------------------------------------*
FORM fm_down_model USING excel_name .
DATA:lo_objdata LIKE wwwdatatab,
lo_mime LIKE w3mime,
ls_destination LIKE rlgrap-filename,
ls_objnam TYPE string,
li_rc LIKE sy-subrc,
ls_errtxt TYPE string.
DATA:p_objid TYPE wwwdatatab-objid,
p_dest LIKE sapb-sappfad.
gc_path = 'C:\Temp\test'.
CONCATENATE gc_path sy-datum sy-uzeit '.xls' INTO gc_fullpath.
p_objid = excel_name.
IF sy-subrc = 0.
CONCATENATE p_objid '.XLS' INTO ls_objnam.
CONDENSE ls_objnam NO-GAPS.
SELECT SINGLE relid objid INTO CORRESPONDING FIELDS OF lo_objdata
FROM wwwdata WHERE srtf2 = 0 AND relid = 'MI' AND objid = p_objid.
IF sy-subrc NE 0 OR lo_objdata-objid EQ space.
CONCATENATE '模板文件' ls_objnam '不存在,請用TCODE:SMW0進行加載' INTO ls_errtxt.
MESSAGE ls_errtxt TYPE 'I'.
ENDIF.
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = lo_objdata
destination = gc_fullpath " 'C:\Temp\test************.xls' .
IMPORTING
rc = li_rc.
IF li_rc NE 0.
CONCATENATE '模板文件:' ls_objnam '下載失敗' INTO ls_errtxt.
MESSAGE ls_errtxt TYPE 'E'.
ENDIF.
ENDIF.
ENDFORM. " FRM_DOWN_MODEL
*&---------------------------------------------------------------------*
*& Form fm_openexcel open excel
*&---------------------------------------------------------------------*
FORM fm_openexcel.
DATA: column TYPE ole2_object.
* PERFORM schedule USING '打開文件..' 90 .
CREATE OBJECT xl_appl 'EXCEL.APPLICATION'.
SET PROPERTY OF xl_appl 'Visible' = 1.
CALL METHOD OF
xl_appl
'Workbooks' = xl_wkbks.
CALL METHOD OF
xl_wkbks
'Open'
EXPORTING
#1 = gc_fullpath
#2 = 0
#3 = 0. "只讀參數
IF sy-subrc <> 0.
PERFORM free_object.
MESSAGE e001(00) WITH '打開模板文件失敗,請檢查參數是否正確!'.
ENDIF.
CALL METHOD OF
xl_appl
'Worksheets' = xl_sheet
EXPORTING
#1 = 'sheet1'.
* SET PROPERTY OF xl_sheet 'NAME' = 's1'.
GET PROPERTY OF xl_appl 'ActiveWorkbook' = xl_wkbks. "必須加上,否則無法保存excel.
ENDFORM. "fm_openexcel
*&---------------------------------------------------------------------*
*& Form EXCEL_WRITE_CELL
*&---------------------------------------------------------------------*
* text 為指定的列添加字段 和 賦值
*----------------------------------------------------------------------*
FORM excel_write_cell USING xls TYPE ole2_object
row TYPE i
col TYPE i
fval.
DATA: cell TYPE ole2_object.
CALL METHOD OF
xls
'CELLS' = cell
EXPORTING
#1 = row
#2 = col.
SET PROPERTY OF cell 'VALUE' = fval.
ENDFORM. " EXCEL_WRITE_CELL
*&---------------------------------------------------------------------*
*& Form FM_FILLDATA_INTO_CELL 在Excel中寫入數據
*----------------------------------------------------------------------*
FORM fm_filldata_into_cell .
" l_index = 8.
"LOOP AT gt_data3 FROM 1 TO 4.
" PERFORM excel_write_cell USING xl_appl l_index 2 gt_data3-hslend. "期末余額
" PERFORM excel_write_cell USING xl_appl l_index 3 gt_data3-hslybeg. "年初余額
" l_index = l_index + 1 .
" ENDLOOP.
PERFORM excel_write_cell USING xl_appl 3 1 p_txt1.
PERFORM excel_write_cell USING xl_appl 5 1 p_txt2.
ENDFORM. " FM_FILLDATA_INTO_CELL
*&---------------------------------------------------------------------*
*& Form free_object.
*&---------------------------------------------------------------------*
FORM free_object.
FREE OBJECT xl_row.
FREE OBJECT xl_cell.
FREE OBJECT xl_sheet.
FREE OBJECT xl_init_sheet.
FREE OBJECT xl_template_sheet.
FREE OBJECT xl_wkbks.
FREE OBJECT xl_appl.
ENDFORM. "free_object