В Excel "внешняя таблица не в ожидаемом формате."
Я пытаюсь прочитать файл 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);
}
18 ответов
"внешняя таблица не в ожидаемом формате."обычно происходит при попытке использовать файл Excel 2007 со строкой подключения, использующей: Microsoft.Реактивный.Oledb для.4.0 и расширенные свойства=Excel 8.0
использование следующей строки подключения, похоже, устраняет большинство проблем.
public static string path = @"C:\src\RedirectApplication\RedirectApplication1s.xlsx";
public static string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";
Спасибо за этот код :) я действительно ценю это. Работать на меня.
public static string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";
поэтому, если у вас есть diff версия файла Excel, получите имя файла, если его расширение .XLSX-файл используйте этот:
Private Const connstring As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";
и если это .в XLS использовать:
Private Const connstring As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" + path + ";Extended Properties=""Excel 8.0;HDR=YES;"""
(У меня слишком низкая репутация, чтобы комментировать, но это комментарий к записи JoshCaba, используя Ace-engine вместо Jet для Excel 2007)
Если у вас нет Ace установлен/зарегистрирован на вашем компьютере, вы можете получить его по адресу: http://www.microsoft.com/downloads/details.aspx?FamilyID=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en
Это относится и к Excel 2010.
просто добавляйте свое дело. Мой файл xls был создан функцией экспорта данных с веб-сайта, расширение файла xls, он может быть нормально открыт MS Excel 2003. Но и Microsoft.Реактивный.Oledb для.4.0 и Microsoft.ТУЗ.Oledb для.12.0 получено исключение" внешняя таблица не в ожидаемом формате".
наконец, проблема в том, что, как сказано в исключении, "это не в ожидаемом формате". Хотя это имя расширения-xls, Но когда я открываю его с помощью текстового редактора, это на самом деле хорошо сформированный html-файл, все данные находятся в
- ячейкой. Тогда я думаю, что могу разобрать его в html-формате. |
У меня была такая же проблема(используя ACE.OLEDB) и что разрешило это для меня была эта ссылка:
http://support.microsoft.com/kb/2459087
суть в том, что установка нескольких версий office и различных Office sdk, сборок и т. д. привел к Ацеоледбу.ссылка dll в реестре, указывающая на папку OFFICE12 вместо OFFICE14 в
C:\Program Файлы\Общие Файлы\Microsoft Общий\OFFICE14\ACEOLEDB.Dll файлы
из ссылки:
кроме того, вы можете изменить раздел реестра, изменив путь dll в соответствии с версией Access.
Access 2007 должен использовать OFFICE12, Access 2010-OFFICE14 и Access 2013-OFFICE15
(ОС: 64-битный офис: 64bit) или (ОС: 32-битный офис: 32бит)
ключ: HKCR\CLSID{3BE786A0-0366-4F5C-9434-25CF162E475E}\InprocServer32\
Имя Значения: (По Умолчанию)
Значение Данных: C:\Program Файлы\Общие Файлы\Microsoft Общий\OFFICE14\ACEOLEDB.Dll файлы
(OS: 64bit офис: 32bit)
ключ: HKCR\Wow6432Node\CLSID{3BE786A0-0366-4F5C-9434-25CF162E475E}\InprocServer32\
Имя Значения: (По Умолчанию)
значение данных: C:\Program файлы (x86)\Общие файлы\Microsoft Общий\OFFICE14\ACEOLEDB.Dll файлы
Я также видел эту ошибку при попытке использовать сложные косвенные () формулы на импортируемом листе. Я заметил это, потому что это была единственная разница между двумя книгами, где один импортировал, а другой нет. Оба были 2007+ .XLSX файлы, и 12.0 двигатель был установлен.
Я подтвердил, что это была проблема:
- создание копии файла (все еще была проблема, так что это не было какой-то сохранить-как разница)
- опции все ячейки в листе с косвенными формулами
- вставка только как значения
и ошибка исчезла.
Я получал ошибки со сторонним и Oledb чтением книги 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+ строк.
Если у вас все еще есть эта проблема, то проверьте свои разрешения, я пробовал многие из этих предложений, и моя конкретная проблема заключалась в том, что файл, который я хотел обработать, находился под контролем источника, и поток не имел разрешений, мне пришлось изменить все разрешения папки, и он начал работать (я обрабатывал много файлов там)... Он также соответствует многим предложениям, таким как изменить имя файла или проверить, что файл не loicked другим процессом.
Я надеюсь, что это помочь тебе.
У меня была эта проблема, и изменение расширенных свойств для импорта HTML исправило ее согласно этой сообщение Маркуса Мириса:
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & importedFilePathAndName _
& ";Extended Properties=""HTML Import;HDR=No;IMEX=1"";"
ACE заменил JET
Ace поддерживает все предыдущие версии Office
этот код работает хорошо!
OleDbConnection MyConnection;
DataSet DtSet;
OleDbDataAdapter MyCommand;
MyConnection = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=..\Book.xlsx;Extended Properties=Excel 12.0;");
MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection);
DtSet = new System.Data.DataSet();
MyCommand.Fill(DtSet);
dataGridView1.DataSource = DtSet.Tables[0];
MyConnection.Close();
Это может произойти, если книга защищена паролем. Существуют некоторые обходные пути для удаления этой защиты, но большинство примеров, которые вы найдете в интернете, устарели. В любом случае простое решение-снять защиту книги вручную, иначе используйте что-то вроде OpenXML для программного удаления защиты.
недавно я видел эту ошибку в контексте, который не соответствовал ни одному из ранее перечисленных ответов. Это оказался конфликт с AutoVer. Обходной путь: временно отключить Автовер.
столкнулся с той же проблемой и нашел этот поток. Ни одно из предложений выше не помогло, за исключением комментария @Smith к принятому ответу 17 апреля ' 13.
фон моей проблемы достаточно близок к @zhiyazw - в основном пытается установить экспортированный файл Excel (SSRS в моем случае) в качестве источника данных в пакете dtsx. Все, что я сделал, немного повозившись, это переименовал рабочий лист. Он не должен быть строчным, как предложил @Smith.
Я полагаю, туз OLEDB ожидает, что файл Excel будет следовать определенной структуре XML, но каким-то образом Службы Reporting Services об этом не знают.
этот адрес файла excel может иметь неправильное расширение. Вы можете изменить расширение с xls на xlsx или наоборот и повторить попытку.