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