Zum Inhalt springen

[C#] Daten in Excel eintragen - Formatfehler


TDM

Empfohlene Beiträge

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...