2016-11-24 7 views
2

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

Я получаю следующее исключение при попытке .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;"
  • строка подключения Расширенные свойства = "Excel 12.0;"

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

+0

Исключение указывает на то, что вы пытаетесь сделать это из приложения .NET. Если это так, то вам может помочь, если вы помечаете вопрос 'C#', 'VB.NET' или что-то еще. Тем не менее, я не могу воспроизвести вашу проблему с C#. Можете ли вы предоставить ссылку на небольшой пример файла .xls, который продемонстрирует ошибку? –

+0

есть, C#. загрузили образец в https://dropfile.to/EZmAt3K. – CoderBrien

+0

В Excel вы можете попробовать вкладку «Данные»> «Из доступа»> выбрать файл excel> и т. Д., А затем проверить сгенерированную строку соединения в свойствах. В противном случае вы можете попробовать некоторые из драйверов ODBC https://www.connectionstrings.com/excel-2007-odbc/ – Slai

ответ

2

Возможно, вы столкнулись с проблемой обработки обработчиков 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#.)

+0

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

+0

Полезно знать, спасибо. –