Откройте электронную таблицу 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