ABAP中按模板輸出EXCEL文件


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM