如何在不安装MS Office和不使用Interop库的情况下读取服务器中的MS Office文件?

时间:2020-03-06 14:55:23  来源:igfitidea点击:

互操作库很慢,需要安装MS Office。
很多时候,我们不想在服务器上安装MS Office。

我想使用Apache POI,但是我在.NET上。

我只需要提取文件的文本部分,而无需在Office文件中创建或者"存储信息"。

我需要告诉我们,我有一个非常大的文档库,不能将其转换为较新的XML文件。

我不想为二进制文件编写解析器。
像Apache POI这样的库为我们做到了这一点。不幸的是,它仅适用于Java平台。也许我应该考虑用Java编写此应用程序。

我仍然没有找到.NET中POI的开源替代品,我想我将用Java编写自己的应用程序。

解决方案

我们需要如何处理这些文件?如果我们只想将它​​们流式传输给用户,则基本文件流就可以了。如果要创建新文件(可能基于模板)以发送给用户该用户可以在Office中打开,则有多种解决方法。

如果我们实际上是将数据保存在Office文档中供网站使用,那么我们做错了。 Office文档,甚至包括Excel电子表格和Access数据库,都不是与交互式网站一起使用的真正合适的选择。

如果文档为Word 2007格式,则可以使用system.io.packaging库以编程方式与其进行交互。

温迪

开发办公室。

我们可以针对它进行编程,让它为我们做很多事情,而无需花费金钱购买服务器许可证,或者在服务器上拥有与之相关的漏洞。

由于新的docx格式本质上是基于XML的文件,因此一旦知道结构,就可以使用标准XML DOM技术以编程方式创建和操作它们。

这些文件基本上是带有备用文件扩展名的zip存档。使用System.IO.Packaging名称空间访问文件的内部元素,然后将它们打开到XmlDocument中以执行操作。

有一些可用的示例,SourceForge上的Office Open XML项目可能值得一试。

至于旧的二进制格式,它们是MS专有的,并且我们可能从内部获取内容的唯一方法是通过Office对象模型(需要Office安装)或者第三方文件转换器/解析器。

不幸的是,没有第一方和.NET平台的本机可以处理这些文件。

对于所有MS Office版本:

  • 我们可以使用第三方组件,例如用于Word的TX文本控件和用于Excel的TMS Flexcel Studio

对于新Office(2007年):

  • 我们可以使用来自system.io.packaging的.net功能来做一些基本的事情。请参阅http://msdn.microsoft.com/en-us/library/bb332058.aspx

对于旧办公室(2007年之前):

  • 现在记录了旧的Office格式:http://www.microsoft.com/interop/docs/officebinaryformats.mspx。如果我们想做一些非常简单的事情,可以考虑尝试一下。但是请注意,这些格式非常复杂。

可以使用使该工作簿看起来像数据库表的ODBC驱动程序(或者是OLE DB驱动程序?不记得了)读取Microsoft Excel工作簿。但是我不知道没有Office Suite本身是否可以使用该驱动程序。

签出Aspose组件。它们旨在模仿Interop功能,而无需在服务器上完整安装Office。

我们可以使用OpenOffice。它具有命令行转换工具:

转换方式

简而言之,我们可以在OpenOffice中定义一个宏,然后通过命令行调用该宏
OpenOffice的参数。在该参数中,本地文件(Office文件)的名称为
编码。

这不是一个很好的解决方案,但应该可行。

在Java世界中,还有JExcelApi。从我所看到的内容来看,它写得很清楚,比POI更清晰。因此,也许即使将这些代码移植到.NET也不是没有问题,这当然取决于我们是否有足够的时间。