三步搞定ABAP DOI操作EXCEL
---------------------------------------------------前言---------------------------------------------------------------------------------
ABAP可以使用OLE与DOI两种方式实现操作EXCEL。使用OLE时,每个单元格的值和样式都需要写代码实现,特别是对于不规则的格式, 代码量巨大. 而DOI是从服务器已经上传的EXCEL模板中下载模板然后打开修改实现数据保存。当然,也可以直接创建新的EXCEL文件往里面传递数据并设置格式(这样好像又走回老路了,不是我们要的, OLE与DOI的区别就好像是面向过程与面向对象的区别).
简单来说,DOI操作EXCEL主要有以下几步:
准备工作:上传Excel模板
第一步:下载Excel到本地
第二步:打开Excel文档
第三步: 写入数据
----------------------------------------------------正文-------------------------------------------------------------------------------------
准备工作:上传Excel模板:
1.输入Tcode: smw0 如图所示:
2.选择二进制数据选择,回车后进入查询界面,包: MI
3.点击执行:进入显示列表,点击新建图标:
4.输入对象名称与描述后点击打开文件选择框,,选择文件后,会提示选择包,
好了,可以写代码了(复制可以直接运行,前提是已经上传模板),
REPORT zr04_ole_templet.
DATA:c_export_filename_xls TYPE string VALUE 'ZRRFQ01_1.XLS', "导出模板默认文件名 '数据导入模板'
c_objid_xls TYPE wwwdatatab-objid VALUE 'ZRRFQ01_1.XLS'. "存放模板的对象id
DATA: lo_objdata LIKE wwwdatatab, "Excel模板对象
ls_destination LIKE rlgrap-filename ,"下载保存的目标路径
lc_path TYPE string, "存储路径
lc_fullpath TYPE string, "文件完整路径
li_rc LIKE sy-subrc. "返回值
DATA: excel_obj TYPE ole2_object,
book_obj TYPE ole2_object,
sheet_obj TYPE ole2_object,
cell_obj TYPE ole2_object.
START-OF-SELECTION.
第一步: 下载Excel到本地
PERFORM download_xls_template.
第二步:打开Excel文档
PERFORM open_excel.
第三步: 写入数据
PERFORM write_excel.
*&---------------------------------------------------------------------*
*& Form download_xls_template
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM download_xls_template.
* 获取保存路径
CALL METHOD cl_gui_frontend_services=>get_desktop_directory
CHANGING
desktop_directory = lc_path.
IF lc_path IS INITIAL.
lc_path = 'C:\TEMP'.
ENDIF.
CONCATENATE lc_path '\' c_export_filename_xls INTO lc_fullpath.
* 检查模板是否存在
SELECT SINGLE relid objid FROM wwwdata INTO CORRESPONDING FIELDS OF lo_objdata
WHERE srtf2 = 0 AND relid = 'MI' AND objid = c_objid_xls.
IF sy-subrc NE 0 OR lo_objdata-objid EQ space.
MESSAGE e000(zpp001) WITH c_export_filename_xls.
ENDIF.
* 下载模板
ls_destination = lc_fullpath.
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = lo_objdata
destination = ls_destination
IMPORTING
rc = li_rc.
IF li_rc NE 0.
MESSAGE e001(zpp001) WITH c_export_filename_xls.
ENDIF.
ENDFORM. "download_xls_template
*&---------------------------------------------------------------------*
*& Form open_excel
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM open_excel.
CREATE OBJECT excel_obj 'excel.APPLICATION'.
IF sy-subrc NE 0.
MESSAGE 'EXCEL创建错误' TYPE 'S' DISPLAY LIKE 'E'.
STOP.
ENDIF.
CALL METHOD OF excel_obj 'WORKBOOKS' = book_obj.
SET PROPERTY OF excel_obj 'VISIBLE' = 1.
SET PROPERTY OF excel_obj 'SheetsInNewWorkbook' = 1.
* 打开excel文件 , (新建使用:CALL METHOD OF book_obj 'Add' = sheet_obj)
CALL METHOD OF book_obj 'Open' = sheet_obj
EXPORTING #1 = ls_destination.
CALL METHOD OF sheet_obj 'ACTIVATE'.
FREE OBJECT sheet_obj. "OK
ENDFORM. "open_excel
*&---------------------------------------------------------------------*
*& Form write_excel
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM write_excel.
DATA: it_spfli LIKE spfli OCCURS 10 WITH HEADER LINE.
DATA: h TYPE i. "行号
*取数据
SELECT * FROM spfli INTO TABLE it_spfli UP TO 10 ROWS.
* 输出Excel表头,自定义格式的列等
PERFORM fill_cell USING 1 1 1 'Flug'(001).
PERFORM fill_cell USING 1 2 1 'Nr'(002).
PERFORM fill_cell USING 1 3 1 'Von'(003).
PERFORM fill_cell USING 1 4 1 'Nach'(004).
PERFORM fill_cell USING 1 5 1 'Zeit'(005).
* 复制数据到Excel,针对固定格式
LOOP AT it_spfli.
h = sy-tabix + 1.
PERFORM fill_cell USING h 1 0 it_spfli-carrid.
PERFORM fill_cell USING h 2 0 it_spfli-connid.
PERFORM fill_cell USING h 3 0 it_spfli-cityfrom.
PERFORM fill_cell USING h 4 0 it_spfli-cityto.
PERFORM fill_cell USING h 5 0 it_spfli-deptime.
ENDLOOP.
FREE OBJECT cell_obj.
ENDFORM. "write_excel
*&---------------------------------------------------------------------*
*& Form FILL_CELL
*&---------------------------------------------------------------------*
* row: 行号,
* col: 列号,
* bold: 字体是否加粗,0,否,1是.
* val: 填充值
*----------------------------------------------------------------------*
FORM fill_cell USING row col bold val.
CALL METHOD OF excel_obj 'CELLS' = cell_obj
EXPORTING #1 = row #2 = col.
SET PROPERTY OF cell_obj 'VALUE' = val.
FREE OBJECT cell_obj.
ENDFORM. "FILL_CELL
效果图:
三步搞定ABAP DOI操作EXCEL相关推荐
- android 图片墙拼贴,三步搞定 用APP打造图片文字拼贴效果
相信大家一定见过一种文字拼贴效果的图片,许多大小不一.字体不同.颜色各异的文字拼合出一幅完整的画面.如果你曾经也想自己制作这么一张高端大气上档次的独特图片,却苦于自己的PS水平不到家,那么一定不要错过 ...
- linux 无法定位程序,三步搞定无法定位程序输入点 于动态链接库上
三步搞定无法定位程序输入点 于动态链接库上 发布时间:2018-09-17 09:24 来源:互联网 当前栏目:电脑教程 上网的时候突然咚的一声弹出一个错误提示框,上边写着 iexplore.exe ...
- Flash Builder4.7极其简单破解方法-三步搞定(亲测)
资讯类型: 转载 来源页面: http://weibo.com/2101024913/yvmR0D9Df 资讯原标题: 资讯原作者: 丿卓越丶星辰 翻译词数: 词 我的评论: 对这篇文你有啥看法,跟贴 ...
- Flash Builder4.7极其简单破解方法-三步搞定
Flash Builder4.7极其简单破解方法-三步搞定(亲测) 原方法适用于4.6版本,同样方法4.7完美破解,不敢独享 具体步骤如下: 1.到Adobe官网下载FlashBuilder 4.6, ...
- 漂亮的PPT模板:三步搞定年终报告
漂亮的PPT模板:三步搞定年终报告 2013年年底悄然而至,有一个不得不做的难题,那就是如何做好年终报告?有没有想要吐槽的欲望,做完前要熬夜,做完后还被折磨.你是不是再也不想做PPT ,再也不会爱它了 ...
- caj文件怎么转换成pdf格式?三步搞定
当我们需要查阅一些文献资料时,往往会遇到CAJ文件格式的问题.这种格式需要使用专业的阅读工具才能打开,让我们的阅读体验变得十分不便.为了解决这个问题,我们可以将CAJ文件转换成PDF文件格式.这样,无 ...
- pr cpu100%_打工度假签证拿PR三步搞定!高薪,稳定工作,分分钟成为人生赢家!...
国内苦苦工作多年的996上班族, 想要换个新环境,丰富人生经历? 完全可以! 顺利拿到打工度假签 来澳洲打工就结束了嘛? 这只是第一步! 合法高薪工作之余, 你还有机会移民澳洲! 符合以下条件的 打工 ...
- excel表中怎么插入visio_快速制作组织架构图,还在用Visio就out了,Excel简单三步搞定...
工作中相信绝大多数人都见过一种图表类型,那就是组织架构图.组织架构图经常用于企业内部部门结构.人员编制分工的展示.通过组织架构图,我们能够清晰的查看到各部门人员结构.业务等情况. 如上图所示,我们需要 ...
- NewBing国内成功申请操作教程(三步搞定)
前言 需要使用魔法,没有魔法的朋友请移步 操作 第一步:申请微软账号 打开魔法,挂日本节点 申请outlook邮箱,国家选择日本 使用该账户登录 第二步:登录账号,进入skype在线网站 进入www. ...
最新文章
- 吴恩达机器学习笔记31-梯度检验(Gradient Checking)
- Touch Event
- Matplotlib 中文用户指南 7.2 Python shell 中使用 Matplotlib
- wxWidgets:wxColour类用法
- 分类与监督学习,朴素贝叶斯分类算法
- Maven 项目创建 找不到web.xml
- C++中如何读取一个数的位数_求1000以内的水仙花数
- 如何用控制台启动一个wcf服务
- oppoR17手机计算机的隐藏功能,OPPO R17 Pro隐藏了很多你不知道的黑科技,让你高效使用手机...
- chrome浏览器安装和使用
- 使用java的姿势完善【年、月、周】个人工作量总结
- fso 拒绝访问_CTBS问题及解决.docx
- 压摆率//电源抑制比//共模抑制比//直流增益、带宽和相位裕度//静态功耗和直流工作点
- 基于QtGUI的宠物小精灵对战游戏设计
- Mac系统 - 升级node版本
- python求1到100偶数和_python 求1-100之间的奇数或者偶数之和的实例
- aliases节点分析
- 【渝粤题库】陕西师范大学292021 初级宏观经济学 作业(高起专)
- 讯飞语音转写php版demo
- 谷歌:科技让世界更美好