Apri un foglio di calcolo di Excel 2003 con C #. Impossibile trovare ISAM installabile. Eccezione
Domanda
Devo estrarre i dati da un xls, ho anche bisogno che l'utente sia in grado di cambiare la posizione del file che vorrà. Quindi un OleDbConnection sembrava un buon inizio, ed è stato fino alla prima cella unita.
Funziona per tutti tranne 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 scoperto 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 ottengo un'eccezione ISAM non installabile su cmd.conn.open ();
Ho seguito il consiglio qui: http://support.microsoft.com/kb/209805
E qui: Errore: " Impossibile trovare ISAM installabile "
Nessuna fortuna.
Sono aperto ad altri modi per estrarre dati da xls. O anche se ci fosse un comando che potrei eseguire su xls per rimuovere le celle mirged che potrebbero funzionare.
Soluzione
Penso che sia solo perché devi racchiudere le Proprietà estese tra virgolette se ne hai più di una
OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\test.xls;
Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';");
O se le virgolette singole non funzionano (ottieni l'idea)
OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\test.xls;
Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1;"";");
Anche se il tuo esempio non lo mostra, questo errore può anche essere causato da spazi nel percorso del file. Nel qual caso dovrai racchiudere anche il percorso del file tra virgolette.
OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""F:\test.xls"";...
Altri suggerimenti
Supponendo che i requisiti di sistema includano un'installazione di Excel, è possibile utilizzare la Libreria oggetti 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
Prova questo
Ho avuto questo problema. solo per virgolette
string sConnection = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sFilePath + ";" + "Extended Properties='Excel 8.0;HDR=YES;'";
SpreadsheetGear per .NET è un componente di foglio elettronico gratuito per .NET e dovrebbe fare tutto ciò che desideri .NET a 32 e 64 bit senza alcuna dipendenza da Excel (o qualsiasi altra cosa diversa da .NET 2.0+).
Puoi vedere esempi ASP.NET in tempo reale qui e scaricare la prova gratuita qui se vuoi provarlo tu stesso.
Disclaimer: possiedo SpreadsheetGear LLC