这篇文章本来不在我计划之内,因为最近一个朋友微信上问到我这个问题,但我平时在SAP研究院工作中从没遇到过需要用ABAP操作Excel的需求,因此也没有太多技术实现细节可以分享给大家,只能泛泛写一些。用ABAP操作Excel这个需求算是比较常见,所以Jerry希望这篇文章能起到抛砖引玉的效果。在这个话题上有多年工作经验的朋友们,欢迎留言,指出Jerry文章中不足或者错误之处。在SAPGUI里根据关键字OLE搜索,能找到通过ABAP操作Excel的一种办法:

这段文档说的比较清楚,微软的Word和Excel等Office应用,提供了一种所谓automation的接口,暴露的公有类的方法和属性可以被其他应用消费。

作为ABAP应用开发人员,我们通过调用OLE对象的方法CALL METHOD, GET PROPERTY,SET PROPERTY等来访问微软Word和Excel的automation接口,代码看起来像这样:

上面这个函数RH_START_EXCEL_DATA_OLE调用微软Excel的automation接口,新建一个Excel workbook,然后准备把ABAP内表里的数据写到Excel里。你也许会问,我咋知道Excel里有哪些公有的类和方法可以被ABAP调用呢?在Excel里点击右键,选择View Code:

打开Microsoft Visual Basic Object Brower,所有可用的类和方法都列在这里了,上面ABAP代码第218行调用的workbook的open方法在列表里也能找到。

这个解决方案只在windows平台有效,并且需要运行SAPGUI的Presentation Server上安装有微软的Excel应用。我们采用OLE的方式操作Excel时,打开Windows操作系统的任务管理器,会发现一个以/automation -Embedding参数启动的Excel进程。

这里的-Embedding参数,来自OLE的全称:Object Linking and Embedding里的一部分,OLE是微软的一项非常古老的技术了。

微软和SAP两位大佬,Bill Gates和Hasso Plattner 1993年的照片:

关于OLE,Jerry知道的就只有这么一点了,在SAP研究院里如今我们还是会和微软的技术打交道,比如微软的Azure.

如果Jerry没记错的话, 微软Office从2007版本开始, 采用新的支持Office Open XML标准的格式来管理Excel和Word等文件。Jerry 2014年在SAP成都研究院CRM开发团队负责CRM Document Builder这个模块,当时编写过使用ABAP操作Word文档的代码。以Word为例,下图是我创建了一个最简单的Word文档,包含了一个Header区域,一个由三行彩色文字组成的段落,还有一张图片。

我们把这个Word文档的扩展名从.docx改成.zip, 然后双击,就可以用解压软件比如winrar打开。于是发现这一个最简单的按照Office Open XML协议实现的Word文档,实际上由如此多的xml和文件夹构成。

使用SAP标准的类CL_DOCX_DOCUMENT读取Word文件内容:

上述代码的简要说明:(1) 将word文档的二进制内容传入方法cl_docx_document=>load_document,得到一个文档对象引用,然后就可以借助该对象引用调用各种方法了。(2) word文档的创建者,创建时间,最后修改时间等信息都存储在所谓的“Core property part”内,可以通过方法lo_document->get_corepropertiespart获得"Core property part"的引用,再使用该引用调用方法get_data获得实际内容。下图是get_data返回的内容的一个例子,可以看出是xml格式。

(3) 现在我们准备读取Word文档的正文了。使用方法lo_document->get_maindocumentpart得到Word文档正文,文字的字体类型,颜色也包含在内。如下图所示:

(4) Word文档里插入的图片的二进制内容当然也是可以读取出来的。使用方法:lo_image_parts->get_part返回。Excel的例子我没有动手做过,不过原理类似,大家可以用开发包S_OOXML_CORE里的CL_XLSX_DOCUMENT来操作格式为xlsx的Excel文档。

除此之外,还有一个著名的开源项目,abap2xlsx, Jerry没有试过,感兴趣的朋友可以试试。https://github.com/sapmentors/abap2xlsx

最后,大家在SE24里使用关键字XSLX以及SE38里搜索_OLE,

