Hi!
Ich habe programmatisch in Klassen Daten hinterlegt als ein Array (Strings, Int32, Date etc.). Diese möchte ich in ein Spreadsheetdocument einfügen, was auch alles klappt. Nur wenn ich ein Datum einer Zelle zuweise (in meinem Beispiel
new DateTime(2014,07,01)
) dann schreibt er mir in die Zelle (also wenn ich das Excel-File nachher öffne) den Wert 1,07
Woran kann das liegen?
Erstellen des Workbooks, hinzufügen von Worksheet und Wertezuweisung
Workbook<object> wb = new Workbook<object>();
wb.AddWorksheet("MyWorksheet_1");
wb.WorkSheets["MyWorksheet_1"].Cell(0, 0).Value = new DateTime(2014,07,01);
wb.WorkSheets["MyWorksheet_1"].Cell(0, 1).Value = false;
wb.WorkSheets["MyWorksheet_1"].Cell(1, 0).Value = "false";
wb.WorkSheets["MyWorksheet_1"].Cell(1, 1).Value = 100;
Erstellen einer Zelle und Zuweisung
newRow.AppendChild(new Cell() { CellValue = new CellValue (GetCellValue(ws.Cell(row, column).Value) == CellValues.Boolean ? ws.Cell(row, column).Value.ToString().ToLower() : ws.Cell(row, column).Value.ToString()),
DataType = GetCellValue(ws.Cell(row, column).Value),
StyleIndex = 0 });
Funktion GetCellValue:
private CellValues GetCellValue(Object MyValue)
{
//bool
if (MyValue.GetType() == typeof(System.Boolean)) return CellValues.Boolean;
//number
if (MyValue.GetType() == typeof(System.Byte)) return CellValues.Number;
if (MyValue.GetType() == typeof(System.SByte)) return CellValues.Number;
if (MyValue.GetType() == typeof(System.Decimal)) return CellValues.Number;
if (MyValue.GetType() == typeof(System.Double)) return CellValues.Number;
if (MyValue.GetType() == typeof(System.Single)) return CellValues.Number;
if (MyValue.GetType() == typeof(System.Int32)) return CellValues.Number;
if (MyValue.GetType() == typeof(System.UInt32)) return CellValues.Number;
if (MyValue.GetType() == typeof(System.Int64)) return CellValues.Number;
if (MyValue.GetType() == typeof(System.UInt64)) return CellValues.Number;
if (MyValue.GetType() == typeof(System.Int16)) return CellValues.Number;
if (MyValue.GetType() == typeof(System.UInt16)) return CellValues.Number;
//date
if (MyValue.GetType() == typeof(System.DateTime)) return CellValues.Date;
//string
if (MyValue.GetType() == typeof(System.Char)) return CellValues.String;
if (MyValue.GetType() == typeof(System.String)) return CellValues.String;
if (MyValue.GetType() == typeof(System.Object)) return CellValues.String;
//else
return CellValues.String;
}
Überleg ich mir noch
Beim Anlegen eines neuen Sheets stehen alle Formatierungen der Zellen auf Standard. D.h. Excel versucht anhand der Daten, die dann reingeschrieben werden, den Typ zu erkennen.
Dieser Typ wird manmal von Excel her falsch interprtiert. Deswegen passiert of so etwas.
Du mußt einfach die Zelle vor dem reinschreiben als Datum formatieren.
Dann kapiert es auch Excel.
Vielen Dank, das hat geholfen. Stichwort hier waren die NumberingFormats
Überleg ich mir noch