ワークシート内のセルと結合されたセルをトラバースし、一部のテンプレート テキストを動的な値に置き換えようとしています。ただし、今まで空でないすべてのセルをループすることはできませんでした。現在、このコードを試しましたが、結合されたセルの Text プロパティにアクセスしようとすると NullReferenceException がスローされました。
テンプレート ファイルを使用して、そこからテンプレート ワークシートを作成したワークブックにコピーしています。コピーなしの単一のワークブックで試してみましたが、同じ結果が得られました。
また、 Where(cell => !cell.Merge) クロージャーを最初の foreach ループに入れようとしましたが、結果は同じでした。
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));
}
}
}
編集: Excel でそのテンプレートを開いた場合に手動で行うことを実現したいと思います。特定のテキストパターンが表示されるすべての「ブロック」(個々のセル、または結合されたセル範囲を意味します)を見つけて処理し、その「ブロック」の値を計算した値に変更します。