一、运行环境
win7 64位系统
office 2007,只有32位
vs2010
C# 使用OLEDB读取excel
二、相关代码及错误现象
// 默认读取.xls文件
string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + fileName + ";" + "Extended Properties='Excel 8.0;HDR=no;IMEX=1'";
if (strExtensionName == ".xlsx") // 读取.xlsx文件
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";" + "Extended Properties=\"Excel 12.0;HDR=no;IMEX=1;\"";
OleDbConnection conn = null;
try
{
conn = new OleDbConnection(strConn);
conn.Open();
}
运行到conn.Open()时,系统报错:“vshost32.exe已停止工作”
三、解决方法
经多方查找定位,发现64位系统加office2007有此问题。
下载并安装AccessDatabaseEngine2010 32位版,此问题解决。
Microsoft Access Database Engine, 缩写叫MS ACE, 这个组件分别发行了32位版与64位版,完整地支持目前所有的excel文件格式,当然还有所有的access文件格式,包括office 2007之前的旧版文件格式,用这个组件里的oledb provider也能一样能打开。
MS ACE 下载地址: http://www.microsoft.com/en-us/download/details.aspx?id=13255
在win7 64位系统中,使用C#的OLEDB连接打开.xlsx文件时遇到错误。问题出在64位系统与32位Office 2007的不兼容。通过安装32位版的AccessDatabaseEngine2010解决了该问题,允许程序成功连接并读取Excel 2007及更高版本的文件。
1961

被折叠的 条评论
为什么被折叠?



