SAP日记-ABAP导出EXCEL的两种方式(OLE_DOI) 下载本文

内容发布更新时间 : 2024/5/18 4:11:35星期一 下面是文章的全部内容请认真阅读。

SAP日记——ABAP导出EXCEL的两种方法

提到OLE&DOI,我们不得不先说说两者这间的关系。

OLE是SAP早期与微软Office集成的工具,而DOI是它的替代技术。在实际项目中使用到OLE&DOI的场合多是EXCEL表格的读入或是填制。有些需要自动画表格及填数据,有的只是要求在原有的模版上填制数据。根据不同的场合可以选用不同的技术。(有些公司用EXCEL的打印来替代 FORM) 下面主要讲一下,OLE&DOI关于EXCEL的处理。

OLE实际上是类EXCEL中VBA的一种写法。有一种简单的方法,就是你可以在EXCEL中把要实现的动作录制成宏,然后根据宏的代码把它改成OLE。 OLE同时也支持直接调用EXCEL宏程序(没有禁宏的前提下)。

DOI完全用类实现。特点是,你不用再去记那些繁琐的VBA语言了,DOI都给你包装成类的方法了。同时作为一个控件,已经集成在了SAP的GUI中了,你就可以在SAP的屏幕中写Office的东西了,不用再跳出一个窗口来了,减少一些误操作。当然DOI也是支持调用EXCEL宏程序的,前提是宏没有被禁。 两种方法在实际项目中都有使用,有时候就要看实施顾问擅长于那个了,当然本人还是推荐用新的,但也不要丢了老的(有时候要维护一些老程序或许用得着)。因为两种在技术上并没有什么难点,只有熟练度的差别。我可记不住那么多的方法和类名,一般常备两份模版两份手册在身,边写边查,在项目进度之内完工就OK。

我读取EXCEL还是比较简单的,这里不再讲了。既然,EXCEL的填制有自动画表格和填制模版之分,而自动画表格,显然就是什么都要自己写,工程量比较大,需要大量的调试(字体、表格宽度、颜色等),没有什么捷径,捧着手册慢慢写吧!对于填制模版,那自然要将模版上传到服务器,程序执行的时候再下载使用。我使用的一般有3中: 1. FTP

2. T-code SMW0 3. T-code OAOR

FTP顾名思义,就是把文件传到FTP上,然后在运行的时候,直接输入文件服务器的路径,把模版在本地打开填制。

T-code SMW0。实际上这是用于Web的一种文件存储,不过我们也可以借用来存储模版。当然建立之前要维护相应的MIME types(先把文件的类型要注册),方可上传此类型的文件。

一、OLE

ABAP通过OLE的方式导出EXCEL,由于数据时一条一条的生成,速度较慢,不适合内

表数据较多的场景使用,但是其实现起来比较简单。

REPORT ZTEST1.

TABLES: ZWYM.“自定义的一张表

TYPE-POOLS:SLIS,ole2.“需要用到OLE2 DATA: excel TYPE ole2_object, workbook TYPE ole2_object, sheet TYPE ole2_object, cell TYPE ole2_object. DATA: application TYPE ole2_object, book TYPE ole2_object, books TYPE ole2_object. DATA: ole_book TYPE ole2_object.

DATA: FILENAME(100) TYPE C VALUE 'D:\\data\\test.xls'.“定义文件导出的路径

\ DATA:BEGIN OF GT_ITAB OCCURS 0,“定义内表 INCLUDE STRUCTURE ZWYM. END OF GT_ITAB.

SELECTION-SCREEN:BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.“查询条件

SELECT-OPTIONS:S_MATNR FOR ZWYM-MATNR. SELECTION-SCREEN:END OF BLOCK B1. START-OF-SELECTION. PERFORM GET_DATA. END-OF-SELECTION. PERFORM gen_excel.

FORM GET_DATA.

SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_ITAB FROM ZWYM WHERE MATNR IN S_MATNR. ENDFORM.“GET_DATA.

FORM gen_excel.

CREATE OBJECT excel 'EXCEL.APPLICATION'. IF sy-subrc NE 0 .

MESSAGE '不能生成EXCEL对象,检查系统是否安装 MS EXCEL。' TYPE 'E'. STOP. ENDIF.

SET PROPERTY OF excel 'DisplayAlerts' = 0. CALL METHOD OF excel 'WORKBOOKS' = workbook . * Put Excel in background

SET PROPERTY OF excel 'VISIBLE' = 1.

* Create worksheet

SET PROPERTY OF excel 'SheetsInNewWorkbook' = 1. CALL METHOD OF workbook 'ADD'.

PERFORM gen_item.“此处调用form gen_item显示EXCEL明细

GET PROPERTY OF excel 'ActiveSheet' = sheet. FREE OBJECT sheet. FREE OBJECT workbook.

GET PROPERTY OF excel 'ActiveWorkbook' = workbook. CALL METHOD OF workbook 'SAVEAS' EXPORTING

#1 = filename“保存路径 #2 = 1.

FREE OBJECT sheet. FREE OBJECT workbook. FREE OBJECT excel.

ENDFORM. \

FORM gen_item.

CALL METHOD OF excel 'WORKSHEETS' = sheet. CALL METHOD OF sheet 'ADD'. FREE OBJECT sheet.

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

CALL METHOD OF sheet 'ACTIVATE'.

SET PROPERTY OF sheet 'NAME' = 'btdata'.“导出的EXCEL表单名 FREE OBJECT sheet. \