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

发布了22 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/csucoder_zone/article/details/80118713
今日推荐