Я пытаюсь прочитать файл Excel (xlsx), используя код, показанный ниже. Я получаю «Внешняя таблица не в ожидаемом формате». ошибка, если у меня нет файла уже открыт в Excel. Другими словами, мне нужно сначала открыть файл в Excel, прежде чем я смогу прочитать его из моей программы на C #. Файл xlsx находится в общем доступе в нашей сети. Как я могу прочитать файл, не открывая его сначала? Спасибо
string sql = "SELECT * FROM [Sheet1$]";
string excelConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathname + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1;\"";
using (OleDbDataAdapter adaptor = new OleDbDataAdapter(sql, excelConnection)) {
DataSet ds = new DataSet();
adaptor.Fill(ds);
}
c#
excel-2007
xlsx
import-from-excel
Sisiutl
источник
источник
Ответы:
«Внешняя таблица не в ожидаемом формате.» обычно возникает при попытке использовать файл Excel 2007 со строкой подключения, которая использует: Microsoft.Jet.OLEDB.4.0 и Extended Properties = Excel 8.0
Использование следующей строки подключения, кажется, решает большинство проблем.
источник
Спасибо за этот код :) Я действительно ценю это. Работает для меня.
Так что, если у вас есть diff версия файла Excel, получите имя файла, если его расширение - .xlsx , используйте это:
и если это .xls , используйте:
источник
.xls
файл на ПК, на котором не установлен Jet OleDb.(У меня слишком низкая репутация, чтобы комментировать, но это комментарий к записи JoshCaba, использующей движок Ace вместо Jet для Excel 2007)
Если на вашем компьютере Ace не установлен / не зарегистрирован, вы можете получить его по адресу: https://www.microsoft.com/en-US/download/details.aspx?id=13255.
Это относится и к Excel 2010.
источник
We're sorry, this download is no longer available
.Просто добавьте мой случай. Мой файл xls был создан функцией экспорта данных с веб-сайта, расширение файла - xls, его обычно можно открыть в MS Excel 2003. Но и Microsoft.Jet.OLEDB.4.0, и Microsoft.ACE.OLEDB.12.0 получили " Внешняя таблица не в ожидаемом формате "исключение.
Наконец, проблема заключается в том, что, как говорится в исключении, «это не в ожидаемом формате». Хотя это расширение имя xls, но когда я открываю его с помощью текстового редактора, это на самом деле правильно сформированный HTML-файл, все данные находятся в <table>, каждый <tr> является строкой, а каждый <td> является клетка. Тогда я думаю, что могу разобрать его в формате HTML.
источник
Extended Properties=""HTML Import;HDR=No;IMEX=1
У меня такая же проблема. который решен с помощью этих шагов:
1.) Нажмите Файл
2.) Выберите «Сохранить как»
3.) Нажмите на выпадающее меню (Сохранить как тип)
4.) Выберите книгу Excel 97-2003
5.) Нажмите на кнопку Сохранить
источник
У меня была та же самая проблема (Используя ACE.OLEDB), и что решило это для меня, была эта ссылка:
http://support.microsoft.com/kb/2459087
Суть в том, что установка нескольких версий Office и различных офисных SDK, сборок и т. Д. Привела к ссылке ACEOleDB.dll в реестре, указывающей на папку OFFICE12 вместо OFFICE14 в
По ссылке:
источник
Я также видел эту ошибку при попытке использовать сложные формулы INDIRECT () на импортируемом листе. Я заметил это, потому что это было единственное различие между двумя книгами, в которые импортировалась одна, а другой - нет. Оба были 2007+ .XLSX файлами, и был установлен механизм 12.0.
Я подтвердил, что это проблема:
и ошибка исчезла.
источник
Я получал ошибки при чтении книги XLSX сторонней организацией и Oledb. Похоже, что это скрытый лист, который вызывает ошибку. Раскрытие листа позволило импортировать книгу.
источник
Если файл только для чтения, просто удалите его, и он должен снова работать.
источник
Наткнулся на ту же проблему и нашел эту ветку. Ни одно из предложенных выше предложений не помогло, за исключением комментария @ Smith к принятому ответу 17 апреля 13 года.
История моей проблемы достаточно близка к @ zhiyazw - в основном я пытаюсь установить экспортированный файл Excel (в моем случае SSRS) в качестве источника данных в пакете dtsx. Все, что я сделал, после некоторого возни, переименовал лист. Это не должно быть в нижнем регистре, как предложил @Smith.
Я предполагаю, что ACE OLEDB ожидает, что файл Excel будет следовать определенной структуре XML, но каким-то образом службы Reporting Services не знают об этом.
источник
Этот адрес файла Excel может иметь неправильное расширение. Вы можете изменить расширение с xls на xlsx или наоборот и попробовать еще раз.
источник
файл может быть заблокирован другим процессом, вам нужно скопировать его и загрузить, как сказано в этом посте
источник
Это также может быть файл, содержащий изображения или диаграммы, см. Это: http://kb.tableausoftware.com/articles/knowledgebase/resolving-error-external-table-is-not-in-expected-format
Рекомендуется сохранить как Excel 2003
источник
Просто добавляю мое решение этой проблемы. Я загружал файл .xlsx на веб-сервер, затем читал с него и массово вставлял в SQL Server. Получал то же самое сообщение об ошибке, пробовал все предложенные ответы, но ни один не работал. В конце концов я сохранил файл как Excel 97-2003 (.xls), который работал ... единственная проблема, которую я имею сейчас, состоит в том, что исходный файл имел более 110 000 строк
источник
Если у вас все еще есть эта проблема, то проверьте свои разрешения, я попробовал многие из этих предложений, и моя конкретная проблема заключалась в том, что файл, который я хотел обработать, находился под контролем исходного кода, а поток не имел разрешений, мне пришлось изменить разрешения для всей папки. и он начал работать (я там обрабатывал много файлов) ... Он также соответствует многим предложениям, таким как изменение имени файла или проверка того, что файл не заблокирован другим процессом.
Я надеюсь, что это поможет вам.
источник
У меня была эта проблема, и изменение расширенных свойств на импорт HTML устранило ее в соответствии с этой записью Маркуса Мириса:
источник
Вместо OleDb вы можете использовать Excel Interop и открыть лист только для чтения.
https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.workbooks.open(v=office.15).aspx
источник
ACE заменил JET
Ace поддерживает все предыдущие версии Office
Этот кодекс работает хорошо!
источник
Это может произойти, если рабочая книга защищена паролем. Есть некоторые обходные пути для удаления этой защиты, но большинство примеров, которые вы найдете в сети, устарели. В любом случае, простое решение состоит в том, чтобы снять защиту рабочей книги вручную, в противном случае используйте что-то вроде OpenXML для программного удаления защиты.
источник
Я недавно видел эту ошибку в контексте, который не соответствовал ни одному из ранее перечисленных ответов. Оказалось, конфликт с AutoVer . Обходной путь: временно отключите AutoVer.
источник
У меня недавно было это «System.Data.OleDb.OleDbException (0x80004005): внешняя таблица не в ожидаемом формате». ошибка произошла. Я полагался на Microsoft Access 2010 Runtime. До обновления, которое было автоматически установлено на моем сервере 12 декабря 2018 года, мой код C # работал нормально с использованием поставщика Microsoft.ACE.OLEDB.12.0. После установки обновления от 12 декабря 2018 года я начал получать «Внешняя таблица не в ожидаемом формате» в моем файле журнала.
Я отключил Microsoft Access 2010 Runtime и установил Microsoft Access 2013 Runtime, и мой код C # снова начал работать без «System.Data.OleDb.OleDbException (0x80004005): внешняя таблица не в ожидаемом формате». ошибки.
Версия 2013 года, которая исправила эту ошибку для меня https://www.microsoft.com/en-us/download/confirmation.aspx?id=39358
Версия 2010, которая работала для меня до обновления, которое было автоматически установлено на моем сервере 12 декабря. https://www.microsoft.com/en-us/download/confirmation.aspx?id=10910 https://www.microsoft.com/en-us/download/confirmation.aspx?id=10910
Я также имел эту ошибку в прошлом месяце в автоматизированном процессе. Код C # работал нормально, когда я запускал его отладку. Я обнаружил, что учетной записи службы, выполняющей код, также необходимы разрешения для папки C: \ Windows \ Temp.
источник
Моя область действия состоит из загрузки шаблона и проверки шаблона, когда он заполнен данными. Итак,
1) Загрузите файл шаблона (.xlsx) со строкой заголовка. файл создается с использованием openxml, и он работает отлично.
2) Загрузить тот же файл без каких-либо изменений из его загруженного состояния. Это приведет к ошибке соединения и не удастся (соединение OLEDB используется для чтения таблицы Excel).
Здесь, если данные заполнены, программа работает как положено.
Любой, кто имеет представление о проблеме, связан с файлом, который мы создаем, в формате xml , если мы откроем его и просто сохраним, преобразуем его в формат Excel, и он работает хорошо.
Любая идея скачать Excel с предпочтительным типом файла?
источник
Работая с более старым кодом и наткнулся на это же общее исключение. Очень сложно отследить проблему, поэтому я решил добавить сюда, если это поможет кому-то еще.
В моем случае в другом месте проекта был код, который открывал StreamReader для файла Excel до того, как OleDbConnection попытался открыть файл (это было сделано в базовом классе).
Поэтому в основном мне просто нужно было
Close()
сначала вызвать объект StreamReader, а затем я мог бы успешно открыть соединение OleDb. Это не имело никакого отношения к самому файлу Excel или к строке OleDbConnection (что, естественно, я и просматривал вначале).источник