Forums Neueste Beiträge
 

per odbc oder ado excel auslesen, leider noch einmal

01/07/2009 - 08:59 von Christian Stüben | Report spam
Dank der Hinweise auf http://support.microsoft.com/kb/257819/ weiß ich ja
jetzt, wie ich mit VB oder c++ auslesen kann, welche Datenblàtter in einer
Excel-Datei vorhanden sind. Aber leider nicht für c# (jajaja, hàtte ich auch
erwàhnen müssen).

Beim Versuch, die Beispiele für c# umzusetzen, komme ich nicht so recht
weiter.

ADODB.Connection adoconn = new ADODB.Connection ();
adoconn.Provider = "Microsoft.Jet.OLEDB.4.0";
adoconn.ConnectionString = "Data
Source=e:\\Inetpub\\wwwroot\\fmp.haifischbar.com\\tests\\exceltest.xls;Extended
Properties=Excel 8.0;";
adoconn.CursorLocation = ADODB.CursorLocationEnum.adUseClient;

ADODB.Recordset rs = new ADODB.Recordset ();

adoconn.Open(adoconn.ConnectionString, "", "", -1);
rs = adoconn.OpenSchema(ADODB.SchemaEnum.adSchemaTables,
system.grossesfragezeichen.undwiegehtesweiter (new objekt ichsehnichtdurch))

den adoconn.open habe ich (glaub ich wenigstens) zurechtbiegen können, den
rs=adoconn.openschema hingegen nicht. Der Intellisense verlangt noch ein
Objekt restrictions, und ein Objekt schemaid. Wie muß ich diese aufbauen?
Die Online-Hilfe unter
http://msdn.microsoft.com/en-us/library/ms676705(VS.85).aspx ist nicht
wirklich hilfreich. Auch www.connectionstrings.com hat mir da nicht
weitergeholfen.


Wo gibt es Beispiele, wie ich unter c#, vs2005, .net2.0 auslesen kann,
welche Datenblàtter in einer Excel-Datei vorhanden sind, bzw. wie die
einzelnen Datenblàtter nachher zu lesen sind?


Danke im Voraus!
mfg Chris
 

Lesen sie die antworten

#1 Elmar Boye
01/07/2009 - 10:42 | Warnen spam
Hallo Christian,

Christian Stüben schrieb:
Dank der Hinweise auf http://support.microsoft.com/kb/257819/ weiß ich
ja jetzt, wie ich mit VB oder c++ auslesen kann, welche Datenblàtter in
einer Excel-Datei vorhanden sind. Aber leider nicht für c# (jajaja,
hàtte ich auch erwàhnen müssen).

ADODB.Connection adoconn = new ADODB.Connection ();



Kein Grund ADODB aus der Ecke auszugraben.
ADODB basiert auf OleDB -> gibt es also schon alles.

Eine schnell gestrickte Variante die das gleiche mit
GetOleDbSchemaTable erledigt siehe unten.

Gruß Elmar


internal static void EnumExcelWorksheets()
{
const string ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0.1;Data Source=F:\Mappe1.xls;Extended Properties='Excel 8.0';";

using (OleDbConnection connection = new OleDbConnection(ConnectionString))
{
connection.Open();

// Arbeitsblàtter
DataTable schemaTable = connection.GetOleDbSchemaTable(
OleDbSchemaGuid.Tables,
new string[] { null, null, null, null });
Console.WriteLine("Schema Table");
DumpTable(schemaTable, "TABLE_NAME");

// Erstes Arbeitsblatt
string tableName = (string)schemaTable.Rows[0]["TABLE_NAME"];
DataTable columnTable = connection.GetOleDbSchemaTable(
OleDbSchemaGuid.Columns,
new string[] { null, null, tableName, null });
Console.WriteLine("Columns für {0}", tableName);
// DATA_TYPE ==> OleDbType
DumpTable(columnTable, "COLUMN_NAME", "ORDINAL_POSITION", "DATA_TYPE");
}

}

internal static void DumpTable(DataTable table, params string[] columnNames)
{
Console.WriteLine("Tabelle: {0} => {1} Zeilen", table.TableName, table.Rows.Count);

List<string> columns = new List<string>(columnNames);
int rowIndex = 0;
foreach (DataRow row in table.Rows)
{
rowIndex++;
Console.WriteLine("Zeile: {0}", rowIndex);
foreach (DataColumn column in table.Columns)
{
if (columns.Count == 0 || columns.Contains(column.ColumnName))
Console.WriteLine("\t{0} = {1}", column.ColumnName, row[column]);
}
Console.WriteLine("");
}
}

Ähnliche fragen