Excel Interop替代方案

9

我开始在一个C#应用程序中使用微软提供的Excel互操作组件。一切都进行得很顺利,但似乎缺乏强类型,而且说实话感觉就像在编写VBA代码。有没有其他的方式可以从C#与Excel进行交互,以获得更好的面向对象体验?顺便说一下,我正在使用VS2010和.NET 4.0。


你的主要问题是什么?是因为遇到了很多动态类型而无法使用智能感知,还是由于Office对象模型被设计得非常通用? - Eddy
我认为你的意思是“强类型”而不是“字符串类型”。 - Davy8
7个回答

10

1

根据您想要做的事情,比如生成XLSX文档,您可以使用Open XML SDK

这是一个很好的生成办公文档的工具;特别是因为它不需要安装Office就可以使用。

它是免费的;有一个漂亮干净的API,并得到了微软的支持。例如:

public static void CreateNewWordDocument(string document)
{
    using (WordprocessingDocument wordDoc = WordprocessingDocument.Create(document, WordprocessingDocumentType.Document))
    {
        // Set the content of the document so that Word can open it.
        MainDocumentPart mainPart = wordDoc.AddMainDocumentPart();

        SetMainDocumentContent(mainPart);
    }
}

示例来自:http://msdn.microsoft.com/en-us/library/bb497758.aspx。这里有处理电子表格的示例

如果您想直接与Excel交互(如UI自动化),而不是生成文档,则我会采用KeithS的答案。


1

NetOffice 库是 Office 主要互操作程序集 (PIA) 的替代品。NetOffice 提供了一个版本无关的互操作库集,因此您可以支持所有 Office 版本的应用程序,并包括 IntelliSense 来显示在哪些 Office 版本下可用哪些方法。

NetOffice 还有助于跟踪 COM 引用,这在 .NET / COM 互操作中有时可能会很麻烦。


0

在2020年,ClosedXML库似乎非常能够生成Excel文件。它基于Microsoft的开放式XML SDK(Open-XML-SDK)。它不需要在计算机/服务器上安装Excel即可运行。因此,显然您可以将其调整为在Web服务器上生成Excel文件。它具有一组非常好的对象,这些对象公开了相对容易的操作Excel文件的方法。


0
你需要什么类型的交互?只是写入?读取?还是对所有方面都有完全控制?
有很多第三方库可以操作Excel文档,特别是如果你使用xlsx格式(2007或更新版本)。如果你只是简单地将东西写出来,甚至可以查看一些开源实现(例如Sourceforge上的Excel Writer)。

0

1
请注意,这是Office 2007之前的版本,不支持新的文件格式。 - Fosco

-2

OLE自动化是应用程序与Windows标准通信的方式,除了剪贴板之外。因为并非每种需要OLE的语言都具有泛型(甚至强静态类型),所以接口必须非常通用。

如果您拒绝使用OLE,您可以使用Windows脚本宿主来移动GUI本身并获取数据,或者使用WinAPI DLL进行屏幕抓取。您还可以基于XLS和XLSX文件的文档标准编写或轻松获取Excel文件的ETL。无论如何,我认为使用OLE的缺点都可以通过极端优势来缓解,即您不必尝试以任何其他方式与Excel交互。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接