`

SAP ABAP OLE 操作上传的EXCEL模板(转)

阅读更多
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




  • 大小: 39.2 KB
  • 大小: 1.4 KB
分享到:
评论

相关推荐

    SAP ABAP OLE 操作EXCEL小结

    SAP ABAP OLE 操作 EXCEL 小结 SAP ABAP OLE 操作 EXCEL 小结是指使用 SAP ABAP 语言通过 OLE(Object Linking and Embedding)技术来操作 EXCEL 文件的技术。在 SAP 系统中,ABAP 语言可以直接操作 EXCEL 文件,...

    ABAP数据快速填充EXCEL

    ABAP数据快速填充EXCEL,比传统的OLE方式要运行速度快。

    Abap中使用DOI与OLE工具

    在SAP ABAP环境中,DOI(Data Output Interface)和OLE(Object Linking and Embedding)是两种常用的工具,用于与外部系统交互,特别是在处理数据导出到如Microsoft Excel这样的应用程序时。下面将详细介绍这两个...

    SAP 简单的SAP使用Excel程序

    我们可以使用ABAP程序将SAP数据导入到Excel模板中,并生成报表。 在本文中,我们将使用一个Excel模板来实现报表的生成。Excel模板包含多个Sheet对象,每个Sheet对象对应一个报表。我们可以使用ABAP程序将SAP数据...

    ABAP导数据到excel.docx

    2. **上传模板**:使用OAOR事务代码将创建好的Excel模板上传到SAP服务器。 3. **指定类名**:上传模板时需指定一个类名。常用的类名包括`SOFFICEINTEGRATION`、`PICTURES`、`HRFPM_EXCEL_STANDARD`等。 4. **指定...

    abap to excel

    从服务器下载Excel模板是ABAP编程实现Excel操作的重要步骤,可以使用DOWNLOAD EXCEL FROM SERVER语句从服务器下载Excel模板。在ABAP中,可以使用LOOP语句循环下载多个Excel模板。 隐蔽打开Excel 隐蔽打开Excel是...

    SAP OLE开发技术介绍.pdf

    使用事务代码SMW0将Excel模板上传到SAP系统。这个过程会创建一个工作流对象,供ABAP程序后续调用。 **步骤3:数据准备** 在ABAP程序中,你需要获取需要输出到Excel的数据。这可能涉及SQL查询、BAPI调用或其他数据...

    ABAP与EXCEL接口统一方法

    综上所述,ABAP与Excel接口的统一方法主要涉及到数据结构的设计、数据的转换、Excel模板的准备以及使用OLE Automation技术通过FUNCTION MODULE进行数据交互。这一方法有助于标准化和简化在ABAP环境中与Excel集成的...

    SAP OLE开发技术介绍.pptx

    - **模版上传**:使用SAP事务代码SMW0将Excel模版上传到SAP服务器,使其可以被ABAP程序访问。 - **数据准备**:在SAP系统内获取需要的数据,进行必要的数据处理,如过滤、聚合、转换等。 - **文件路径选择**:...

    ABAP DOI详解

    另外,如果需要读取服务器上的Excel模板文档,可以使用`cl_bds_document_set`类,该类的实例代表了一个业务文档集,可以管理一个或多个文档。 操作DOI的基本步骤包括: 1. 获取Container。 2. 创建并初始化...

    T-CODE SMWO模板上传与下载.docx

    在 SAP 系统中,模板上传和下载是一种常见的操作,特别是在 Excel 模板上传和下载时。在这个文档中,我们将详细介绍如何使用 T-CODE SMWO 实现模板上传和下载。 一、模板上传 在 SAP 系统中,模板上传可以通过 SMW...

    OLE & DOI.doc

    通过OLE,用户可以在SAP环境中直接操作Office文档,如创建、编辑或保存Excel表格等。OLE的工作原理类似于Excel中的VBA(Visual Basic for Applications)编程语言,用户可以通过录制宏的方式来实现自动化操作,并将...

    FI三大报表.docx

    2. 上载主数据EXCEL文件; 3. 客户按照导入模板格式及各个字段意义正确填写对应的数据,并保证数据真实有效; 4. 客户收集对应的模板数据,并检查是否符合规范; 5. 客户使用导入程序导入模板数据; 6. 客户前台检查...

Global site tag (gtag.js) - Google Analytics