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

标签 c# .net excel oledb

有什么方法可以查询 excel 2010 电子表格,而无需使用 Jet 或导出为 CSV 并查询 csv 文件。

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

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

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

谢谢,

京东

最佳答案

是的 - 您可以使用 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)(如果他们在安装 Office 时尚未安装),可以从此处获取:

经验值: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>(在这种情况下,您的所有单元格都必须格式化为文本)或内存中的某些内容,然后您就不必再处理 Interop 及其 v.fast 了。从 C# 始终使用一种方法(一些文档错误地告诉您不能使用它们供内部使用的方法),例如: 范围.get_Values("A1") 而不是: 范围.单元格;

这里是一个不错的起点:http://dotnetperls.com/excel-interop

官方文档在这里:http://msdn.microsoft.com/en-us/library/bb726434(v=office.12).aspx , 但它包含大量的营销华夫饼,直到您进入 Interop 库部分,其中的部分已有十年历史。

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

关于c# - 在不使用 Jet OLE DB 的情况下使用 C# .NET 查询 Excel 电子表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4074215/

相关文章:

c# - 使用DataReader时,从性能角度看,执行SQL语句好还是存储过程好?

c# - 检索进程描述信息

c# - 在 C# 中访问静态方法

c# - 在不丢失格式的情况下将 HTML 导出到 Excel

excel - Excel 的工作日错误

c# - 从 Kinect 传感器数据计算 BPM

c# - ASP.NET C# EF - 选择后如何使整个对象受益?

c# - 如何在更改 SelectedIndex 时让 ComboBox.SelectedItem 绑定(bind)?

c# - ASP.NET 站点 - 在特定时间触发一些代码

vba - 为 Range 中的每个单元格创建新工作表并使用其值重命名