Laden...

[Erweitert] OpenXML - Excel - Zeile einfügen

Erstellt von telfa vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.792 Views
T
telfa Themenstarter:in
156 Beiträge seit 2012
vor 9 Jahren
[Erweitert] OpenXML - Excel - Zeile einfügen

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

T
telfa Themenstarter:in
156 Beiträge seit 2012
vor 9 Jahren

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