2009-03-13 16 views
8

Ich muss Daten von einem xls ziehen, ich muss auch den Benutzer in der Lage sein, den Speicherort der Datei ändern wird es. So schien eine OleDbConnection wie ein guter Anfang zu sein, und es war bis zur ersten verbundenen Zelle.Öffnen Sie eine Excel 2003-Kalkulationstabelle mit C#. Das installierbare ISAM konnte nicht gefunden werden. Ausnahme

Dies funktioniert für alle, aber die fusionierten Zellen:

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

fand ich, dass dieser Zugriff auf die fusionierten Zellen ermöglichen sollte:

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

Aber dann bekomme ich ein Installierbares ISAM nicht Ausnahme finden auf cmd.conn.open();

folgte ich dem Rat hier: http://support.microsoft.com/kb/209805

Und hier: Error: "Could Not Find Installable ISAM"

Kein Glück.

Ich bin offen für andere Möglichkeiten, Daten aus den xls zu ziehen. Oder, selbst wenn es einen Befehl gäbe, könnte ich auf den xls laufen, um die gezackten Zellen zu entfernen, die funktionieren könnten.

Antwort

15

Ich denke, es ist nur, weil Sie die erweiterten Eigenschaften in Anführungszeichen setzen, wenn Sie mehr als ein

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

haben, oder wenn einfache Anführungszeichen funktionieren nicht (Sie erhalten die Idee)

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

Während Ihr Beispiel es nicht zeigt, kann dieser Fehler auch durch Leerzeichen im Dateipfad verursacht werden. In diesem Fall müssten Sie den Dateipfad auch in Anführungszeichen setzen.

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

Wer dachte an diese schreckliche Syntax? – configurator

+0

Ich musste es leicht ändern: OleDbConnection (@ "Provider = Microsoft.Jet.OLEDB.4.0; Datenquelle = F: \ test.xls; Erweiterte Eigenschaften = 'Excel 8.0; HDR = NEIN; IMEX = 1 '"); – NitroxDM

+0

Vielen Dank für diese Antwort. –

2

Angenommen, Ihre Systemanforderungen umfassen eine Installation von Excel können Sie die Excel-Objektbibliothek

Excel.Sheets sheets = m_Excel.Worksheets; 
Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(1); 
Excel.Range range = worksheet.get_Range("A1", "E1".ToString()); 

usw.

See VSTO auch

-1

ist eine lizenzfreie Tabelle verwenden Komponente für .NET und sollte alles tun, was Sie wollen für 32 Bit und 64 Bit .NET ohne Abhängigkeit von Excel (oder irgendetwas anderes th ein .NET 2.0+).

Sie können Live-ASP.NET-Beispiele here sehen und laden Sie die kostenlose Testversion here, wenn Sie es selbst ausprobieren möchten.

Haftungsausschluss: Ich besitze SpreadsheetGear LLC

1

dieses

Versuchen ich dieses Problem hatte. nur wegen der Angebote

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