可以从搜索列表里选一些点进去,参考SAP标准程序是如何操作Excel文档的。希望这些内容对大家有用,感谢阅读。

更多阅读

  • Jerry的ABAP, Java和JavaScript乱炖

  • ABAP开发人员未来应该学些什么

  • Jerry 2017年的五一小长假:8种经典排序算法的ABAP实现

  • Jerry的ABAP原创技术文章合集

  • 300行ABAP代码实现一个最简单的区块链原型

  • 使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数

  • 在SAP云平台的CloudFoundry环境下消费ABAP On-Premise OData服务

  • ABAP vs Java, 蛙泳 vs 自由泳

  • 聊聊C语言和ABAP

  • 动手使用ABAP Channel开发一些小工具,提升日常工作效率

  • 我用ABAP做过的那些无聊的事情

  • 不喜欢SAP GUI?那试试用Eclipse进行ABAP开发吧

  • 使用Visual Studio Code编写和激活ABAP代码

  • 你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧

  • 在SAP云平台ABAP编程环境上编写第一段ABAP程序

  • SAP官方发布的ABAP编程规范

  • ABAP Code Inspector那些隐藏的功能,您都知道吗?

  • 还在用ABAP进行SAP产品的二次开发?来了解下这种全新的二次开发理念吧

  • ABAP Netweaver体内的那些寄生式编程语言

  • 从SAP社区上的一篇博客开始,聊聊SAP产品命名背后的那份情怀

  • 云端的ABAP Restful服务开发

  • 如何在SAP云平台ABAP编程环境里把CDS view暴露成OData服务

  • 使用abapGit在ABAP On-Premises系统和SAP云平台ABAP环境之间进行代码传输

  • 30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用

  • Jerry带您了解Restful ABAP Programming模型系列之二:Action和Validation的实现

  • Jerry带您了解Restful ABAP Programming模型系列之三:云端ABAP应用调试

  • SAP云平台上的ABAP编程环境里如何消费第三方服务

  • ABAP开发者上云的时候到了 - 现在大家可以免费使用SAP云平台ABAP环境的试用版了

  • 学而不思则罔 - SAP云平台ABAP编程环境的由来和适用场景

  • SAP云平台里的三叉戟应用

  • 如何基于Restful ABAP Programming模型开发并部署一个支持增删改查的Fiori应用

  • SAP 2019 TechEd Key Note解读:云时代下SAP从业人员如何做二次开发?

  • 有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?

  • ABAP开发环境终于支持以驼峰命名法自动格式化ABAP变量名了

  • 利用ABAP 740的新关键字REDUCE完成一个实际工作任务

  • 一段让人瑟瑟发抖的ABAP代码

  • 昨日万圣节ABAP怪兽级代码谜团,公布答案啦

  • 介绍一种在ABAP内核态进行内表高效拷贝的方法

  • 使用SAP Cloud Application Programming模型开发OData的一个实际例子

  • 当ABAP遇见普罗米修斯

  • 使用ABAP绘制可伸缩矢量图

  • ABAP开发环境语法高亮的那些事儿

  • SAP错误消息调试之七种武器:让所有的错误消息都能被定位

