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

Dar*_*bio 7 .net c# oledb excel

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

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

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

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

谢谢,

JD

mar*_*mnl 12

是 - 您可以使用Excel.Interop - 通过在VS add reference对话框的.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 /下载/ EN/details.aspx?FAMILYID = 938fe8ad-583B-4bd7-a345-23250dc15855

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

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

熟悉:

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

对象.您可以将数据读入List <List <string >>(在这种情况下,您的所有单元格必须格式化为文本)或内存中的某些内容,然后您不再需要处理Interop并快速处理它.从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]开始!