內表数据导出到EXCEL模板示例

来源:互联网 发布:软件开发营销方案 编辑:程序博客网 时间:2024/06/17 15:10

运行效果:

模板:


导出数据:


第一步:上传EXCEL模板

事务码:SMW0







程序代码:

REPORT ztest_sy04.TYPE-POOLS ole2.DATA: l_name LIKE wwwdatatab,      l_mime LIKE w3mime OCCURS 0.DATA: fullpath TYPE string. " 全路径DATA: v_excel  TYPE ole2_object,      v_book   TYPE ole2_object,      v_cell   TYPE ole2_object,      v_font   TYPE ole2_object.DATA: BEGIN OF gs_data,        matnr TYPE mara-matnr,        maktx TYPE makt-maktx,        meins TYPE mara-meins,      END OF gs_data.DATA: gt_data LIKE TABLE OF gs_data.DEFINE fill_cell.  call method of v_excel 'CELLS' = v_cell  " 单元格位置    exporting      #1 = &1      #2 = &2.  set  property of v_cell 'value' = &3.    " 单元格内容  call method   of v_cell 'FONT'  = v_font.  set  property of v_font 'size'  = &4.    " 设置字体大小END-OF-DEFINITION.PERFORM get_data.PERFORM download_excel.*&---------------------------------------------------------------------**&      Form  get_data*&---------------------------------------------------------------------**       text  获取数据*----------------------------------------------------------------------*FORM get_data.  gs_data-matnr = '10001'.  gs_data-maktx = '商品01'.  gs_data-meins = 'KG'.  APPEND gs_data TO gt_data.  gs_data-matnr = '10002'.  gs_data-maktx = '商品02'.  gs_data-meins = 'KG'.  APPEND gs_data TO gt_data.  gs_data-matnr = '10003'.  gs_data-maktx = '商品03'.  gs_data-meins = 'KG'.  APPEND gs_data TO gt_data.ENDFORM.                    "get_data*&---------------------------------------------------------------------**&      Form  download_excel*&---------------------------------------------------------------------**       text  下载EXCEL模板*----------------------------------------------------------------------*FORM download_excel.  l_name-relid = 'MI'.  l_name-objid = 'ZTEST_MARA'.  " 上传的excel的对象名称*  l_name-text = sy-title.  CALL FUNCTION 'WWWDATA_IMPORT'    EXPORTING      key               = l_name    TABLES      mime              = l_mime    EXCEPTIONS      wrong_object_type = 1      import_error      = 2      OTHERS            = 3.  IF sy-subrc <> 0.* Implement suitable error handling here  ENDIF.  fullpath = 'E:\商品信息表.XLS'.  IF v_excel IS INITIAL.    CALL FUNCTION 'GUI_DOWNLOAD'      EXPORTING        filename                = fullpath " 文件下载到指定路径        filetype                = 'BIN'      TABLES        data_tab                = l_mime      EXCEPTIONS        file_write_error        = 1        no_batch                = 2        gui_refuse_filetransfer = 3        invalid_type            = 4        no_authority            = 5        unknown_error           = 6        header_not_allowed      = 7        separator_not_allowed   = 8        filesize_not_allowed    = 9        header_too_long         = 10        dp_error_create         = 11        dp_error_send           = 12        dp_error_write          = 13        unknown_dp_error        = 14        access_denied           = 15        dp_out_of_memory        = 16        disk_full               = 17        dp_timeout              = 18        file_not_found          = 19        dataprovider_exception  = 20        control_flush_error     = 21        OTHERS                  = 22.    IF sy-subrc = 0.      PERFORM fill_content. " 文件下载成功时,执行数据写入    ENDIF.  ENDIF.ENDFORM.                    "download_excel*&---------------------------------------------------------------------**&      Form  fill_content*&---------------------------------------------------------------------**       text  数据写入EXCEL文件中*----------------------------------------------------------------------*FORM fill_content.  FIELD-SYMBOLS: <wa>    TYPE any,                 <field> TYPE any.  DATA: lv_txt(50) TYPE c.  DATA: row_i TYPE i,        col_i TYPE i.  " 创建EXCEL对象  CREATE OBJECT v_excel 'EXCEL.APPLICATION'.  CALL METHOD OF      v_excel      'WORKBOOKS' = v_book.  " 打开下载的EXCEL模板  CALL METHOD OF      v_book      'OPEN'    EXPORTING      #1     = fullpath. " 文件全路径  IF sy-subrc <> 0.    MESSAGE '打开文件失败!' TYPE 'S' DISPLAY LIKE 'E'.    STOP.  ENDIF.*  " 从內表循环数据,按顺序填到单元格中  LOOP AT gt_data ASSIGNING <wa>.    row_i = sy-tabix + 3.   " 行    DO 3 TIMES.      col_i = sy-index + 1. " 列      ASSIGN COMPONENT sy-index OF STRUCTURE <wa> TO <field>.      lv_txt = <field>.      fill_cell row_i col_i lv_txt 10.    ENDDO.  ENDLOOP.  SET PROPERTY OF v_excel 'VISIBLE' = 1. " 打开文件ENDFORM.                    "fill_content

注: (1). CSDN博客的插入代码功能不支持ABAP语言,故选了JAVA语言替代,关键字无法高亮显示;

         (2). 如有疏漏之处,还请不吝赐教!


参考资料:《SAP实用程序开发进阶》,唐嘉、彭功涛、方玉凤 编著,兵器工业出版社;

0 0