Laden...

SpreadsheetDocument: Bei Definition einer Zelle zu DataType = CellValues.Date kommt Müll raus

Erstellt von genuin vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.520 Views
G
genuin Themenstarter:in
41 Beiträge seit 2014
vor 9 Jahren
SpreadsheetDocument: Bei Definition einer Zelle zu DataType = CellValues.Date kommt Müll raus

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

S
93 Beiträge seit 2008
vor 9 Jahren

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.

G
genuin Themenstarter:in
41 Beiträge seit 2014
vor 9 Jahren

Vielen Dank, das hat geholfen. Stichwort hier waren die NumberingFormats

Überleg ich mir noch