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

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

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

не повезло.

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

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());

etc.

см. также настройка


попробуй такое

У меня была эта проблема. просто из-за кавычек

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

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

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

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