TDM Geschrieben 11. Juni 2008 Teilen Geschrieben 11. Juni 2008 Grüße, ich versuche ein, aus einer mdb ausgelesenes DataSet, in eine Exceldatei zu schreiben. An sich funktioniert das auch, Daten stehen drin und so. Allerdings bekomm ich da bei Zahlen immer so einen komischen Hinweis: Die Zahl in dieser Zelle ist als Text formatiert oder es ist ein Apostroph vorangestellt. Wundert mich bissl, warum der das als Text formatiert, weil im DataSet stehen die Spalten als Zahl (double/int) drin. Eingetragen wird das ganze mit OleDB. Woran liegt das? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Faustenator Geschrieben 11. Juni 2008 Teilen Geschrieben 11. Juni 2008 (bearbeitet) hmm, also Du könntes mal schauen wie die Doubles verarbeitet werden... z.b. wie sich z.B. der Unterschied zwischen 3.141 und 3,141 bemerkbar macht Wenn das gleiche Problem bei Integern auch auftaucht kannst Du denn Tip ignorieren ;-) (Ähnliche Probleme hatte ich damals aber auch als ich in nem Java-Progamm über POI Daten in Exceltabellen schreiben musste. Das war da auch recht nervig mit den Formatierungen ) Bearbeitet 11. Juni 2008 von Faustenator Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 12. Juni 2008 Autor Teilen Geschrieben 12. Juni 2008 Ja, also double wird mit Punkt eingetragen, aber: bevor ich die Daten überhaupt eintrage, erzeuge ich mittels COM die Datei (für jede Tabelle ein Worksheet), dort stehen dann auch die Spalten etc drin. Bei Zahlen (int/double) wird die Formatierung entweder auf "#" oder "#.##" gesetzt, von daher sollte das problem eigentlich nicht auftreten... im Übrigen: bei Ganzzahlen (der ID [ich nenns dort "Nr", weil ID ja ein Excelschlüsselwort ist] z.b.) ist das auch. Außerdem: Komischerweise kommt die fehlermeldung bei Texten auch, bzw bestimmte Werte haben das Format ##/##, andere wiederum #### - dieser will er mir auch als Zahl eintragen (obwohl ich ihm ausdrücklich gesagt hab, dass die Spalte Strings sind ["@"]) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 13. Juni 2008 Autor Teilen Geschrieben 13. Juni 2008 Sooooo.... Nach bisschen rumprobieren, hab ichs nun zum Großteil hinbekommen. Um das Schema zu erzeugen nutze ich ja wie gesagt eine andere Funktion: public static void WriteTableSchemaToExcelFile(DataSet dataSet, string fileName) { // Excel im Hintergrund öffnen Excel.Application excel = new Excel.Application(); // Neue Mappe erstellen Excel.Workbook book = excel.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet); foreach(DataTable table in dataSet.Tables) { // Neues Tabellenblatt erstellen Excel.Worksheet sheet = (Excel.Worksheet)book.Sheets.Add(Missing.Value, Missing.Value, Missing.Value, Missing.Value); // Name des Tabellenblatts festlegen sheet.Name = table.TableName; // Spalten der Tabelle durchlaufen for (int i = 1; i <= table.Columns.Count; i++) { DataColumn column = table.Columns[i - 1]; Excel.Range range = (Excel.Range)sheet.Cells[1, i]; range.Value2 = column.ColumnName; range = (Excel.Range)sheet.Cells[2, i]; if (typeof(double) == column.DataType) { range.NumberFormat = "#0,#0"; } else if (typeof(int) == column.DataType) { range.NumberFormat = "#0"; } else { range.NumberFormat = "@"; } } Marshal.ReleaseComObject(sheet); } // Dokument speichern book.SaveAs(fileName, Excel.XlFileFormat.xlWorkbookNormal, Missing.Value, Missing.Value, false, false, Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); // COM-Verweise freigeben Marshal.ReleaseComObject(book); // Excel schließen excel.Quit(); // Excel.Application COM-Verweis freigeben Marshal.ReleaseComObject(excel); } Vorher (als es noch nicht ging) hab ich immer den Formatstring von den Tabellenköpfen verändert; nun nehm ich die Zeile drunter - dadurch rutscht komischerweise zwar alles etwas nach unten, aber das ist mir egal und sieht so und so besser aus. Problem was jetzt nur noch besteht, ist, dass ich eine Spalte mit Stringwerten hab, in der meistens Werte im Sinne von "00/00" stehen, es kann aber auch zu den Werten "0000" kommen. So, Problem an der Geschichte ist, dass die Dinger wirklich nur als String eingetragen werden (sollen), Excel bringt mir allerdings weiterhin das grüne Häckchen "Blabla Zahl als String eingetragen usw.". Bei manchen Variationen mit dem Slash, behauptet er sogar was von einem DATE. Wie mach ich dem jetzt klar, dass das nur string ist? Ich mein das Format "@" müsste Excel doch wissen, dass er es nicht konvertieren soll, oder? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 13. Juni 2008 Autor Teilen Geschrieben 13. Juni 2008 ok, es war ein Excelproblem. :hells: Hab die überflüssigen Fehlerbehandlungen rausgenommen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.