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 操作EXCEL小结
ABAP ole下载到多个excel 上和一个excel上新增多个sheet 页 ;ABAP ole下载到多个exce PERFORM 注释了,和一个excel上新增多个sheet 页 ,注 是ABAP 代码 OLE
ABAP_OLE相关文档。ABAP_OLE相关文档。ABAP_OLE相关文档。ABAP_OLE相关文档。ABAP_OLE相关文档。ABAP_OLE相关文档。ABAP_OLE相关文档。ABAP_OLE相关文档。ABAP_OLE相关文档。ABAP_OLE相关文档。ABAP_OLE相关文档。...
ABAP OLE颜色代码
ABAP OLE开发EXCEL
SAP ABAP 数据库操作,快速学会ABAP!
资源名称:sap abap开发从入门到精通 内容简介: 《SAP ABAP开发从入门到精通》以应用实例的形式,讲解了SAPABAP开发的相关知识点,详细介绍了SAPABAP开发者必须掌握的包与变更传输系统(CTS)、数据类型、数据库...
ABAP数据快速填充EXCEL,比传统的OLE方式要运行速度快。
OLE导出: sap中abap 导出excel的方法很多,ole是其中一种,但其导出速度比较慢,一般只应用于对excel格式有特别要求的场所......
从实例学sap abap编程,从实例学sap abap编程,从实例学sap abap编程
ABAP OLE2 EXCEL
《SAP ABAP开发技术详解(实例篇)(第二版) [1] 》除了对对SAP ...全书操作讲解精练,采用大量的实例,重要技术点附有附录,除了可作为投身SAP职业人士的自修秘籍外,还可作为从业者用于查阅SAP ABAP开发技术的字典。
SAP ABAP开发学习——第9课:ALV2(视频教程) 1.SAP ABAP开发入门学习 2.含视频教程学习、PPT、作业 3.视频非常清晰
SAP ABAP SE11创建表操作步骤
ABAP OLE 经典教程,学习ABAP 必备,深入讲解了ole的开发技术和运用,找得好辛苦哟
最近公司业务部门要求用户操作SAP采购订单报表时,发送采购订单到供应商的邮箱,使用自己的Outlook邮箱帐号发送邮件,发送过的邮件需要在用户自己的发件箱中,而且用户在Outlook中设有签名,希望在发送邮件时自动...
abap excel ole 操作开发手册 指导文件 手把手教你如何操作
通过OLE操作实现ABAP导出Excel.
sap abap catt 操作手册 介绍sap中catt操作的详细步骤,不错的资源
《SAP ABAP开发从入门到精通》以应用实例的形式,讲解了SAP ABAP开发的相关知识点,详细介绍了SAP ABAP开发者必须掌握的包与变更传输系统(CTS)、数据类型、数据库、模块化程序、内表、调试、ABAP数据字典、锁对象...