使用ClosedXml写入范围公式如何避免Excel添加隐式交集运算符@
可行解决方案
ClosedXML从0.95.0版本开始已经原生支持Excel动态数组公式(对应你提到的Formula2特性),不需要手动操作OpenXml底层,调整少量代码即可解决问题:
- 第一步:将项目引用的ClosedXML Nuget包升级到0.95.0及以上版本
- 第二步:替换原有
FormulaA1赋值逻辑,改用SetDynamicArrayFormula方法写入公式
修改后的ClosedXml写入代码如下:
using ClosedXML.Excel; namespace ClosedXmlWriter { class Program { static void Main(string[] args) { XLWorkbook workbook = new XLWorkbook(XLEventTracking.Disabled); IXLWorksheet sheet = workbook.Worksheets.Add("home"); IXLCell cell = sheet.Cell(1, 1); // 写入动态数组公式,不会自动添加@隐式交集运算符 cell.SetDynamicArrayFormula("=MyTestFunc()"); workbook.SaveAs(@"d:\test.xlsx"); } } }
补充说明
- 该方案不需要修改你现有基于ExcelDNA实现的UDF代码,生成的文件加载插件后打开,公式返回的数组会自动溢出到相邻单元格
- 如果需要固定公式的溢出范围,可以使用方法重载指定范围,示例:
cell.SetDynamicArrayFormula("=MyTestFunc()", new XLRangeAddress(1,1,1,3))即可固定结果溢出到A1:C1区间
内容的提问来源于stack exchange,提问作者Walter Williams
相关产品推荐
相关产品推荐

