Hallo Zusammen,
war krank, konnte nicht antworten.
Wie muss ich mir das mit der spezifischen Klasse vorstellen? Meine XLS-Dateien haben mit unter 400 Spalten, ich kann ja nicht per Hand in eine Klasse 400 Properties schreiben. Und wenn ich ein dynamisches ExpandoObject nutze, haben wir das Problem mit den Datentypen ja wieder.
Sorry, wenn die Frage vielleicht ein wenig komisch klingen, aber ich bin recht neu in C#.
List<List<>> sah halt in soweit gut als, als dass ich später über Tbl[i][j] genau auf die Werte zugreifen kann und 2 Indizes habe, die Reihe und Spalte entsprechen.
Grüße
Hallo Zusammen,
das ist mein erster Beitrag und ich hoffe, ich bin im Richtigen Forum.
Meine Frage bezieht sich auf ClosedXML und den Part, wo ich Daten aus einer Excel-Datei auslese.
Grundsätzlich kommen die mit dem Typ XLCellValue, damit kann ich in C# aber nichts anfangen, ich bräuchte die realen Typen.
Diese kann ich auslesen z.B. über Worksheet(1).Cell(1, 1).Datatyp
Wie kann ich das denn aber gleich nach C# nehmen?
Ich habe das jetzt mal mit Switch gelöst, sieht aber irgendwie nicht schön aus:
/*****************************************************/
/* Der Importer selbst */
/*****************************************************/
private XLTBL ImportXL(IXLWorksheet WS)
{
int LastRow, LastCol;
LastRow = WS.LastRowUsed().RowNumber();
LastCol = WS.LastColumnUsed().ColumnNumber();
XLTBL Tbl = new XLTBL(); // XLTBL ist alias für List<List<object>>;
// Werte aus Excel kopieren
for (int i = 1; i <= LastRow; i++) // jede Zeile
{
List<object> Row = new List<object>();
for (int j = 1; j <= LastCol; j++) // jede Spalte
{
switch (WS.Cell(i, j).DataType)
{
case XLDataType.Boolean:
Row.Add(WS.Cell(i, j).GetBoolean());
break;
case XLDataType.Number:
Row.Add(WS.Cell(i, j).GetDouble());
break;
case XLDataType.DateTime:
Row.Add(WS.Cell(i, j).GetDateTime());
break;
default:
Row.Add(WS.Cell(i, j).GetString());
break;
}
}
Tbl.Add(Row);
}
return Tbl;
}