我开始在一个C#应用程序中使用微软提供的Excel互操作组件。一切都进行得很顺利,但似乎缺乏强类型,而且说实话感觉就像在编写VBA代码。有没有其他的方式可以从C#与Excel进行交互,以获得更好的面向对象体验?顺便说一下,我正在使用VS2010和.NET 4.0。
我开始在一个C#应用程序中使用微软提供的Excel互操作组件。一切都进行得很顺利,但似乎缺乏强类型,而且说实话感觉就像在编写VBA代码。有没有其他的方式可以从C#与Excel进行交互,以获得更好的面向对象体验?顺便说一下,我正在使用VS2010和.NET 4.0。
根据您想要做的事情,比如生成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的答案。
NetOffice 库是 Office 主要互操作程序集 (PIA) 的替代品。NetOffice 提供了一个版本无关的互操作库集,因此您可以支持所有 Office 版本的应用程序,并包括 IntelliSense 来显示在哪些 Office 版本下可用哪些方法。
NetOffice 还有助于跟踪 COM 引用,这在 .NET / COM 互操作中有时可能会很麻烦。
在2020年,ClosedXML库似乎非常能够生成Excel文件。它基于Microsoft的开放式XML SDK(Open-XML-SDK)。它不需要在计算机/服务器上安装Excel即可运行。因此,显然您可以将其调整为在Web服务器上生成Excel文件。它具有一组非常好的对象,这些对象公开了相对容易的操作Excel文件的方法。
ExcelLibrary非常优秀。http://code.google.com/p/excellibrary/
OLE自动化是应用程序与Windows标准通信的方式,除了剪贴板之外。因为并非每种需要OLE的语言都具有泛型(甚至强静态类型),所以接口必须非常通用。
如果您拒绝使用OLE,您可以使用Windows脚本宿主来移动GUI本身并获取数据,或者使用WinAPI DLL进行屏幕抓取。您还可以基于XLS和XLSX文件的文档标准编写或轻松获取Excel文件的ETL。无论如何,我认为使用OLE的缺点都可以通过极端优势来缓解,即您不必尝试以任何其他方式与Excel交互。