gpt4 book ai didi

PHPExcel 不计算公式

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:47:50 25 4
gpt4 key购买 nike

我正在尝试使用 PHPExcel 1.7.9 在我的 XSLX 工作簿中计算以下公式:=IF($H$7=1,$F$13,$H$227*$ 227 日元)

在我必须更新工作簿中的一些单元格然后使用这一行来计算值之前:

$sheet->getCell('L228')->getCalculatedValue();

但是,PHPExcel 似乎没有正确更新包含公式的单元格。它会抛出一些如下所示的通知消息,但不会更新单元格的计算值:

注意:D:\my-path\hkc\Classes\PHPExcel\Calculation.php 2852行未定义偏移量:2

没有异常(exception),似乎 getCalculatedValue() 返回由 MS Excel 计算的旧缓存值。正如下面所指出的,我已经激活了计算引擎的调试日志记录,但它似乎是空的:

PHPExcel_CalcEngine_Logger Object
(
[_writeDebugLog:PHPExcel_CalcEngine_Logger:private] =>
[_echoDebugLog:PHPExcel_CalcEngine_Logger:private] =>
[_debugLog:PHPExcel_CalcEngine_Logger:private] => Array
(
)

[_cellStack:PHPExcel_CalcEngine_Logger:private] => PHPExcel_CalcEngine_CyclicReferenceStack Object
(
[_stack:PHPExcel_CalcEngine_CyclicReferenceStack:private] => Array
(
)

)

)

我尝试了以下步骤来解决问题:

  1. 停用计算缓存:PHPExcel_Calculation::getInstance()->setCalculationCacheEnabled(FALSE);
  2. 激活计算引擎的 Debug模式:这在How to handle exception with PhpExcel?中有描述。特别是http://phpexcel.codeplex.com/discussions/233047
    然而,我不得不稍微修改引用页面的代码 - 也许 PHPExcel 1.7.9 中发生了一些变化?
    激活调试:PHPExcel_Calculation::getInstance()->writeDebugLog = true;
    获取调试日志:print_r(PHPExcel_Calculation::getInstance()->getDebugLog());

我不明白为什么引擎的实际日志是空的?是引擎在写出任何条目之前停止工作,还是我的调试配置有问题?

但是,我尝试使用 Java 和 Apache POI 评估相同的公式 - 它有效!不幸的是,我必须在当前项目中使用 PHP。

请帮帮我!也许有人知道公式评估有什么问题,或者至少可以给我一些提示,说明如何正确激活调试?

谢谢!

最佳答案

还没有答案,但是写评论太长了:

PHPExcel 1.7.9 将计算引擎从单例修改为多例(需要避免在同时处理多个工作簿时发生冲突)。因此,每个工作簿都运行自己的计算引擎实例,并且在调用

PHPExcel_Calculation::getInstance()

您现在必须指定您需要访问的实例。每个 PHPExcel 实例都有一个 ID 值,维护在用于此目的的 PHPExcel 对象中,您需要将 PHPExcel 对象本身传递给 getInstance() 方法。所以,如果你的 PHPExcel 工作簿是 $objPHPExcel,你需要使用

PHPExcel_Calculation::getInstance($objPHPExcel)

在刷新缓存、启用记录器或读取日志时引用正确的计算引擎实例。

重新。您的错误的细节:您的 IF 公式单元格引用的任何单元格是否引用了包含 CUBE 函数或 SUMIFS 函数的其他公式?这些是我所知道的唯一可能触发此特定错误的函数

编辑

重构 SUMIFS() 函数的示例

=SUMIFS(A2:A3, B2:B3, E1, C2:C3, F1)

如果 B2:B3 满足 E1 标准且 C2:C3 满足 F1 标准,则对 A2:A3 求和。

这可以重构为

=SUMPRODUCT(A2:A3 * (B2:B3=E1) * (C2:C3=F1))

关于PHPExcel 不计算公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20394817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com