2010-04-11 4 views
4

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

Может кто-нибудь пролить свет на это

string path = "C:\\examples\\file1.xlsx"; 
string connString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES\";"); 
OleDbConnection cn = new OleDbConnection(connString); 
cn.Open(); 
OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", cn); 
DataTable dt = new DataTable(); 
adapter.Fill(dt); 
+0

Что означает «не открытое»? Вы ничего не открываете, вы выполняете запрос. Синтаксис прекрасен, отсутствие исключения указывает на то, что либо dt заполняется строками, либо что лист пуст. Добавьте базовую проверку Console.WriteLine (dt.Rows.Count). –

+0

Я бы рекомендовал попробовать выражение SELECT напрямую и посмотреть, что вы вернетесь, прежде чем заполнять DT. Если запрос плюет на ошибку, добавьте его в вопрос здесь. если это не так, и говорит, что это успешно, тогда Ганс прав, потому что ваш лист пуст. – Phillip

ответ

1

Вы используете его на 64-битной Windows? В прошлый раз, когда я проверял драйверы OLE для книг Excel, они не работали с 64-битной Windows.

позволит вам читать книги Excel из .NET и работать с .NET 2.0+, включая 64-битную Windows.

Вы можете увидеть живые образцы here и скачать бесплатную пробную версию here.

Отказ от ответственности: У меня есть SpreadsheetGear LLC

+0

Джо, ты совершенно прав. Вот и все. Потому что он работал в моем офисе, который имеет 32-битную Windows, тогда как в моем доме у меня 64 бит. Спасибо, Джо – cmrhema

1

Посмотрите, что это происходит в вашей строке соединения:

Extended Properties = \ "Excel 8.0; HDR = YES; \" остальные подключения строка верна, я верю.

0

В дополнение к ответу Филипа убедитесь, что установить TargetPlatform на x86.

6

В декабре 2010 года Microsoft (наконец!) Опубликовала 64-разрядный OLEDB-драйвер для файлов CSV и XLSX.

Вам понадобится 64-разрядный Microsoft Access Database Engine 2010 Redistributable. Обязательно загрузите 64-разрядную версию (AccessDatabaseEngine_X64.exe). Чтобы установить его, вам необходимо удалить 32-разрядные приложения Office (включая Sharepoint Designer!).

Если вы хотите CSV, вам понадобится имя драйвера Microsoft Access Text Driver (*.txt, *.csv), но я не смог найти полную строку соединения, но используя этот драйвер от OLEDB (хотя, если есть, оставьте похвалу, и я изменить этот ответ). Обратите внимание, что 64-битные имена отличаются от 32-разрядных версий.

Для чтения XLSX файлов, используйте строку соединения, как это:

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" 
+ FilePath 
+ ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\""; 

Для XLS (до 2007 Excel) файлы используют строку подключения, как это:

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" 
+ FilePath 
+ ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\""; 

Большое спасибо this blog post и this answer для указания меня в правильном направлении, когда я столкнулся с той же проблемой и для обеспечения контента, который я адаптировал для написания этого ответа.

Смежные вопросы