2009-03-13 28 views
8

J'ai besoin de tirer des données d'un xls, j'ai également besoin que l'utilisateur soit capable de changer l'emplacement du fichier qu'il le fera. Donc, une OleDbConnection semblait être un bon début, et c'était jusqu'à la première cellule fusionnée.Ouvrez une feuille de calcul Excel 2003 avec C#. Impossible de trouver l'ISAM installable. Exception

Cela fonctionne pour tous, mais les cellules fusionnées:

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(); 

Je trouve que cela devrait permettre l'accès aux cellules fusionnées:

OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\test.xls;Extended Properties=Excel 8.0;HDR=Yes;IMEX=1;"); 

Mais je reçois un Impossible de trouver le installable exception ISAM sur cmd.conn.open();

J'ai suivi les conseils donnés ici: http://support.microsoft.com/kb/209805

Et ici: Error: "Could Not Find Installable ISAM"

Pas de chance.

Je suis ouvert à d'autres façons de tirer des données de la xls. Ou même s'il y avait une commande je pourrais courir sur les xls pour enlever les cellules mirées qui pourraient fonctionner.

Répondre

15

Je pense qu'il est juste parce que vous devez joindre les propriétés étendues entre guillemets si vous avez plus d'un

OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\test.xls; 
Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';"); 

Ou si des guillemets simples ne fonctionnent pas (vous voyez l'idée)

OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\test.xls; 
Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1;"";"); 

Bien que votre exemple ne l'affiche pas, cette erreur peut également être provoquée par des espaces dans le chemin du fichier. Dans ce cas, vous devrez également placer le chemin du fichier entre guillemets.

OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""F:\test.xls"";... 
+0

Qui pensait à cette syntaxe épouvantable? – configurator

+0

J'ai dû le modifier légèrement: OleDbConnection (@ "Fournisseur = Microsoft.Jet.OLEDB.4.0; Source de données = F: \ test.xls; Propriétés étendues = 'Excel 8.0; HDR = NO; IMEX = 1 '"); – NitroxDM

+0

Merci beaucoup pour cette réponse. –

2

En supposant que votre configuration système requise incluent une installation d'Excel, vous pouvez utiliser la bibliothèque d'objets 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.

Voir aussi VSTO

-1

est un redevance feuille libre composant pour .NET et devrait faire tout ce que vous voulez pour .NET 32 bits et 64 bits sans dépendance sur Excel (ou toute autre un .NET 2.0+).

Vous pouvez voir des échantillons ASP.NET en direct here et télécharger la version d'essai gratuite here si vous voulez l'essayer vous-même.

Disclaimer: Je possède SpreadsheetGear LLC

1

Essayez cette

J'ai eu ce problème. juste à cause de citations

string sConnection = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sFilePath + ";" + "Extended Properties='Excel 8.0;HDR=YES;'";