ClosedXML处理Excel公式速度过慢,设置手动计算无效求助
解决ClosedXML复制模板行公式慢的问题
给你几个实测有效的优化方向:
批量操作代替逐行处理
别一行一行插入复制,先一次性插完所有需要的空行,再把模板行的公式批量复制到所有新行里。比如先插100行,再遍历新行批量赋值公式,比逐行插完就赋值快很多。代码示例:// 先批量插入行 var templateRow = ws.Row(5); int rowsToAdd = 100; templateRow.InsertRowsBelow(rowsToAdd); // 批量复制公式 var formulaCells = templateRow.CellsUsed(c => c.HasFormula); foreach (var cell in formulaCells) { var formula = cell.FormulaA1; // 把公式复制到下方对应行的单元格 ws.Range(cell.Address.Row + 1, cell.Address.Column, cell.Address.Row + rowsToAdd, cell.Address.Column).FormulaA1 = formula; }用范围复制代替单行CopyTo
直接选中模板行的有效范围,用CopyTo批量复制到目标区域,比单行复制效率高。代码示例:var templateRange = ws.Range("A5:Z5"); var targetRange = ws.Range("A6:Z105"); templateRange.CopyTo(targetRange, XLCopyOptions.Formulas);关闭更多后台消耗项
除了设置CalculateMode = Manual,再加这两句试试:excel.Workbook.TrackChanges = false; excel.Workbook.IgnoreExceptions = true;关闭追踪和异常忽略,能减少后台不必要的检查。
升级ClosedXML版本
老版本的ClosedXML在复制公式和插入行上有性能瓶颈,升级到最新稳定版(比如0.97以上),很多性能问题已经被修复。
内容的提问来源于stack exchange,提问作者A.Baudouin
相关产品推荐
相关产品推荐

