我的代码正在设置很多单元格值。最后,在生成excel文件之前,需要评估每个单元格中的公式。对于大多数床单来说,事情进展顺利。
但是,有一个单元格抛出异常。该单元格正在计算其后的一系列单元格的平均值,并参考其他工作表中的单元格。我想当第一个细胞试图计算平均值时,之后的细胞还没有被评估。
这是该单元格的公式
=IFERROR(AVERAGEIF(D2:AU2,"<>-"),"-")
我怀疑它是因为在其他工作表范围内的单元格int引用了单元格。例如,D2
具有以下公式=Common!E2
。
所以我决定做的是:
try-catch
块中执行公式。我注意到同一个细胞一直在抛出错误。只是为了能够退出循环,我计算到3次迭代。
生成excel生成时,该单元格的值为-
。但是,当我选择单元格然后按enter
时,它会执行并显示正确的值。
我推迟执行该单元格的原因是,在第一次迭代之后,已经评估了引用其他工作表的单元格。但是,它仍然不起作用,因为它一直在抛出异常。
感谢您的帮助。
我使用的是npoi和c#。
答案 0 :(得分:6)
在NPOI中
if(wb is XSSFWorkbook) {
XSSFFormulaEvaluator.EvaluateAllFormulaCells(wb);
} else {
HSSFFormulaEvaluator.EvaluateAllFormulaCells(wb);
}
答案 1 :(得分:1)
使用NPOI时,Evalds的答案是最好的。我正在读取通过FTP接收并加载到我的项目中的excel文件。因此,只需在加载点评估所有单元格。
static void InitializeWorkbook(string path)
{
using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.ReadWrite))
{
xssfworkbook = new XSSFWorkbook(file);
XSSFFormulaEvaluator.EvaluateAllFormulaCells(xssfworkbook);
}
handleSheet(xssfworkbook.GetSheetAt(0));
}
答案 2 :(得分:0)
您检查过MSDN:以编程方式运行Excel计算吗?