我正在尝试使用64位进程读取Excel电子表格。因此,我使用64位版本的Micorosft Access Database Engine 2010。
以下代码
var cs = @"Provider=Microsoft.ACE.OLEDB.12.0;"
+ @"Data Source=C:\test.xls;"
+ @"Extended Properties=""Excel 14.0;""");
con = new OleDbConnection(cs);
con.Open();
抛出异常:
无法找到可安装的ISAM
使用谷歌我发现了很多关于此例外的问题。但他们提到JET似乎不适用于我的问题。
有什么建议吗?
答案 0 :(得分:1)
我今天遇到了同样的问题。我的配置是:
我遇到了完全相同的问题:无法找到可安装的ISAM例外。我遇到this article之后解决了这个问题,它说明组件的MS网站文档存在错误。我不确定组件的文档是否不准确,我可以说是将扩展属性更改为 Excel 12.0 Xml 解决了这个问题。
答案 1 :(得分:1)
我遇到了完全相同的问题,试图从Excel 2007 .xlsx文件中获取数据。
通常可靠的“Microsoft.ACE.OLEDB.12.0”驱动程序只是拒绝连接,抛出了你一直看到的“找不到可安装的ISAM ”错误。
最终,我找到了这个代码,它起作用了:
SELECT * FROM OPENROWSET('MSDASQL',
'DRIVER=Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb);
DBQ=D:\Sample.xlsx', 'SELECT * FROM [Sheet1$]')
希望这有帮助!
(改编自此帖子中的最终帖子:SQLTeam.com)
不久之后......
现在,突然,我的原始连接字符串 正常工作。这是早先失败的(在我使用上面的MSDASQL字符串成功连接之前),但现在可以成功运行。
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;Database=D:\Sample.xlsx;HDR=NO;IMEX=1',
'SELECT * FROM [Sheet1$]')
奇怪,很奇怪。
答案 2 :(得分:1)
在我的连接字符串中添加引号后,ISAM错误消失了(下面的代码)。
string GetConnectionString(string fileName)
{
return "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=\"Excel 12.0;HDR=YES;\"";
}
答案 3 :(得分:1)
我发现使用excel和工具安装2013办公室并保持先前版本不变。然后进行自定义安装...然后打开2013 excel一次然后关闭它。然后转到控制面板并添加从2013年删除excel的删除功能。然后打开2010 excel并让它快速刷新自己安装,然后它可以正常工作。
答案 4 :(得分:0)
指向" This Article"的链接是正确的,但是将单引号更改为双引号。我使用OpenFileDialog获取任何excel文件。 (我使用Excel 2013进行测试)
=>帖子中的原始格式< =
//较新的版本,任何xls文件
" Provider = Microsoft.ACE.OLEDB.12.0; Data Source ='C:\ AlmostAnyExcelVersionFileRunningUnder64BitOS.xls';扩展属性='Excel 12.0; HDR = NO; IMEX = 1;';"
=>更正格式< =
XLConnection =" Provider = Microsoft.ACE.OLEDB.12.0; Data Source =" &安培; Chr(34)& ExceilFileDialog.FileName& Chr(34)& &#34 ;;扩展属性=" &安培; Chr(34)& " Excel 12.0; HDR = NO; IMEX = 1;" &安培; Chr(34)& &#34 ;;"