使用C#.NET查询Excel电子表格,而不使用Jet OLE DB

时间:2010-11-02 00:45:52

标签: c# .net excel oledb

有没有办法查询excel 2010电子表格,而不使用Jet或导出为CSV并查询csv文件。

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

This thread建议使用32位代理计算机,但这也不是一种选择。

更多信息:服务器正在运行Sharepoint 2010。

谢谢,

JD

4 个答案:

答案 0 :(得分:12)

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

仅供参考:使用Interop:http://support.microsoft.com/default.aspx?scid=kb;EN-US;q257757#kb2在服务器上运行守护进程不是一个好主意,但如果它是一个运行时很短的程序,由用户运行并监视它,应该没问题。

如果您希望您的客户运行该程序,他们将需要安装主互操作程序集(PIA),如果他们在安装办公室时尚未安装,可以到这里:

XP:http://www.microsoft.com/downloads/en/details.aspx?FamilyID=C41BD61E-3060-4F71-A6B4-01FEBA508E52
2003:http://www.microsoft.com/downloads/en/details.aspx?FamilyID=3C9A983A-AC14-4125-8BA0-D36D67E0F4AD
2007年:http://www.microsoft.com/downloads/en/details.aspx?FamilyID=59DAEBAA-BED4-4282-A28C-B864D8BFA513
2010:http://www.microsoft.com/downloads/en/details.aspx?FamilyID=938fe8ad-583b-4bd7-a345-23250dc15855

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

请注意文档很糟糕!有大约10个不同版本的帮助,文档在那里。我推荐:

熟悉:

  • 应用
  • 工作簿
  • 工作表
  • 范围

对象。您可以将数据读入List< List< string>> (在这种情况下,你的所有单元格都必须格式化为文本)或内存中的某些东西,然后你就不必再处理Interop了,而且它的v。从C#总是使用一种方法(一些文档错误地告诉你,你不能使用它们供内部使用的方法),例如:     Range.get_Values( “A1”) 而不是:     Range.Cells;

一个好的起点是:http://dotnetperls.com/excel-interop

官方文档在这里:http://msdn.microsoft.com/en-us/library/bb726434(v=office.12).aspx,但它包含一大堆营销华夫饼干,直到你到达Interop库的部分已有十年之久。

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

答案 1 :(得分:4)

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

答案 2 :(得分:4)

我也面对这个。我的情况:需要在Windows 7 x64和x86上运行的非平凡客户端应用程序。需要从Excel电子表格中提取数据;没有灵活性和最小的“用户痛苦”。 ACEDB(Access数据库引擎redist。)没有这样做,因为在安装x86(32位)Office时显然无法安装x64版本。 PIA不是一个选择 - “最小的用户痛苦”。

我使用了这个库:http://npoi.codeplex.com

它附带了大量的示例,我能够将应用程序构建到“任何CPU”而不是约束到x86,这导致了我们试图使用的其他一些第三方dll的问题。我在大约10分钟内启动并运行NPOI,所以我绝对可以推荐它。

答案 3 :(得分:1)

这是另一个第三方包,刚刚由同事向我建议: Aspose Excel Spreadsheet Components

看起来这样可以减少互操作的需要,并且必须安装Office PIA。

虽然没有价格,但可能并不便宜。