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

StackOverflow https://stackoverflow.com/questions/644331

  •  22-07-2019
  •  | 
  •  

Вопрос

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

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

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, чтобы удалить заблокированные ячейки, которые могли бы сработать.

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top