officeopenxml excelpackage 需要安装excel嘛_使用ABAP操作Excel的几种方法相关推荐

  1. 提高excel生产力_设计师:提高生产力的7种方法

    随着对设计的需求每天都在增加,在那里争夺相同工作的设计师人数也越来越多. 仅仅成为一个优秀的设计师已经不够了 . 客户正在寻找不仅能超越他们的期望,而且能在创纪录的时间内做到这一点的设计师. 这是在更 ...

  2. ai中如何插入签名_技巧不求人167期 Excel如何打印到1页纸的2种方法 Excel如何插入手写签名...

    嗨,大家好,上期我们介绍了Excel如何制作漂亮的文件盒侧标签.今天我们继续分享,在日常excel编辑过程中,常常会遇到因为数列或者行数过多导致内容不全,根本就不能打印在一张纸上面,假如分开打印到两张 ...

  3. 使用ABAP操作Excel的几种方法

    这篇文章本来不在我计划之内,因为最近一个朋友微信上问到我这个问题,但我平时在SAP研究院工作中从没遇到过需要用ABAP操作Excel的需求,因此也没有太多技术实现细节可以分享给大家,只能泛泛写一些. ...

  4. html转word并保持格式不变,表格从Word转Excel想保持格式不变?用这两种方法,保你轻松搞定...

    相信在职场办公,大家或多或少都有遇见过这样的问题,需要把Word中的表格转移到Excel中,很多人第一时间就复制黏贴然后再重新调整格式,一两个表格还好说,如果是批量的你怕是要累死了. 表格从Word转 ...

  5. python中excel制作成绩报表_python制作简单excel统计报表2之操作excel的模块openpyxl简单用法...

    python制作简单excel统计报表2之操作excel的模块openpyxl简单用法 # coding=utf-8 from openpyxl import Workbook, load_workb ...

  6. 用函数统计各分数段人数c语言,如何使用Excel函数统计各分数段的人数(五种方法)...

    如何使用Excel函数统计各分数段的人数(五种方法),对老师很有用哦. Excel教程:妙用Excel五个函数统计学生期末考试分数段 考试结束,老师们都要对学生的考试成绩进行分析.各分数段人数的统计是 ...

  7. python替换excel指定内容_Python脚本操作Excel实现批量替换功能

    大家好,给大家分享下如何使用Python脚本操作Excel实现批量替换. 使用的工具 Openpyxl,一个处理excel的python库,处理excel,其实针对的就是WorkBook,Sheet, ...

  8. excel日历弄到html,Excel中进行添加日历控件的两种方法

    有时我们在运用Excel表格的时候会运用到日历的控件,可是小伙伴们却不知道在哪里添加.那么我们来看一下,它到底躲藏在哪里,又该怎么添加呢?今天,学习啦小编就教大家在Excel中进行添加日历控件的两种方 ...

  9. Apache POI和JXL(Java Excel)的基本使用——操作excel

    一.简介 开发中经常会涉及到excel的处理,如导出Excel,导入Excel到数据库中,操作Excel目前有两个框架,一个是apache 的poi, 另一个是 Java Excel Apache P ...

最新文章

  1. 134人!国家重点研发计划“生物大分子与微生物组”重点专项会评专家名单
  2. 再谈Windows Service - 一个简单的自我例子和部署
  3. 拿下两个世界第一,阿里人机对话模型成人工智能国际通用标准
  4. Java写入大字符串到oracle数据库_java程序如何提高oracle百万级数据的insert效率
  5. 如何为ASP.NET Core设置客户端IP白名单验证
  6. 吉麦新能源与联想签订战略合作协议,共同拥抱智能网联汽车升维时代
  7. onkeydown-onkeypress-onkeyup
  8. UltimateAndroid快速开发框架教程
  9. 微软商业智能与数据挖掘精英版培训大纲(2008-09-09)
  10. 通过eclipse对apk加密混淆的方法
  11. a标签下载pdf文件
  12. 《计算机网络》学习——第3章 数据链路层
  13. sudo 授权需谨慎,否则亲人两行泪!6 个超实用使用技巧
  14. Xunity.autotranslator机翻unity引擎的游戏
  15. 程序员最喜欢的4个编辑器!码农出品,必属精品!
  16. 计算机桌面自动调转什么原因,电脑壁纸自动改变的解决方法-电脑自学网
  17. Mybati从持久层到大气层
  18. AE基础教程(5)——第5章 时间,快照命令
  19. java系统随机生成数据方式,一个比较全面的java随机数据生成工具包
  20. 编码器Atom使用指南

热门文章

  1. logback配置(与log4j对比)
  2. Linux进入单用户模式(passwd root修改密码)
  3. ReactiveNative学习之Diff算法
  4. [Django]网页中利用ajax实现批量导入数据功能
  5. Qt ObjectModel (from Qt doc)
  6. tf dense layer两种创建方式的对比和numpy实现
  7. fscokopen php,详解PHP fsockopen的使用方法
  8. 中国工科计算机专业,中国最受欢迎的4个工科专业,第1名有些意外,第3名副其实...
  9. 二十七、深入==与equals的区别(下篇)
  10. 六十八、SpringBoot连接MongoDB操作