笔者 2019 年曾经写过一篇文章,介绍了 SAP ABAP 里对 Excel 文件进行读写操作的几种方式:使用 ABAP 操作 Excel 的几种方法。
概括起来无非就两种思路:基于 OLE (对象链接与嵌入) 与基于开源项目 abap2xlsx 两种。
基于 OLE 的 ABAP 代码操作 Excel 依赖于 Microsoft Excel 应用程序。通过调用 COM 对象(Component Object Model),ABAP 能够控制 Excel,实现对 Excel 文件的读写操作。这要求客户端计算机上安装有 Microsoft Excel。
当使用类似下图这种 ABAP 代码操作 Excel 时:
此时查看操作系统的进程列表,会发现后台悄悄起了一个 Excel.exe 进程,参数为 /automation -Embedding. 这个参数表明 Excel 正在以一种特殊模式运行,用于支持 OLE 自动化和嵌入功能。这种模式允许其他应用程序通过编程方式控制 Excel,比如本例的 ABAP 语言,而不需要用户直接与 Excel 的图形用户界面交互。
/automation
参数指示 Excel 以自动化模式启动。这意味着 Excel 将不显示其图形用户界面,而是在后台运行,等待来自 ABAP 应用程序的命令。这对于需要从其他应用程序自动读取或写入 Excel 文件的场景特别有用。
-Embedding
参数则与 OLE(Object Linking and Embedding)技术的嵌入功能有关。当 Excel 程序以此参数运行时,它作为一个服务器,可以处理来自客户端应用程序的嵌入请求。这些嵌入的对象请求将保留 Excel 的功能,如公式计算和数据分析。
通过编程方式控制以 /automation -Embedding
模式运行的 Excel,应用程序可以使用第三方编程语言,创建、填充并格式化 Excel 工作簿,无需用户手动操作。
abap2xlsx 是一个开源项目,允许 SAP 系统通过纯 ABAP 代码生成、读取、转换和修改 Excel 文件(.xlsx 格式)。这个项目基于 Microsoft Open XML 标准,不依赖于 Microsoft Office 被安装在服务器上或客户端计算机上。
什么是 Microsoft Open XML 标准呢?这是一种基于 XML 和 ZIP 压缩技术的电子文档格式,由 Microsoft 开发。它旨在用于电子文档的创建、编辑、管理和分享,如文字处理文档、电子表格和演示文稿等。OOXML 作为一种开放标准,被国际标准化组织(ISO)和国际电工委员会(IEC)在 2008 年共同批准为 ISO/IEC 29500 标准。
OOXML 设计之初,就考虑到了兼容性和前向兼容的重要性。这意味着它不仅支持 Microsoft Office 系列软件的现有功能,还能够容纳未来可能的扩展。这种格式允许保存文档时,既能够保持其视觉外观,也保留了编辑和结构属性,从而使文档能够在不同的软件和操作系统间轻松共享和重用。
OOXML 标准由一系列 XML 架构定义组成,它们定义了文档的结构和内容。这些 XML 文件被存储在一个 ZIP 压缩包里,以减小文件大小,便于网络传输和存储。一个典型的 OOXML 文档,如 .docx
、.xlsx
或 .pptx
文件,实际上是一个压缩包,内含多个 XML 文档和其他资源(如图像)。
我们任意新建一个 Excel 文件,比如 1.xlsx, 然后重命名为 1.zip, 用解压软件打开,就能看到这些 XML 文件了。
二者技术比较
以下是这两种技术各个维度的比较。
软件依赖性:abap2xlsx 不依赖于 Microsoft Excel 的安装。这意味着无论 SAP 服务器还是客户端是否安装了 Excel,abap2xlsx 都能稳定运行。这一点对于服务器端批量处理 Excel 文件尤为重要。
ABAP OLE 技术方案,要求客户端计算机上必须安装有 Microsoft Excel。
性能和稳定性:abap2xlsx 通过直接操作 Excel 文件的 XML 结构,避免了启动外部应用程序的开销,因此在处理大量数据时通常表现出更好的性能和稳定性。
ABAP OLE 则涉及到 COM 对象调用,在处理数据规模较高的大型文件时,会遇到 Excel 应用程序的性能瓶颈。
功能和兼容性:abap2xlsx 支持创建和处理现代的 .xlsx 格式文件,包括但不限于单元格格式化、公式、图表等复杂功能。由于它基于 Open XML 标准,理论上它支持的 Excel 功能应该与 Microsoft Office 的更新保持同步。
ABAP OLE 能够利用 Excel 应用程序的全部功能,包括那些可能还未在 Open XML 标准中完全支持的特性。然而,这也意味着它的功能受限于安装在客户端的 Excel 版本。
安全性:abap2xlsx 作为服务器端解决方案,不需要在用户机器上执行任何外部程序,从而降低了安全风险。
ABAP OLE 的方法执行时,可能会遇到宏安全提示或其他安全限制,特别是在严格限制自动化脚本执行的企业环境中。
使用场景:abap2xlsx 适合服务器端批量处理 Excel 文件的场景,例如自动化报表生成、数据导出等,尤其是当这些操作需要在没有用户干预的情况下执行时。
ABAP OLE 更适合那些需要在客户端进行且可以利用 Excel 全部功能的场景,比如需要用户实时交互的复杂报表生成。
希望以上的比较,能够帮助大家在实际工作中,根据实际情况进行合适的技术选型。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。