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

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

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

这个线程build议使用32位代理机器,但这也不是一个选项。

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

谢谢,

JD

是的 – 您可以使用Excel.Interop – 通过在VS添加引用对话框的.Net选项卡中添加对Microsoft.Office.Interop.Excel(版本13我认为对于Excel 2010)的引用从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个不同版本的帮助文件。 我build议:

熟悉:

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

对象。 你可以将数据读入一个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 ,但它包含一个市场华夫饼的负载,直到你到达互操作库部分已经十年了。

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

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

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

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

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

这是另一个第三方软件包,这个软件包由同事build议给我: Aspose Excel Spreadsheet Components

看起来这样可以减轻互操作的需要,并且不得不安装Office PIA。

虽然没有价格,所以可能不便宜。