2009-03-13 17 views
8

Ho bisogno di estrarre i dati da un xls, ho anche bisogno che l'utente sia in grado di cambiare il percorso del file. Quindi un OleDbConnection sembrava un buon inizio, ed è stato fino alla prima cella unita.Aprire un foglio di calcolo di Excel 2003 con C#. Impossibile trovare ISAM installabile. Eccezione

Questo funziona per tutti, ma le celle unite:

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

ho trovato che questo dovrebbe consentire l'accesso alle celle unite:

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

Ma poi ho un Impossibile trovare eccezione ISAM installabile su cmd.conn.open();

ho seguito il consiglio qui: http://support.microsoft.com/kb/209805

E qui: Error: "Could Not Find Installable ISAM"

Nessuna fortuna.

Sono aperto ad altri modi di estrarre i dati dagli xls. O anche se ci fosse un comando che potrei eseguire su xls per rimuovere le celle mirate che potrebbero funzionare.

risposta

15

penso che sia solo perché si deve racchiudere le proprietà estese tra virgolette se si dispone di più di un

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

O se virgolette singole non funzionano (si ottiene l'idea)

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

Mentre l'esempio non lo mostra, questo errore può anche essere causato da spazi nel percorso del file. In tal caso, è necessario avvolgere il percorso del file tra virgolette.

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

Chi ha pensato a questa orribile sintassi? – configurator

+0

Ho dovuto cambiarlo leggermente: OleDbConnection (@ "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = F: \ test.xls; Proprietà estese = 'Excel 8.0; HDR = NO; IMEX = 1 '"); – NitroxDM

+0

Grazie mille per questa risposta. –

2

Assumendo requisiti tuo sistema includono un'installazione di Excel, è possibile utilizzare la libreria di oggetti di 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()); 

ecc

Vedi anche VSTO

-1

è un foglio di calcolo royalty free componente per .NET e dovrebbe fare tutto ciò che vuoi per 32 bit e 64 bit. NET senza dipendenza da Excel (o qualsiasi altra cosa un .NET 2.0+).

È possibile visualizzare i campioni ASP.NET dal vivo here e scaricare la versione di prova gratuita here se si desidera provare da soli.

Disclaimer: proprio SpreadsheetGear LLC

1

Prova questa

ho avuto questo problema. solo per le citazioni

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