2010-04-11 7 views
4

Je veux ouvrir un fichier xlsx, j'ai essayé le code ci-dessous, mais il ne s'ouvre pas non plus, il ne jette aucune erreur.Je ne peux pas ouvrir le fichier .xlsx

Quelqu'un peut-il jeter toute la lumière sur ce

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

Que signifie "non ouvert"? Vous n'ouvrez rien, vous exécutez une requête. La syntaxe est correcte, l'absence d'une exception indiquerait que soit dt est rempli de lignes ou que la feuille était vide. Ajoutez Console.WriteLine (dt.Rows.Count) pour une vérification de base. –

+0

Je vous recommande d'essayer une expression SELECT directement et de voir ce que vous obtenez avant de remplir le DT. Si la requête crache une erreur, ajoutez-la à la question ici. Si ce n'est pas le cas et qu'il dit que c'est réussi, alors Hans a raison de dire que votre feuille est vide. – Phillip

Répondre

1

L'exécutez-vous sur Windows 64 bits? La dernière fois que j'ai vérifié les pilotes OLE pour les classeurs Excel ne fonctionnait pas avec Windows 64 bits.

vous permet de lire des classeurs Excel à partir de .NET et fonctionne avec .NET 2.0+ - y compris Windows 64 bits.

Vous pouvez voir des échantillons en direct here et télécharger l'essai gratuit here.

Disclaimer: Je possède SpreadsheetGear LLC

+0

Joe, vous avez parfaitement raison. C'était tout. Parce que cela a fonctionné dans mon bureau qui a Windows 32 bits, alors que chez moi j'ai 64 bits. Merci Joe – cmrhema

1

Voir ce que cela fait dans votre chaîne de connexion:

Extended Properties = \ "Excel 8.0, HDR = OUI; \" le reste de votre connexion la chaîne est correcte je crois.

0

En plus de la réponse de Phillip assurez-vous de régler le targetPlatform à x86.

6

En décembre 2010, Microsoft (enfin!) A publié un pilote OLEDB 64 bits pour les fichiers CSV et XLSX. Vous aurez besoin du Microsoft Access Database Engine 2010 Redistributable 64 bits. Assurez-vous de télécharger la version 64 bits (AccessDatabaseEngine_X64.exe). Vous devez désinstaller toutes les applications Office 32 bits (y compris Sharepoint Designer!) Afin de l'installer. Si vous voulez CSV, vous voulez le nom du pilote Microsoft Access Text Driver (*.txt, *.csv), mais je n'ai pas encore trouvé de chaîne de connexion complète en utilisant ce pilote de OLEDB (bien que si vous avez, laissez un commentaire et je vais modifiez cette réponse). Notez que les noms 64 bits sont différents des versions 32 bits.

Pour la lecture des fichiers XLSX, utilisez une chaîne de connexion comme ceci:

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

Pour XLS fichiers (pré-2007 Excel) utilisent une chaîne de connexion comme ceci:

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

Un grand merci à this blog post et this answer pour me pointer dans la bonne direction quand j'ai rencontré le même problème, et pour fournir du contenu, je me suis adapté à écrire cette réponse.

Questions connexes