Einträge in Exceldatei hinzufügen



  • Ich versuche eine Excel-Datei mit Microsofts Office Bibliothek (Version 14) zu bearbeiten, dabei stosse ich immer auf folgendes Problem:

    - Das Einlesen einer Original Exceldatei (xls) funktioniert
    - ich kann auch eine Zeile (Datum, Zahl, Zahl) hinzufügen
    - ein erneutes Laden klappt auch
    - ein Hinzufügen einer weiteren Zeile und ein Speichern funktioniert, aber ein erneutes Einlesen führt immer zu einer RuntimeBinderException
    - ein Laden direkt in Excel funktioniert immer noch fehlerfrei

    Einlesen:

    range = (excel.Range)ws.get_Range(s1);
    dt = DateTime.FromOADate((double)range.Value2);
    
    range = (excel.Range)ws.get_Range(s2);
    i1 = Convert.ToInt32(ws.get_Range(s2).Value2.ToString());
    
    range = (excel.Range)ws.get_Range(s3);
    i2 = Convert.ToInt32(ws.get_Range(s3).Value2.ToString());
    

    Hinzufügen:

    ws.Cells[nZeilen, 1] = wert.Datum.ToShortDateString();
    ws.Cells[nZeilen, 2] = wert.nGesamt;
    ws.Cells[nZeilen, 3] = wert.nTeil;
    wb.SaveAs(ziel, excel.XlFileFormat.xlWorkbookNormal, null,
                                                null, null, null, excel.XlSaveAsAccessMode.xlShared,
                                                null, null, null, null,
                                                null);          
    excelApp.Quit();
    

    Wie kann das sein? Kann es irgendwie mit dem Datumsformat zu tun haben? Ich weiss nicht mehr weiter!



  • AngelaMerkel schrieb:

    Ich versuche eine Excel-Datei mit Microsofts Office Bibliothek (Version 14) zu bearbeiten, dabei stosse ich immer auf folgendes Problem:

    - Das Einlesen einer Original Exceldatei (xls) funktioniert
    - ich kann auch eine Zeile (Datum, Zahl, Zahl) hinzufügen
    - ein erneutes Laden klappt auch
    - ein Hinzufügen einer weiteren Zeile und ein Speichern funktioniert, aber ein erneutes Einlesen führt immer zu einer RuntimeBinderException
    - ein Laden direkt in Excel funktioniert immer noch fehlerfrei

    Einlesen:

    range = (excel.Range)ws.get_Range(s1);
    dt = DateTime.FromOADate((double)range.Value2);
    
    range = (excel.Range)ws.get_Range(s2);
    i1 = Convert.ToInt32(ws.get_Range(s2).Value2.ToString());
    
    range = (excel.Range)ws.get_Range(s3);
    i2 = Convert.ToInt32(ws.get_Range(s3).Value2.ToString());
    

    Hinzufügen:

    ws.Cells[nZeilen, 1] = wert.Datum.ToShortDateString();
    ws.Cells[nZeilen, 2] = wert.nGesamt;
    ws.Cells[nZeilen, 3] = wert.nTeil;
    wb.SaveAs(ziel, excel.XlFileFormat.xlWorkbookNormal, null,
                                                null, null, null, excel.XlSaveAsAccessMode.xlShared,
                                                null, null, null, null,
                                                null);          
    excelApp.Quit(); 
    [b]excelApp = null;[/b]
    

    Wie kann das sein? Kann es irgendwie mit dem Datumsformat zu tun haben? Ich weiss nicht mehr weiter!

    Versuche mal das am Ende

    excelApp.Quit();
    excelApp = null;



  • Nach langer Suche habe ich nun die Lösung doch noch gefunden. Beim Speichern habe ich in die Datum-formatierte Spalte immer 'DateTime.Now.ToShortDateString()' gespeichert, denn so wird es ja auch in Excel angezeigt. Man muss aber direkt 'DateTime.Now' in der Zelle speichern, denn die Ausgabe ist ja nur eine formatierte Darstellung.

    - Excel selbst stört sich daran nicht, es wird auch alles korrekt angezeigt.
    - C# kann aber beim erneuten Einlesen den Zellen-Inhalt dann nicht mehr in ein Datum konvertieren und stürzt somit ab


Anmelden zum Antworten