C#错误:“找不到可安装的ISAM”,将Excel文件转换为.CSV文件时。

5

我正在开发一个项目,能够将Excel文件转换为.CSV文件。我认为我的C#代码存在一些问题,导致出现错误信息“找不到可安装的ISAM”,请帮我解决这个问题。

代码:

if (dlgOne.FileName.EndsWith(".xlsx"))
{
    StrConn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + srcFile + ";Extended Properties=\"Excel 12.0;\"";
}

if (dlgTwo.FileName.EndsWith(".xls"))
{
    StrConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + srcFile + ";Extended Properties=\"Excel 1.0;HDR=Yes;IMEX=1\"";
}

OleDbConnection conn = null;

conn = new OleDbConnection(StrConn);
conn.Open();  <------------ throw exception

在调试模式下,应用程序会抛出一个异常(行:conn.Open();)。 我在网上搜索并发现我必须将Data Source放在引号中,但在我的情况下无效。

2个回答

19

两个连接字符串都是错误的。

对于 .xlsx 文件,应该是:

StrConn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + srcFile + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";";

注意额外的Xml部分,HDR=YES表示您的文件具有标题,IMEX=1表示将所有数据视为文本,并重新定位的分号。对于.xlsm和.xlsb文件,您需要不同的连接字符串-请参见此处

对于.xls文件,应该是:

StrConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + srcFile + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";";

(注意从Excel 1.0到Excel 8.0的变化以及在末尾添加了一个分号)

谢谢@barrowc,你是那些让生活更美好的人之一。 - user1863359
(注意从Excel 1.0到Excel 8.0的更改以及末尾分号的添加),我不明白那是什么意思...但我注意到在我的生成文件中有一个额外的列,我该如何删除它? - user1863359
我注意到在我的生成文件中有一个额外的列,我该如何删除它? - user1863359
你需要展示生成CSV文件的代码,才能看出为什么会出现额外的列。这可能应该是一个新问题。 - barrowc
你在上一条回复中提到将会增加一列(请注意从Excel 1.0到Excel 8.0的更改以及在末尾添加分号)。 - user1863359
显示剩余2条评论

1

平台起着重要作用:如果您的代码编译为64位,并且您安装了32位的Office(这意味着所有ODBC,ISAM等驱动程序都是32位的)。请尝试使用“任何CPU”平台进行编译。


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