在不使用Jet OLE DB的情况下使用C#.NET查询Excel电子表格

在不使用Jet OLE DB的情况下使用C#.NET查询Excel电子表格,c#,.net,excel,oledb,C#,.net,Excel,Oledb,是否有任何方法可以查询excel 2010电子表格,而无需使用Jet或作为CSV导出并查询CSV文件 我不能使用Jet的原因是,应用程序需要在Windows Server 2008 R2上作为web服务运行,没有32位支持,因此Jet无法工作。这是给定的,因为目标服务器上没有安装WOW64 建议使用32位代理计算机,但这也不是一个选项 进一步信息:服务器正在运行Sharepoint 2010 谢谢 JD是-您可以使用Excel.Interop-通过在VS添加引用对话框的.Net选项卡中添加对Mi

是否有任何方法可以查询excel 2010电子表格,而无需使用Jet或作为CSV导出并查询CSV文件

我不能使用Jet的原因是,应用程序需要在Windows Server 2008 R2上作为web服务运行,没有32位支持,因此Jet无法工作。这是给定的,因为目标服务器上没有安装WOW64

建议使用32位代理计算机,但这也不是一个选项

进一步信息:服务器正在运行Sharepoint 2010

谢谢


JD

是-您可以使用Excel.Interop-通过在VS添加引用对话框的.Net选项卡中添加对Microsoft.Office.Interop.Excel(我认为适用于Excel 2010的版本13)的引用,从C#程序中引用它

仅供参考:使用Interop:在服务器上运行守护程序不是一个好主意,但是如果它是一个短时间运行的程序,由用户运行,并且您对其进行监视,则应该可以

如果您希望您的客户端运行该程序,他们需要安装主互操作程序集(PIA),如果他们在安装office时还没有安装主互操作程序集,可以从以下位置获取:

XP:
2003年:
2007年:
2010年:

我一直在我的x64 Vista机器上使用Office11,所以我认为x64不会带来任何问题

请注意,文档太糟糕了!有大约10个不同版本的帮助文档。我建议:

熟悉以下内容:

  • 应用
  • 工作手册
  • 工作表
  • 射程
对象。您可以将数据读入列表(在这种情况下,所有单元格都必须格式化为文本)或内存中的某些内容,这样您就不必再处理互操作及其v。快走。从C#开始,始终使用一种方法(一些文档错误地告诉您不能使用这些方法供内部使用),例如: 范围。获取_值(“A1”) 与之相反: 范围。细胞

一个好的起点是:

官方文档在这里:,但它包含了大量的市场营销华夫饼干,直到你找到互操作库,其中的部分已经有十年的历史了


注意:Excel索引是基于1的,即返回的2D数组中的第一个元素从my2DArray[1,1]开始

以及Excel.Interop,您可以使用ADO.Net来使用ACE引擎而不是旧的JET引擎吗?ACE由Excel/Access 2007引入,旨在取代JET。

这里是另一个第三方软件包,一位同事刚刚向我建议:

看起来这将减少对互操作的需要,并且必须安装Office PIA


但是没有价格,所以可能不便宜。

我也面临着这个问题。我的情况:需要在Windows7x64和x86上运行的非普通客户端应用程序。需要从Excel电子表格中提取数据;不需要灵活性和最小的“用户痛苦”。ACEDB(accessdatabaseengineredist.)没有这样做,因为显然,在已经安装x86(32位)Office的情况下,无法安装它的x64版本。PIA不是一个选项——“最小化用户痛苦”

我使用了这个图书馆:


它附带了大量的示例,我能够将应用程序构建到“任何CPU”,而不是限制到x86,这导致了我们尝试使用的其他第三方DLL出现问题。我在大约10分钟内就开始使用NPOI,所以我可以肯定地推荐它。

这就是我要建议的。64位可能会造成一两条皱纹,但它应该能工作。太棒了!唯一的问题是,这需要在服务器上安装一个Office 2010的副本,这并不理想,但我相信它会工作的。谢谢。我想,不管你做什么决定,你至少需要一些Office组件。@JD:你可以直接安装PIA而不是Office,把它们拿到这里:@Mrk:我有点怀疑。PIA只是在您的程序和Excel之间传递消息,实际上它本身并不处理任何行为。如果没有Excel可将请求传递到,则不会加载文件,也不会返回数据。您不能将Excel电子表格导入“真实”数据库吗?由于您正在编写一个web服务,如果将数据源保持为excel文件,您可能会在并发性方面遇到一些问题。。。然后,您可以安排一个作业来不时更新sql server表。否。业务要求将信息存储在excel文件中。不是我的选择…我不知道有可能不安装WOW64-以我的经验,任何32位程序都运行在64位机器上-可能WOW64在那里,但你甚至没有注意到它。Mrk Mnl:默认情况下,它不再安装在Server 2008 R2 Server core中。我明白了(必须补齐min chars)我认为正版Microsoft组件会更可靠,而且不应该存在成本问题,因为它已经是基于Microsoft的服务器-即。这不像是Linux box强制使用第三方组件。如上所述,它需要在服务器上安装Office 2010,因此,使用互操作方法存在成本问题(因为您需要Microsoft许可证才能使用Office)。其次,我建议的包是一个占用空间小的DLL,它更适合于可能不可能/不希望安装Office 2010的服务器环境。