ACE OLEDB Внешняя таблица не в ожидаемом формате с большим текстом в ячейке Excel

Я пытаюсь прочитать файл .xls с очень большой текстовой ячейкой (около 8900 символов) с использованием System.Data.OleDb и поставщика Microsoft ACE OLEDB. У меня нет контроля над содержимым файла .xls.

Я получаю следующее исключение при попытке .Open() OleDbConnection:

Exception thrown: 'System.Data.OleDb.OleDbException' in System.Data.dll

Additional information: External table is not in the expected format.

Я свернул файл .xls, и кажется, что именно текстовая ячейка вызывает исключение. У меня установлен MS Office 2010 x86 на ОС x64.

Я пробовал все следующее, но ни одно из них не решило проблему:

  • ACE 12.0 x86
  • ACE 12.0 x64
  • ACE 15.0 x32
  • настройка реестра для установки TypeGuessRows = 0
  • строка подключения IMEX = 1
  • строка подключения Расширенные свойства = "Excel 8.0;"
  • строка подключения Extended Properties = "Excel 12.0;"

Из моих исследований кажется, что старый провайдер JET усекал поля до 255 символов. Я не могу заставить ACE прочитать файл без исключения исключения.


person CoderBrien    schedule 24.11.2016    source источник
comment
Исключение предполагает, что вы пытаетесь сделать это из приложения .NET. Если это так, то вам может помочь, если вы пометите вопрос с помощью C#, VB.NET или чего-то еще. Тем не менее, я не могу воспроизвести вашу проблему с C #. Не могли бы вы предоставить ссылку на небольшой образец файла .xls, который продемонстрирует ошибку?   -  person Gord Thompson    schedule 24.11.2016
comment
да, c #. загрузил образец в dropfile.to/EZmAt3K.   -  person CoderBrien    schedule 24.11.2016
comment
В Excel вы можете попробовать вкладку «Данные» ›Из доступа› выберите файл Excel ›и т. Д., А затем проверьте сгенерированную строку подключения в свойствах. В противном случае вы можете попробовать некоторые из драйверов ODBC connectionstrings.com/excel-2007-odbc   -  person Slai    schedule 24.11.2016


Ответы (1)


Похоже, вы столкнулись с проблемой, связанной с обработкой компонентом Access Database Engine (ACE) старых файлов .xls. Я мог воспроизвести проблему, используя

myConnectionString =
        "Provider=Microsoft.ACE.OLEDB.12.0;" +
        @"Data Source=C:\Users\Public\test\sample.xls;" +
        "Extended Properties=\"Excel 8.0;HDR=YES;\";" +
        "";

но ошибки не возникло, когда я просто переключился на более старый "Jet" OLEDB-провайдер (32-разрядный) ...

myConnectionString =
        "Provider=Microsoft.Jet.OLEDB.4.0;" +
        @"Data Source=C:\Users\Public\test\sample.xls;" +
        "Extended Properties=\"Excel 8.0;HDR=YES;\";" +
        "";

... и он прочитал все 8927 символов в столбце "Допустимые" (т.е. он не усек его до 255 символов).

Если вам действительно нужно использовать поставщик ACE OLEDB, я обнаружил, что сохранение файла .xls как .xlsx и использование

myConnectionString =
        "Provider=Microsoft.ACE.OLEDB.12.0;" +
        @"Data Source=C:\Users\Public\test\sample2.xlsx;" +
        "Extended Properties=\"Excel 12.0;HDR=YES;\";" +
        "";

тоже работал. (Повторное сохранение предположительно может быть выполнено с помощью COM-автоматизации Excel из приложения C #.)

person Gord Thompson    schedule 24.11.2016
comment
Привет, Горд. Ты мужик! Благодарим за подтверждение того, что в ACE ошибка выглядит, и за решение проблемы. Я уничтожил свою офисную установку, пытаясь удалить ACE15 :-(. Для всех, кто последует за мной, я также собираюсь попробовать проект ExcelDataReader. Спасибо! - person CoderBrien; 24.11.2016