外部表格不是预期的格式

时间:2011-01-22 16:32:19

标签: asp.net excel oledb

我正在使用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,我现在遇到了这个疯狂的错误:

外部表格不是预期的格式

我现在已经敲了近一天了,但仍然无法理解为什么会这样!

2 个答案:

答案 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