EPPlus: das traversieren durch jeden content-block (Zelle fusioniert oder Bereich) von einem Arbeitsblatt?
Ich versuche, die traverse durch die Zellen zusammengeführte Zellen in einem Arbeitsblatt, und ersetzen einige der Vorlagen-Texte mit dynamischen Werten. Allerdings habe ich nicht verwalten, um eine Schleife durch alle nicht-leeren Zellen, bis jetzt. Derzeit ich versuchte diesen code, aber es warf NullReferenceException, wenn es versucht, Zugriff auf die Text-Eigenschaft einer Zelle, die verschmolzen sind.
Habe ich mit Hilfe einer Vorlage-Datei, kopieren die Vorlage-Arbeitsblatt von dort in meine gebaut Arbeitsmappe. Ich versuchte es mit einer einzigen Arbeitsmappe, ohne Sie zu kopieren, es gab das gleiche Ergebnis.
Ich auch versuchte, um die Wo(Zelle => !Zelle.Merge) Schließung in der ersten foreach-Schleife, aber mit dem gleichen Ergebnis.
using (var p = new ExcelPackage(new FileInfo(templateFile)))
{
var ws = _excel.Workbook.Worksheets.Add("Report", p.Workbook.Worksheets[sablonMunkafuzet]);
foreach (ExcelRangeBase cell in ws.Cells)
{
if (string.IsNullOrEmpty(cell.Text)) continue;
var s = cell.Text;
if (s.StartsWith("^^"))
ProcessCell(cell, s.Substring(2));
}
foreach (string mc in ws.MergedCells)
{
var s = ws.Cells[mc].Text;
if (s.StartsWith("^^"))
ProcessCell(ws.Cells[mc], s.Substring(2));
}
}
}
EDIT: ich möchte erreichen, dass das, was ich tun würde, manuell, wenn ich öffnen Sie die Vorlage in Excel. Jeden "block" (ich meine einzelne Zellen oder verbundene Zellen-Bereiche), wo eine specifix-text-Muster erscheint, dann verarbeiten Sie es, und ändern Sie den Wert "block" zu dem, was ich berechnen.
- Sie wissen, dass ein
Cell
ist ein Angebot und kann sich über mehrere Spalten erstrecken oder in Zeilen? Also nur weil der start in die Zelle leer ist, bedeutet nicht, dass am Ende leer ist. - Ich weiß, dass. Ich möchte erreichen, dass das, was ich tun würde, manuell, wenn ich öffnen Sie die Vorlage in Excel. Jeden "block" (ich meine einzelne Zellen oder verbundene Zellen-Bereiche), wo eine specifix-text-Muster erscheint, dann verarbeiten Sie es, und ändern Sie den Wert "block" zu dem, was ich berechnen.
- Welche Linie wirft die Ausnahme?
- Die Zeile, wo ich versuche zu bekommen-Zelle.Text. Ich bin über dieses problem zu lösen, bald werde ich die Lösung posten hier, wenn ich um es zu bekommen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es scheint, wie ich eine Lösung gefunden habe für mein Szenario hier ist es, wenn jemand braucht diesen code in der Zukunft.
Folgende code-Stück durchläuft jeder block (einzelne Zelle fusioniert oder einen Bereich in einem Arbeitsblatt, und einige Verarbeitung. In diesem Fall mache ich eine text-Prüfung, wenn es irgendein austauschbares Formel für mich. Das ^^ ist mein besonderes signal, um anzuzeigen, dass es eine template-definition in den block, was sollte ersetzt werden, mit meinem Laufzeit-Daten.
Mit der helper-Methode, die den text extrahiert aus einer Reihe, wobei die array-Darstellung des zusammengeführten Bereiche zu zählen: