`

sap中数据输出到excel中

    博客分类:
  • abap
阅读更多

  sap中输出需要用到excel 

 

 在sap中输出到excel 有两种方法 一个是ole 另一个就是doi

 

 ole的效率不好 doi对输出大量数据比较高效一些

 ole实例网上有 可以搜索一下 

 自己做一遍研究一下

 现在doi还没有研究明白

 这里有个例子http://rocktech.ycool.com/post.1843783.html

 但是网上 找了好好多 也就这一个例子 反复粘贴

 但是有些问题 还没有能够跑起来.

 

对于这两种技术都是套用模板  没有太多变化只是根据实施顾问的要求和实际情况使用

准备好这两个模板以后 也就没啥问题了

 

 

 

 

  ABAP直接操作EXCEL实现数据处理。这里是用OLE实现操作EXCEL的。现在还有

DOI操作EXCEL等方法。以后用到再做介绍。此处不是直接生成EXCEL文件,而是从

服务器已经上传的EXCEL模板中下载模板然后打开修改实现数据保存。也可以直接创建

新的EXCEL文件往里面传递数据并设置格式。这里不做介绍。

 

1.采用模板文件实现。上传EXCEL模板


 T-code:SMW0 WebRFC 的二进制数据 包:MI  

点击按钮,上传excel模板。

模板数据保存在系统表wwwdata中。

 

2.在程序中下载模板

*下载EXCEL模板FORM

FORM  temp_excel_get.
  DATA:  lo_objdata LIKE wwwdatatab,
         lo_mime LIKE w3mime,
         lc_filename  TYPE string VALUE'test01' ,
         lc_fullpath  TYPE string  VALUE'D:\test\' ,
         lc_path      TYPE  string VALUE'D:\test\' ,
         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.
  p_objid = 'ZTEST.XLS'. “此处为EXCEL模板名称
  CALL METHOD cl_gui_frontend_services=>file_save_dialog ”调用保存对话框
    EXPORTING
      default_extension    = 'XLS'
      default_file_name    = lc_filename 
    CHANGING
      filename             = lc_filename
      path                 = lc_path
      fullpath             = lc_fullpath
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.
  IF lc_fullpath = ''.
    MESSAGE  '不能打开excel' TYPE 'E'.
  ENDIF.
  IF sy-subrc = 0.
    p_dest = lc_fullpath.
*    concatenate p_objid '.XLS' into ls_objnam.
    CONDENSE ls_objnam NO-GAPS.
    SELECT SINGLE relid objid FROM wwwdata INTO CORRESPONDING FIELDS OF lo_objdata
           WHERE srtf2 = 0 AND relid = 'MI' AND objid = p_objid.

*检查表wwwdata中是否存在所指定的模板文件
    IF sy-subrc NE 0 OR lo_objdata-objid EQ space.“如果不存在,则给出错误提示
      CONCATENATE '模板文件' ls_objnam '不存在' INTO ls_errtxt.
      MESSAGE ls_errtxt TYPE 'I'.
    ENDIF.
    ls_destination = p_dest. ”保存路径

*如果存在,调用DOWNLOAD_WEB_OBJECT 函数下载模板到路径下
    CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
      EXPORTING
        key         = lo_objdata
        destination = ls_destination
      IMPORTING
        rc          = li_rc.
    IF li_rc NE 0.
      CONCATENATE '模板文件:' ls_objnam '下载失败' INTO ls_errtxt.
      MESSAGE ls_errtxt TYPE 'E'.
    ENDIF.
    fname = ls_destination.
  ENDIF.
ENDFORM.                    "fm_excel

 

3.下载完模板后,打开模板文件,填入数据

 


  CREATE OBJECT excel 'EXCEL.APPLICATION'.  "Create EXCEL OBJECT
  IF sy-subrc NE 0.
    EXIT.
  ENDIF.
  SET PROPERTY OF excel 'Visible' = 0.  "1/0 是否显示EXCEL

  CALL METHOD OF excel 'Workbooks' = workbook.

  CALL METHOD OF workbook 'Open'
    EXPORTING
    #1 = fname. ."打开上面下载路径下的excel文件

  CALL METHOD OF excel 'Sheets' = sheet
    EXPORTING
    #1 = 1.

  CALL METHOD OF sheet 'Select' .

  CALL METHOD OF sheet 'ACTIVATE'. “sheet 激活

  SET PROPERTY OF sheet 'NAME' = sheetname. “设定sheet名称

*此处假设内表itab 中已经存在需要写入excel中的数据

*并且假如从模板的第7行开始插入数据

LOOP AT itab INTO wa.
    tab = wa-tabix + 6.
*在excel中插入一行
    PERFORM excel_row_insert USING sheet tab 1.

*填充所插入行的每个单元格的数据
    PERFORM fill_range USING tab 1 wa-t01.
    PERFORM fill_range USING tab 2 wa-t02.
    PERFORM fill_range USING tab 3 wa-t03.
    PERFORM fill_range USING tab 4 wa-t04.
    PERFORM fill_range USING tab 5 wa-t05.
    PERFORM fill_range USING tab 6 wa-t06.
  ENDLOOP.

*设置EXCEL中所插入的数据行边框线格式为黑色有边框

  bod = tab.
  CONDENSE bod NO-GAPS.
  CONCATENATE 'A6:F' bod INTO bod.

  PERFORM borderrange USING excel bod.

  PERFORM sub_excel_save."保存excel数据

 

*&---------------------------------------------------------------------*
*&      Form  sub_excel_save
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM sub_excel_save.
  GET PROPERTY OF excel 'ActiveSheet' = sheet. “获取活动SHEET
  FREE OBJECT sheet.
  FREE OBJECT workbook.

  GET PROPERTY OF excel 'ActiveWorkbook' = workbook.
  CALL METHOD OF workbook 'SAVE'.

  SET PROPERTY OF excel 'Visible' = 1.  "是否显示EXCEL 此处显示不退出

* SET PROPERTY OF excel 'Visible' = 1.

*  CALL METHOD OF workbook 'CLOSE'. 
*  CALL METHOD OF excel 'QUIT'. 注释部分为不显示直接退出

  FREE OBJECT sheet.
  FREE OBJECT workbook.
  FREE OBJECT excel.
ENDFORM.                    "save_book

 

 

*&---------------------------------------------------------------------*
*& 向excel中的指定行插入N行
*&---------------------------------------------------------------------*
FORM excel_row_insert USING lcobj_sheet
                            lc_row
                            lc_count.
  DATA lc_range TYPE ole2_object.
  DATA h_borders  TYPE ole2_object.
  DO lc_count TIMES.
    CALL METHOD OF lcobj_sheet 'Rows' = lc_range
      EXPORTING #1 = 6.
    CALL METHOD OF lc_range 'Copy'.  “COPY第6行插入一个新行
    CALL METHOD OF lcobj_sheet 'Rows' = lc_range
      EXPORTING #1 = lc_row.
    CALL METHOD OF lc_range 'Insert'.
    CALL METHOD OF lc_range 'ClearContents'. "是否需要清空Cell
  ENDDO.
ENDFORM.                    "excel_row_insert

*&---------------------------------------------------------------------*
*&      Form  fill_range
*&---------------------------------------------------------------------*
*       text  填充EXCEL 单元格
*----------------------------------------------------------------------*
*      -->VALUE(F_ROW)    text
*      -->VALUE(F_COL)    text
*      -->VALUE(F_VALUE)  text
*----------------------------------------------------------------------*
FORM fill_range USING value(f_row)
                      value(f_col)
                      value(f_value).
  DATA:
    row TYPE i,
    col TYPE i.
  row = f_row.
  col = f_col.
  CALL METHOD OF excel 'CELLS' = cell
    EXPORTING
    #1 = row
    #2 = col.
  SET PROPERTY OF cell 'VALUE' = f_value.
ENDFORM.                    "fill_range 

 *&---------------------------------------------------------------------*
*&      Form  borderrange
*&---------------------------------------------------------------------*
*       text:设置EXCEL中所插入的数据行边框线格式

*----------------------------------------------------------------------*
*      -->LCOBJ_EXCEL  text
*      -->RANGE        text
*----------------------------------------------------------------------*
FORM borderrange USING lcobj_excel
                       range .
  DATA: lc_cell TYPE ole2_object ,
        lc_borders TYPE ole2_object .
  CALL METHOD OF lcobj_excel 'RANGE' = lc_cell
    EXPORTING
    #1 = range.
  DO 4 TIMES .
    CALL METHOD OF lc_cell 'BORDERS' = lc_borders
      EXPORTING #1 = sy-index.
    SET PROPERTY OF lc_borders 'LineStyle' = '1'.
    SET PROPERTY OF lc_borders 'WEIGHT' = 2.                "4=max
    SET PROPERTY OF lc_borders 'ColorIndex' = '1'.
  ENDDO.
  FREE OBJECT lc_borders.
  FREE OBJECT lc_cell.
ENDFORM.                    "borderrange

 

 暂时只用到了这么多,还有ABAP设置EXCEL字体,对齐方式等功能。什么时候用到了再

做研究。希望对大家有所帮助。

http://www.cnblogs.com/clsoho/archive/2010/06/10/1755619.html

分享到:
评论

相关推荐

    ALV导出数据到EXCEL时数据丢失位数的解决方法

    在SAP系统中,ALV(Advanced List Viewer)是一种功能强大的报表工具,经常用于数据报表的生成和输出。但是在将ALV数据导出到Excel时,可能会出现数据丢失位数的问题,具体来说,就是最后一位数字被截断或丢失。这是...

    Excel宏读取SAP数据[归纳].pdf

    Excel 宏读取 SAP 数据方法详解 Excel 宏读取 SAP 数据方法是指使用 Excel 宏从 SAP 系统中读取...通过创建 Web Service 和 Virtual interfaces,可以将 SAP 数据读取到 Excel 中,从而实现数据的快速读取和输出。

    ALV导出excel时窜行

    在 SAP 中,当我们使用 ALV 导出数据到 Excel 时,经常会遇到串行的问题。今天,我们将讨论导致串行的两个主要原因,并提供相应的解决方案。 原因一:特殊字符 在 SAP 中,某些特殊字符(0~32、127)会被保存在...

    上传excel到SAP内表.doc

    在SAP系统中,上传Excel文件内容到内表是一个常见的需求。这种需求可以通过多种方式实现,而本文将介绍其中的一种简单直接的方法。本方法使用ABAP语言编写,通过调用TEXT_CONVERT_XLS_TO_SAP函数来实现Excel文件的...

    vb.net 水晶报表中输出Excel

    以下是一些关于如何在VB.NET中使用水晶报表输出Excel的关键知识点: 1. **安装必要的组件**: - 首先,确保已安装了水晶报表的运行时库,例如SAP Crystal Reports for .NET Framework。这是水晶报表在.NET环境中...

    ABAP 读取EXCEL到内表的函数和自编程序.doc

    在SAP系统开发中,经常需要处理Excel数据,尤其是将Excel中的数据导入到SAP系统的内表中。然而,在这个过程中会遇到一些限制,比如单元格内容长度的限制。本文将详细介绍几种常见的用于读取Excel文件的方法,并针对...

    SAP SQVI快速报表操作手册

    SAP SQVI(快速查看器)是一种在SAP系统中用于快速创建和执行多表联查的工具,尤其适用于FICO(财务会计和控制)领域的数据查询。SQVI虽然有一些限制,比如创建的对象只能由创建者使用,且无法在不同环境中传输,但...

    SAP数据导入CATT.pptx

    SAP数据导入CATT SAP数据导入CATT是指使用SAP系统中的CATT(Computer Aided Test Tool)工具来...模板数据输出是在文件名中输入文件保存路径,按“传输”键是指将模板数据输出到一个文件中,并将其保存到指定的路径。

    SAP CATT中文教程

    后面的就是Vendor中的栏位,将企业的Vendor数据按EXCEL中的格式输入到EXCEL文件中。 11. 在完成了原始数据输入后,再将此EXCEL文件保存为TXT文本格式,然后关闭此EXCEL文档。 12. 再进入到SAP的CATT界面,点击执行...

    SAP打印模板配置.rar

    这个压缩包"SAP打印模板配置.rar"包含的资源显然与SAP中的打印功能相关,特别是利用Excel文件作为模板进行数据处理和输出。以下是关于这些知识点的详细说明: 1. **ABAP模板**:ABAP(Advanced Business ...

    SAP PP BOM批量下载

    - **数据输出**:将处理后的数据输出为用户友好的格式,例如CSV或Excel文件。 #### 四、总结 综上所述,SAP PP BOM批量下载工具是一个高度定制化的解决方案,旨在提高企业对SAP系统中BOM数据的管理效率。通过对BOM...

    SAP OLE开发技术介绍.pdf

    2. DOI(Direct Output to Interface):DOI是另一种方式,它允许SAP系统将数据输出到各种格式,包括Excel。这种方式通常用于预定义模板的导出,数据填充后用户可以进行自定义编辑。 SAP OLE开发的实施步骤大致如下...

    Excel高效输出工具-xlsx workbench

    在ABAP编程环境中,xlsx workbench是一款非常实用的工具,它专为高效地处理和输出Excel数据而设计。这款工具利用ABAP语言的强大功能,使得开发人员能够在SAP系统中便捷地生成和操作.xlsx格式的电子表格,极大地提高...

    SAP系统基本操作手册.pdf,这是一份不错的文件

    报表的输出可以帮助用户对业务数据进行分析和决策。 * 报表的格式:SAP系统提供了多种报表格式,例如PDF、Excel、WORD等。用户可以根据需要选择报表格式。 * 列宽优化调整:在SAP系统中,报表的列宽是可以调整的,...

    SAP query

    标题"SAP Query"涉及到的是SAP系统中的查询工具,它是一种强大的数据分析和报告功能,用于在SAP环境中提取和分析数据。在这个主题下,我们将深入探讨SAP Query的基本概念、功能以及如何使用。 SAP Query是SAP R/3...

    SAP的一个德国顾问写的关于 SAP 审计的文章

    3. **准备和分析SAP数据**: - **数据准备和分析选项**:概述了在SAP R/3系统中准备和分析数据的不同方法。 - **表格数据的准备和分析**: - **表格简介**:解释了SAP系统中表格的基本概念及其作用。 - **寻找...

    读取EXCEL进入内表 实例

    根据给定文件的信息,我们可以提炼出以下关于如何在SAP ABAP环境中读取Excel文件并将其数据转换为内部表的相关知识点: ### 1. 报告名称与目的 报告名称为 `ZUPLOAD_EXCEL_TO_ITAB`,其主要功能是读取一个Excel...

    SAP Query 使用说明

    - **运行查询(Run Query)**:用户在SQ04中输入必要的参数,然后执行查询,可以导出到Excel或其他格式。 - **打印和导出(Printing and Exporting)**:用户可以选择将结果打印出来,或者保存为PDF、CSV等格式。 ...

    sap课程设计zongjie.docx

    Excel输出是SAP系统中的一个基本功能,通过该功能用户可以输出系统中的各种报表和数据到Excel表格中。 学生登录 学生登录是SAP系统中的一项基本功能,通过该功能学生可以登录系统并进行相关的学习和实践工作。 ...

    SAP 打印入门

    2. **输出类型与设备类型**:SAP中的输出类型定义了数据如何被转换为可打印格式,而设备类型则定义了这些输出将如何发送到特定的硬件设备,如激光打印机、网络打印机或电子邮件服务器。 3. **打印格式设计**:SAP...

Global site tag (gtag.js) - Google Analytics