Как прочитать файл .XLSX (Excel 2007) с помощью ADO.NET?Я нахожу ошибку "Не удалось найти устанавливаемый ISAM" - PullRequest
5 голосов
/ 23 октября 2010

Мне нужно работать в .net 2.0.Поэтому я не могу использовать OpenXML.

Это мой исходный код, и я уже установил AccessDatabaseEngine.exe.

Но все равно получаю исключение:

"Не удалось найти устанавливаемый ISAM ".

Я также попытался "Extended Properties=Excel 8.0" в строке подключения.

static void Main(string[] args)
{
    DataSet dataSet = new DataSet();

    OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|Data Directory|\HSC.xlsx;Extended Properties=Excel 12.0;HDR=YES;");           
    OleDbDataAdapter dataAdapter= new OleDbDataAdapter("select * from [Sheet1$]", connection);

    dataAdapter.Fill(dataSet);
}

Ответы [ 3 ]

9 голосов
/ 29 октября 2010

Согласно Карлу Протману, это должно быть

 Extended Properties="Excel 12.0 Xml;

- http://www.connectionstrings.com/excel-2007

Более подробно:

 OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Docs\\Book2.xlsx;Extended Properties='Excel 12.0 xml;HDR=YES;'");           

Обратите внимание на одинарные кавычки.

2 голосов
/ 23 октября 2010

Я предпочитаю использовать Microsoft OpenXML 2.0 SDK для такого рода функций.У него очень приятный интерфейс, и он не требует установки Office на компьютере, который читает файл XLSX, что хорошо.

Я пишу это со своего мобильного телефона, так что трудно представитьссылка, но поиск в Google легко найдет ее для вас.

Попробуйте.Я думаю, вам понравится.

РЕДАКТИРОВАТЬ

Если у вас есть для использования .NET 2.0, вы можете перейти на использование варианта JETOleDb вместо.

Это означает, что вы сделаете что-то подобное для подключения:

OleDbConnection connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" + 
                 "Data Source='" + filename + "';" + 
                 "Extended Properties=\"Excel 8.0;HDR=No;IMEX=1;\"";);

Затем вы можете запросить его, как в примере выше:

OleDbDataAdapter objAdapter = new OleDbDataAdapter("select * from [Sheet1$]", connection);

Попробуй!Просто отметьте, что у Jet есть странная логика решения, является ли столбец числовым или нет.Подробности см. В следующих SO-вопросах: Проблема с использованием OleDbDataAdapter для извлечения данных из листа Excel

1 голос
/ 18 марта 2015

Убедитесь, что строка подключения выглядит следующим образом (даже если вы обращаетесь к Microsoft Excel версии 10 ->

MyConnection = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;
Data Source='D:\csharp-Excel.xls';Extended Properties='Excel 12.0 Xml;HDR=Yes;'");
...