我正在使用Visual Web Developper 2010 Express在Windows 7企业版(x64)上开发Web应用程序(C#)。在那个从Excel文件中读取信息的项目如下:
protected void Page_Load(object sender, EventArgs e)
{
string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\1.xlsx;Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";
OleDbConnection oleDbConn = new OleDbConnection(connString);
try
{
oleDbConn.Open();
OleDbCommand oleDbComm = new OleDbCommand("SELECT * FROM [Sheet1$]", oleDbConn);
OleDbDataAdapter oleDbDtAdapter = new OleDbDataAdapter();
oleDbDtAdapter.SelectCommand = oleDbComm;
oleDbConn.Close();
}
catch (Exception evt)
{
Response.Write("ERRO: " + evt.Message.ToString());
}
}
在开发PC上,一切正常,我可以打开XLS和XLSX文件。
现在,将此简单代码传递给具有Windows Server 2003 R2标准版X64版(SP2)的部署服务器,我必须安装Access Database Engine 2007(仅适用于x86),因为服务器上没有Office 2007,所以之后安装,并将这个简单的代码部署到服务器我得到IErrorInfo.GetDescription失败,并出现E_FAIL(0x80004005)错误。
更多的搜索,我发现有一个Access数据库引擎2010,这次是针对bot x86和x64架构,所以我认为duuhhh现在是gona的工作。
安装Access Database Engine 2010后,我能够访问XLS文件但是对于XLSX,我现在遇到了这个疯狂的错误:
外部表格不是预期的格式
我现在已经敲了近一天了,但仍然无法理解为什么会这样!
答案 0 :(得分:1)
我通过安装Microsoft Office Access Runtime和Data Connectivity 2007 Service Pack 2(SP2)修复了“外部表格未达到预期格式”错误
答案 1 :(得分:0)
我在本地电脑上遇到同样的问题(使用ACE.OLEDB),解决这个问题的是这个链接:
http://support.microsoft.com/kb/2459087
它的要点是安装多个办公室版本和各种办公室sdk,程序集等导致注册表中的ACEOleDB.dll引用指向OFFICE12文件夹而不是OFFICE14
C:\ Program Files \ Common Files \ Microsoft Shared \ OFFICE14 \ ACEOLEDB.DLL
从链接:
或者,您可以修改注册表项,更改dll路径以匹配Access版本的路径。
Access 2007应使用OFFICE12,Access 2010 - OFFICE14和Access 2013年 - OFFICE15
(OS:64bit Office:64bit)或(OS:32bit Office:32bit)
密钥:HKCR \ CLSID {3BE786A0-0366-4F5C-9434-25CF162E475E} \ InprocServer32 \
值名称:(默认)
值数据:C:\ Program Files \ Common Files \ Microsoft 共享\ OFFICE14 \ ACEOLEDB.DLL
(操作系统:64位办公室:32位)
键: HKCR \ Wow6432Node \ CLSID {3BE786A0-0366-4F5C-9434-25CF162E475E} \ InprocServer32的\
值名称:(默认)
值数据:C:\ Program Files(x86)\ Common Files \ Microsoft 共享\ OFFICE14 \ ACEOLEDB.DLL