NOPI更新Excel的函数运算结果

NPOI修改Excel单元格后自动更新公式计算结果

最近程序里,我都开始用NOPI來处理Excel文档的读写输出,感觉上比Excel DOM、OLE DB for JET、甚至CSV来得稳定轻巧,而NPOI功能的齐全程度更是让我惊喜连连。

今天写了个简单程序要实现类似以下的功能:

Template.xls中有写好的公式计算两个单元格的相加值,A3 = SUM(A1:A2)

程序会打开Template.xls,將A1改成3、A2改成4,另存为Result.xls。(关于NPOI的基本介紹,可以參考MSDN上的中文教学)


using (FileStream fsIn = new FileStream("Template.xls", FileMode.Open))
{
    //打开Excel
    HSSFWorkbook workbook = new HSSFWorkbook(fsIn);
    fsIn.Close();
    //取得第一个工作表
    Sheet sheet = workbook.GetSheetAt(0);
    //将第一列第一个单元格(A1)设成3
    sheet.GetRow(0).GetCell(0).SetCellValue(3);
    //将第二列第一个单元格(A2)设成3
    sheet.GetRow(1).GetCell(0).SetCellValue(4);
    //另存为Result.xls                
    using (FileStream fsOut = new FileStream("Result.xls", FileMode.Create))
    {
        workbook.Write(fsOut);
        fsOut.Close();
    }
}

预计在Result.xls,A3 应该 = SUM(A1:A2) = 3 + 4 = 7才对,结果...

我发现NPOI产出的文件,SUM(A1:A2)仍是停留旧值3,要重新指定一次A3公式,才会更新为7。

花了一阵子,我才找出NPOI控制自动重算公式结果的属性: Sheet.ForceFormulaRecalculation。


    //将第一列第一行(A1)设成3
    sheet.GetRow(0).GetCell(0).SetCellValue(3);
    //将第二列第一行(A2)设成4
    sheet.GetRow(1).GetCell(0).SetCellValue(4);
    //要求公式重算結果
    sheet.ForceFormulaRecalculation = true;
    //另存为Result.xls                
    using (FileStream fsOut = new FileStream("Result.xls", FileMode.Create))
    {
        workbook.Write(fsOut);
        fsOut.Close();
    }

既然花了时间才找到,就留个记录帮助有类似需求的朋友吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值