我正在开发一个能够将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之间,但在我的情况下它不起作用。
答案 0 :(得分:15)
两个连接字符串都是错误的。
对于.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的不同连接字符串文件 - 请参阅here)
对于.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的更改以及最后添加分号)
答案 1 :(得分:1)
平台起着重要作用:如果您的代码以64位编译并且您安装了Office 32位(这意味着所有ODBC,ISAM等驱动程序都是32位)。尝试使用“Any CPU”平台进行编译