使用C#打开一个Excel 2003电子表格时出现“找不到可安装的ISAM”异常。

8
我需要从xls文件中提取数据,同时用户也需要能够更改文件的位置。因此,OleDbConnection似乎是一个不错的起点,直到第一个合并单元格出现。
这适用于除合并单元格外的所有内容:
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data 
Source=F:\test.xls;Extended Properties=Excel 8.0;");
cmd.CommandText = "SELECT * FROM [Sheet$]";
cmd.Connection.Open();

我发现这应该允许访问合并单元格:
OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\test.xls;Extended Properties=Excel 8.0;HDR=Yes;IMEX=1;");

但是在cmd.conn.open()上出现了“找不到可安装的ISAM”异常。

我遵循了这里的建议: http://support.microsoft.com/kb/209805

以及这里: 错误:“找不到可安装的ISAM”

没有运气。

我愿意尝试其他从xls中提取数据的方法。或者,如果有一个命令可以运行在xls上以删除合并单元格,那可能会起作用。

4个回答

14

我认为这只是因为如果你有多个扩展属性,你必须用引号将它们括起来。

OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\test.xls;
Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';");

或者单引号不起作用(你明白我的意思)

OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\test.xls;
Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1;"";");

虽然您的示例没有显示,但这个错误也可能是由于文件路径中有空格引起的。如果是这样的情况,您需要将文件路径也用引号括起来。

OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""F:\test.xls"";...

谁想出了这个可怕的语法? - configurator
我不得不稍微修改一下: OleDbConnection(@“Provider = Microsoft.Jet.OLEDB.4.0; Data Source = F:\ test.xls; Extended Properties ='Excel 8.0; HDR = NO; IMEX = 1'”); - NitroxDM

2
假设您的系统要求包括安装Excel,则可以使用Excel对象库。
Excel.Sheets sheets = m_Excel.Worksheets;
Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(1);
Excel.Range range = worksheet.get_Range("A1", "E1".ToString());

等等,还有 VSTO


1

试一试

我也遇到过这个问题,只是因为引号的缘故

string sConnection = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sFilePath + ";" + "Extended Properties='Excel 8.0;HDR=YES;'";

-1

SpreadsheetGear for .NET 是一个专为 .NET 设计的免版税电子表格组件,可在 32 位和 64 位 .NET 上执行您所需的所有操作,而不依赖于 Excel(或任何其他除 .NET 2.0+ 之外的东西)。

如果您想自己尝试,可以在此处查看实时 ASP.NET 示例 here 并下载免费试用版 here

声明:我拥有 SpreadsheetGear LLC


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接