我正在尝试遍历工作表中的单元格和合并单元格,并用动态值替换一些模板文本。但是,直到现在我才设法遍历所有非空单元格。目前我尝试了这段代码,但是当它试图访问合并的单元格的 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 中打开该模板,我想实现手动操作。要找到出现特定文本模式的每个“块”(我的意思是单个单元格或合并的单元格范围),然后对其进行处理,并将该“块”的值更改为我计算的值。