2011-01-22 6 views
0

Я разрабатываю веб-приложение (C#) на Windows 7 Enterprise (x64) с Office 2007 с помощью Visual Web Developper 2010 Express. В этом проекте, который считывает информацию из файлов 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()); 
     } 
    } 

На развитие ПК все работает как надо, и я могу открыть как XLS и XLSX файлов.

Теперь, передав этот простой код моему серверу развертывания с Windows Server 2003 R2 Standard X64 Edition (SP2), мне пришлось установить Access Database Engine 2007 (только для x86), поскольку на сервере не было Office 2007, поэтому после установки и развертывания этого простого кода на сервере, я получил IErrorInfo.GetDescription с ошибкой E_FAIL (0x80004005).

Еще несколько поисков, и я узнал, что есть база данных Access Database Engine 2010, на этот раз для архитектуры bot x86 и x64, поэтому я подумал, что duuhhh теперь это работа gona.

После установки базы данных Access Engine 2010 вуаля я был в состоянии получить доступ к файлу XLS, но для XLSX я теперь получаю эту безумную ошибку:

Внешняя таблица не в ожидаемом формате

Я был ударяя голову почти на целый день, но все еще не могу понять, почему это происходит!

+0

Пожалуйста, не забывайте использовать кнопку коды {} Это делает жизнь каждую более приятной. – Fionnuala

ответ

0

У меня была такая же проблема на локальном компьютере (при использовании ACE.OLEDB) и то, что решить это для меня была эта ссылка:

http://support.microsoft.com/kb/2459087

суть его в том, что установка нескольких версий офисных и различных офисных SDK, сборки, и т.д. привели к опорному ACEOleDB.dll в реестре, указывая на папку OFFICE12 вместо OFFICE14 в

C:\Program Files\Common Files\Microsoft Shared\OFFICE14\ACEOLEDB.DLL

Из ссылки:

Alternatively, you can modify the registry key changing the dll path to match that of your Access version.

Access 2007 should use OFFICE12, Access 2010 - OFFICE14 and Access 2013 - OFFICE15

(OS: 64bit Office: 64bit) or (OS: 32bit Office: 32bit)

Key: HKCR\CLSID{3BE786A0-0366-4F5C-9434-25CF162E475E}\InprocServer32\

Value Name: (Default)

Value Data: C:\Program Files\Common Files\Microsoft Shared\OFFICE14\ACEOLEDB.DLL

(OS: 64bit Office: 32bit)

Key: HKCR\Wow6432Node\CLSID{3BE786A0-0366-4F5C-9434-25CF162E475E}\InprocServer32\

Value Name: (Default)

Value Data: C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE14\ACEOLEDB.DLL

1

Я констатировала «Внешняя таблица не в ожидаемом формате» ошибка при установке Microsoft Office Access Runtime и возможности подключения данных 2007 с пакетом обновления 2 (SP2)

Смежные вопросы