Откройте электронную таблицу Excel 2003 с помощью C#. Не удалось найти устанавливаемый ISAM. исключение

Мне нужно получить данные из xls, мне также нужно, чтобы пользователь мог изменить местоположение файла, который он будет. Таким образом, OleDbConnection казалось хорошим началом, и это было до первой объединенной ячейки.

Это работает для всех, кроме объединенных ячеек:

OleDbCommand cmd = new OleDbCommand();
cmd.Connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data 
Source=F:\test.xls;Extended Properties=Excel 8.0;");
cmd.CommandText = "SELECT * FROM [Sheet$]";
cmd.Connection.Open();

Я обнаружил, что это должно разрешить доступ к объединенным ячейкам:

OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\test.xls;Extended Properties=Excel 8.0;HDR=Yes;IMEX=1;");

Но тогда я получаю Не удалось найти устанавливаемое исключение ISAM для cmd.conn.open();

Я последовал совету здесь: http://support.microsoft.com/kb/209805

И здесь: Ошибка: "Не удалось найти устанавливаемый ISAM"

Неудачно.

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

4 ответа

Решение

Я думаю, что это просто потому, что вы должны заключить расширенные свойства в кавычки, если у вас есть более одного

OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\test.xls;
Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';");

Или, если одинарные кавычки не работают (у вас есть идея)

OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\test.xls;
Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1;"";");

Хотя в вашем примере это не показано, эта ошибка также может быть вызвана пробелами в пути к файлу. В этом случае вам также необходимо заключить путь к файлу в кавычки.

OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""F:\test.xls"";...

Если ваши системные требования включают установку Excel, вы можете использовать библиотеку объектов Excel

Excel.Sheets sheets = m_Excel.Worksheets;
Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(1);
Excel.Range range = worksheet.get_Range("A1", "E1".ToString());

и т.п.

Смотри также ВСТО

Попробуй это

У меня была эта проблема. только из-за цитат

string sConnection = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sFilePath + ";" + "Extended Properties='Excel 8.0;HDR=YES;'";

SpreadsheetGear for .NET - это бесплатный компонент электронных таблиц для.NET, который должен делать все, что вам нужно, для 32-битных и 64-битных.NET без зависимости от Excel (или чего-либо еще, кроме.NET 2.0+).

Вы можете посмотреть живые образцы ASP.NET здесь и скачать бесплатную пробную версию здесь, если вы хотите попробовать это самостоятельно.

Отказ от ответственности: я владею SpreadsheetGear LLC

Другие вопросы по тегам