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一个 cotes 之间,但它在我的情况下不起作用。

4

2 回答 2

18

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

对于 .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 的更改以及末尾添加的分号)

于 2013-07-25T22:05:35.207 回答
1

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

于 2013-07-25T15:08:15.127 回答