Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[C#] Daten in Excel eintragen - Formatfehler

Empfohlene Antworten

Veröffentlicht

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?

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 von Faustenator

  • Autor

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 ["@"])

  • Autor

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?

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.