Внешняя таблица не в ожидаемом формате - PullRequest
0 голосов
/ 22 января 2011

Я занимаюсь разработкой веб-приложения (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, на этот раз для бот-архитектуры x86 и x64, поэтому я подумал, что сейчас все готово.

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

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

Я уже почти сутки бьюсь головой, но до сих пор не могу понять, почему это происходит!

Ответы [ 2 ]

1 голос
/ 27 января 2011

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

0 голосов
/ 05 июня 2013

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

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

Суть в том, что при установке нескольких версий Office и различных офисных 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

(ОС: 64-разрядная версия: 64-разрядная версия) или (ОС: 32-разрядная версия: 32-разрядная версия)

Ключ: HKCR \ CLSID {3BE786A0-0366-4F5C-9434-25CF162E475E} \ InprocServer32 \

Имя значения: (по умолчанию)

Данные значения: C: \ Program Files \ Common Files \ Microsoft Shared \ OFFICE14 \ ACEOLEDB.DLL

(ОС: 64-битная Офис: 32-битная)

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

Имя значения: (по умолчанию)

Данные значения: C: \ Program Files (x86) \ Common Files \ Microsoft Shared \ Office14 \ ACEOLEDB.DLL

...