在计算工作簿中的单元格时,我看到了不寻常的错误。对于上下文,POI被用于使用定义的名称将值输入到excel工作簿中。Excel然后接收输入,并进行各种计算和查找来计算一组输出量,根据它对应的美国州的不同,处理方式不同。我看到的问题是,当评估一组特定的工作表时(在本上下文中,我们将使用佛罗里达州),它们的单元格的值为org.apache.poi.ss.formula.eval.ErrorEval[#REF!]
,从而中断所有输出值。通常情况下,当我得到不正确的输出时,我可以通过在插入所有输入后保存电子表格、评估工作簿(使用评估所有()
),然后将更新的“调试器”版本保存到本地机器来快速找到它们。然而,这个问题是,当我检查更新的版本时,我的输出量似乎已经成功计算,并且我在工作簿中的任何地方都没有看到任何#RREF!错误。
使用各种输入值组合,这表明只指向一组特定的页导致错误。
从FormulaEvaluatorsevaluateFormulaCell(cell)
函数更改工作表的求值方式,然后解析以字符串形式返回cellValue的开关中的响应,只需使用evaluateAll()
。
删除所有指向工作簿的外部链接,并删除潜在麻烦工作表上的条件格式。
启用POI日志以尝试查找问题的根本原因。
在执行计算之前,使用FormulaEvaluatorclearAllCachedResultValues()
清除缓存的值。
最后,确保所有电子表格都不包含任何不受支持的POI公式,包括FunctionEvalgetSupportedFunctionNames()
和getNotSupportedFunctionNames()
。
这是第一个显示ErrorEval[#REF!]的POI日志问题
...
DEBUG - Evaluated Assumed Census!C41 to org.apache.poi.ss.formula.eval.NumberEval [0.0714285714285714]
DEBUG - Evaluated Lookup Table 1!D41 to org.apache.poi.ss.formula.eval.NumberEval [0.0662525879917184]
DEBUG - Evaluated Lookup Table 1!E41 to org.apache.poi.ss.formula.eval.NumberEval [0.13768115942029]
DEBUG - Evaluated Lookup Table 1!E57 to org.apache.poi.ss.formula.eval.NumberEval [0.0196687370600414]
DEBUG - Evaluated Calc Table 2 FL!O4 to org.apache.poi.ss.formula.eval.ErrorEval [#REF!]
DEBUG - Evaluated Calc Table 2 FL!O88 to org.apache.poi.ss.formula.eval.ErrorEval [#REF!]
DEBUG - Evaluated Input Sheet!E165 to org.apache.poi.ss.formula.eval.ErrorEval [#REF!]
DEBUG - Evaluated Input Sheet!D165 to org.apache.poi.ss.formula.eval.ErrorEval [#REF!]
DEBUG - Evaluated Input Sheet!D198 to org.apache.poi.ss.formula.eval.ErrorEval [#REF!]
DEBUG - Evaluated Calc Table 2 FL!Q4 to org.apache.poi.ss.formula.eval.ErrorEval [#REF!]
DEBUG - Evaluated Calc Table 2 FL!Q88 to org.apache.poi.ss.formula.eval.ErrorEval [#REF!]
DEBUG - Evaluated Input Sheet!E167 to org.apache.poi.ss.formula.eval.ErrorEval [#REF!]
DEBUG - Evaluated Input Sheet!D167 to org.apache.poi.ss.formula.eval.ErrorEval [#REF!]
DEBUG - Evaluated Input Sheet!D200 to org.apache.poi.ss.formula.eval.ErrorEval [#REF!]
DEBUG - Evaluated Calc Table 2 FL!P4 to org.apache.poi.ss.formula.eval.ErrorEval [#REF!]
DEBUG - Evaluated Calc Table 2 FL!R4 to org.apache.poi.ss.formula.eval.ErrorEval [#REF!]
DEBUG - Evaluated Calc Table 2 FL!R88 to org.apache.poi.ss.formula.eval.ErrorEval [#REF!]
DEBUG - Evaluated Input Sheet!E168 to org.apache.poi.ss.formula.eval.ErrorEval [#REF!]
...
此外,这也是目前评估电子表格的方式。
when (evaluator.evaluateFormulaCell(cell)) {
CellType.NUMERIC -> cell.numericCellValue
CellType.STRING -> cell.stringCellValue.toString().toDoubleOrNull() ?: 0.0
CellType.BOOLEAN -> cell.booleanCellValue.toString().toDoubleOrNull() ?: 0.0
CellType.ERROR -> cell.errorCellValue.toString().toDoubleOrNull() ?: 0.0
else -> cell.toString().toDoubleOrNull() ?: 0.0
}
预期结果是调试器工作表输出单元格上的值,但是结果中的输出值要么是0,要么是23。调试器电子表格在使用输入进行处理并由POI评估后不包含任何#REF!错误,相反,它显示了我通常期望的有效值。
更新:还尝试将evaluate更改为使用evaluator。评估(细胞)。在switch语句中输入cellType
,现在调试器电子表格显示#REF!处处然而,看到excel中的所有错误并不能真正帮助指出问题的根本原因。手动输入值时,电子表格也能正确计算。
在Calc Table 2 FL
表中,OFFSET
公式用于非常大的查询(超过255列)。在深入研究了createOffset
的Apache POI源代码后,我们发现:
if (absRows.isOutOfBounds(0, 65535)) {
throw new EvaluationException(ErrorEval.REF_INVALID);
}
因此,对POI函数中的列数有一个有意的限制。我不知道为什么,但我肯定想听听它为什么存在
我遇到了这个问题,只适用于,如果我把它拿出来,它停止工作问题。 使用setTimeout的示例 JXS 我已经按照这个例子React集中在渲染后的输入 渲染函数
问题内容: 我问这个问题是因为我知道以下检查列表是否为空的pythonic方法: 将打印等,所以这让我找出与真值; 但是,如果我尝试将[]和False直接“比较”,则会获得以下信息: 等等… 这里发生了什么?我觉得我确实缺少一些明显的东西。 问题答案: 该语句在布尔上下文中评估所有内容,就像对内置函数的隐式调用一样。 这是您实际检查语句如何评估事物的方式: 参见真值测试文档,空列表被 认为是错误的
我对VBA相当陌生,请放心。我试图设置一种方法,从一个单元格区域(总是相同的)获取数据,并将这些数据输入到现有的主工作簿中。 null
当在列中单击文本“发送调查”时,我正在尝试从工作表“”上的活动行复制单元格b中的值,并将其粘贴到单元格中。A2在我的另一个工作簿“”上的“”表。 由于某种原因,我没有收到任何错误,但是没有任何内容被粘贴到我的其他工作簿的单元格A2中。 有人能告诉我哪里出了问题吗。提前感谢
描述 (Description) 如果EXPR或$ _(如果未提供EXPR)是引用,则此函数返回true值。 返回的实际值还定义了引用引用的实体类型。 内置类型是 - REF SCALAR ARRAY HASH CODE GLOB LVALUE IO::Handle 如果变量被bless()函数祝福,那么将返回新的数据类型。 新数据类型通常是类名。 语法 (Syntax) 以下是此函数的简单语法