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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一个ABAP DOI输出Excel文件的完整示例代码。 在这个示例,我们将使用ABAP DOI创建一个数据对象并将其导出Excel文件。下面是示例代码: ``` DATA: lo_doi TYPE REF TO if_doi, lo_obj TYPE REF TO zcl_my_data_object, lt_data TYPE STANDARD TABLE OF zcl_my_data_object, lr_excel TYPE REF TO cl_bcs_convert=>type_excel, ls_excel TYPE bcs_excel, lv_file TYPE string. * 创建 ABAP DOI 对象 CREATE OBJECT lo_doi. * 创建数据对象 lo_obj = lo_doi->create_transient( iv_class_name = 'ZCL_MY_DATA_OBJECT' iv_properties = VALUE #( ( name = 'ID' value = '001' ) ( name = 'TEXT' value = 'This is a sample text for my data object' ) ) ). * 将数据对象添加到内部 APPEND lo_obj TO lt_data. * 将数据导出Excel 文件 lr_excel = cl_bcs_convert=>create( cl_bcs_convert=>type_excel ). ls_excel-data = lt_data. ls_excel-sheetname = 'My Data Object'. lr_excel->add_data( ls_excel ). lv_file = 'C:\temp\my_data_object.xlsx'. CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING filename = lv_file TABLES data_tab = lr_excel->get_data( ). ``` 在这个示例,首先创建了一个ABAP DOI对象lo_doi。然后定义了一个数据对象类型zcl_my_data_object,并使用create_transient方法创建了一个数据对象lo_obj,并设置了ID和TEXT属性的值。 接着将数据对象lo_obj添加到内部lt_data。然后使用CL_BCS_CONVERT类创建一个Excel导出对象lr_excel,并设置Excel文件名和工作名称。 最后,将内部lt_data导出Excel文件,并保存到本地磁盘上的文件lv_file。这里使用了GUI_DOWNLOAD函数来实现文件下载。 希望这个示例能够帮助您理解如何使用ABAP DOI输出Excel文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值