Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[Erweitert] OpenXML - Excel - Zeile einfügen
telfa
myCSharp.de - Member



Dabei seit:
Beiträge: 162
Herkunft: Rheinbach

Themenstarter:

[Erweitert] OpenXML - Excel - Zeile einfügen

beantworten | zitieren | melden

Hallo und guten Morgen,
in einer Applikation ist es erforderlich ein Excel-Dokument zu befüllen und mit neuen Zeilen zu versehen. Es wird wohl ein Ergebnis erzielt aber das kann nicht befriedigen.
Zwei Hauptprobleme erkenne ich nach ersten Tests:
- Es werden scheinbar keine neuen Zeilen eingefügt sondern bestehende Zeilen überschrieben.
- Numerische Werte werden als String aufgenommen.

Mit folgender Syntax werden die betroffenen Bereiche ausgeführt. Als erstes die Syntax zum Anlegen einer neuen Zeilen:


        Row newRow = new Row() { RowIndex = rowNum };
        sheet.InsertAt<Row>(newRow, (int)rowNum);

Mit dieser Syntax wird ein numerischer Wert in eine Zelle geschrieben.


                Cell CellD = actRow.Elements<Cell>().Where(c => c.CellReference.Value == "D" +rowNum.ToString()).First();
                CellD.CellValue = new CellValue(dr["feb_ausg_gepAusg"].ToString());
                CellD.DataType = new EnumValue<CellValues>(CellValues.Number);

Kann einer erkennen was da zu Problemen führt?
Ist eine andere Vorgehenswese effektiver?

Vielen Dank und viele Grüße,
Karl
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von telfa am .
private Nachricht | Beiträge des Benutzers
telfa
myCSharp.de - Member



Dabei seit:
Beiträge: 162
Herkunft: Rheinbach

Themenstarter:

beantworten | zitieren | melden

Hallo noch einmal,

die Sachen mit den numerischen Werten ist jetzt geklärt.
Mann muss aufpassen dass bei ToString() der Wert in der DataRow in den numerischen Wert übernommen wird und bei ToString die Option CultureInfo.InvariantCulture verwendet wird:


                Cell CellE = actRow.Elements<Cell>().Where(c => c.CellReference.Value == "E" +rowNum.ToString()).First();
                decimal ValE = (decimal)dr["feb_ausg_zuwAusg"];
                CellE.CellValue = new CellValue(ValE.ToString(CultureInfo.InvariantCulture));
                CellE.DataType = new EnumValue<CellValues>(CellValues.Number);

Was mir noch Sorgen macht ist das Einfügen neuer Zellen.
Im Excelsheet befinden sich beispielsweise die Zeilen 12,13,14 ...
Jetzt möchte ich die Zeile 13 einfügen. Die aktuelle Zeile 13 sollte also dann die Zeile 14 sein und jede danach folgende ebenfalls verschoben werden.

Die hatte ich mit folgender Syntax erzielen wollen:


        Row prevRow = sheet.Elements<DocumentFormat.OpenXml.Spreadsheet.Row>().Where(r => r.RowIndex == rowNum).First();
        Row newRow = new Row() { RowIndex = rowNum };
        sheet.InsertBefore(newRow, prevRow);  //.InsertAt<Row>(newRow, (int)rowNum);

Eine Prüfung ergab im Anschluss leider dass jetzt mehrere Zeilen mit der gleichen Zeilennummer vorhanden sind.

Hat hier jemand einen Tipp?

Viele Grüße,
Karl
private Nachricht | Beiträge des Benutzers