Exceldatei auslesen (Kopfzeile)
-
Hallo,
ich bin gerade dabei eine Exceldatei auszulesen. An die Daten selbst zu kommen ist kein Problem. Jedoch benötige ich auch Elemente die sich in der Kopf- und Fusszeile befinden. Gibt es eine Möglichkeit diese auszulesen wenn ich via OLE und dem entsprechenden ConnectionString darauf zugreife?
connString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + myExelFile + ";Extended Properties=\"Excel 12.0;HDR=YES\"";
-
Keiner eine Idee?
Ich komme zwar ohne Probleme an die Daten der WorkSheets via,
OleDbConnection connExcel; OleDbCommand cmdExcel; connExcel = new OleDbConnection(); cmdExcel = new OleDbCommand(); String myExelFile = path; connString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + myExelFile + ";Extended Properties=\"Excel 12.0;HDR=YES\""; connExcel.ConnectionString = connString; connExcel.Open(); cmdExcel.Connection = connExcel; cmdExcel.CommandText = "SELECT * FROM [Tabelle1$]";
Jedoch ist Kopf- & Fußzeile ja ein ganz anderer Bereich.
Nun habe ich feststellen können das man statt '[Tabelle1$]' auch einen eigenen Bereich angeben kann.Quelle: http://technet.microsoft.com/de-de/library/ms141683.aspx
Datenquellen. Die Quelle von Daten in einer Excel-Arbeitsmappe kann ein Arbeitsblatt sein, an das das -Zeichen angefügt werden muss (z. B. Sheet1), oder ein benannter Bereich (z. B. MyRange). In einer SQL-Anweisung muss der Name eines Arbeitsblattes mit Trennzeichen versehen sein (z. B. [Sheet1$]), um Syntaxfehler durch das $-Zeichen zu vermeiden. Der Abfrage-Generator fügt diese Trennzeichen automatisch hinzu. Wenn Sie ein Arbeitsblatt angeben, liest der Treiber den zusammenhängenden Zellenblock ab der ersten nicht leeren Zelle in der linken oberen Ecke des Arbeitsblattes oder Bereichs. Deshalb sind leere Zeilen in den Quelldaten oder eine leere Zeile zwischen Titel- oder Kopfzeilen und den Datenzeilen nicht zulässig.
Die Frage die ich mir nun stelle ist, wie definiere ich solch einen Bereich?
Definiere ich diesen in meinem Quellcode oder muss dieser bereits in der Excel Datei als sogenannter "Beannter Bereich" exisiteren, so dass ich diesen nur anspreche?Bin da etwas ratlos. Zusätzlich habe ich noch diesen Artikel gefunden wo es ähnlich aussieht wie ich mir das gerade vorstelle.
http://support.microsoft.com/kb/257819
Dort finde ich besonders diese Aussage interessant.
Um einen benannten Zellbereich als Ihre Datenherkunft festzulegen, verwenden Sie einfach den definierten Namen. Beispiel:
strQuery = "SELECT * FROM MyRange"
Nur wie definiere ich nun den entsprechenden Bereich?
Eigentlich sollte ich ja davon ausgehen das dieser Bereich bereits vordefiniert.Der Link, http://msdn.microsoft.com/de-de/library/microsoft.office.tools.excel.listobject.headerrowrange(VS.80).aspx bestätigt mir das auch. Nur wie komme ich nun daran. Stehe da gerade etwas auf dem Schlauch.
-
-
Danke erstmal aber danach hatte ich auch schon ge-googlet.
So würde ich es verstehen das ich mir den Bereich erst anlegen muss. Ihn auf
z.B. die Kopfzeile zeigen lasse und diese dann auslese. Somit würde ich dann auf
den erschaffenen Bereich via des SQL Statements zugreifen.Jedoch gehe ich einfach der Logik halber davon aus, dass der Bereich Kopf & Fußzeile bereits ein "Konstanter"-Bereich ist.
strQuery = "SELECT * FROM [Tabelle1$]"
Wenn ich mir vorstelle das jedes Worksheet als eine Tabelle betrachtet wird.
So muss doch auch die Kopf und Fußzeile eine Element der "Datenbank" sein.
Somit sollte man doch auch mit der FROM-Klausel auf diesen Bereich zugreifen können.
-
Bin per Zufall auf folgenden Artikel gestossen, ev. hilfts:
http://www.codeproject.com/KB/dotnet/Exceller.aspxSimon