用C#打开Excel 2003电子表格。 找不到可安装的ISAM。 例外

我需要从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;"); 

但是,我得到一个无法find可安装的ISAM例外cmd.conn.open();

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

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

没有运气。

我打开其他方式从xls拉数据。 或者,即使有一个命令,我可以在xls上运行,以删除可能工作的镜像单元格。

我想这只是因为如果你有多个扩展属性,你必须把扩展属性放在引号中

 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;"";"); 

虽然你的例子没有显示,但是这个错误也可能是由文件path中的空格造成的。 在这种情况下,您需要将文件path换成引号。

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

假设您的系统要求包括安装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

尝试这个

我有这个问题。 只是因为报价

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

用于.NET的SpreadsheetGear是一个免版税的电子表格组件,可以为32位和64位.NET做任何事情,而不依赖于Excel(或者除.NET 2.0以外的其他任何东西)。

你可以在这里看到活的ASP.NET示例,如果你想自己试试,可以在这里下载免费试用版。

免责声明:我自己的SpreadsheetGear LLC