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

Мне нужно получить данные из 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 для устанавливаемого ISAM в cmd.conn.open ();

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

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

Не повезло.

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

Ответы [ 4 ]

14 голосов
/ 13 марта 2009

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

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"";...
2 голосов
/ 13 марта 2009

Если ваши системные требования включают установку 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());

и т.д.

См. Также VSTO

1 голос
/ 14 января 2012

Попробуйте это

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

string sConnection = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sFilePath + ";" + "Extended Properties='Excel 8.0;HDR=YES;'";
0 голосов
/ 02 февраля 2010

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

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

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

...