PHPSReadSheet生成一个错误";INDEX()函数的参数数目错误:给定5个,应介于1和4之间;

PHPSReadSheet生成一个错误";INDEX()函数的参数数目错误:给定5个,应介于1和4之间;,php,excel,laravel,codeigniter,phpspreadsheet,Php,Excel,Laravel,Codeigniter,Phpspreadsheet,我试图直接在excel公式栏中输入以下代码 =索引($E$4:$E$132,聚合(15,6,行($1:$30)/($J$4:$J$132=M4),计数($M$4:M4,M4)),工作非常好(下图左栏) 但是如果我使用我的web应用程序生成excel报告文件(PHP,使用CodeIgniter和Laravel)。它显示一个错误“”INDEX()函数的参数数目错误:给定5个,预期在1到4个之间“” 下面是我的示例代码片段: $code = "=INDEX(\$E\$4:\$E\$$occuran

我试图直接在excel公式栏中输入以下代码
=索引($E$4:$E$132,聚合(15,6,行($1:$30)/($J$4:$J$132=M4),计数($M$4:M4,M4))
,工作非常好(下图左栏)


但是如果我使用我的web应用程序生成excel报告文件(PHP,使用CodeIgniter和Laravel)。它显示一个错误“”INDEX()函数的参数数目错误:给定5个,预期在1到4个之间“

下面是我的示例代码片段:

$code = "=INDEX(\$E\$4:\$E\$$occurance, AGGREGATE(15,6,ROW(\$1:\$$occurance) / (\$J\$4:\$J\$$occurance=M$top_cell), COUNTIF(\$M\$4:M$top_cell, M$top_cell)))";
$ews2->setCellValue("L$top_cell", $code);
我也尝试过使用setValueExplicit方法,但是导致excel文件没有预先计算代码,而是将代码作为字符串读取

注意之所以提供TYPE_字符串,是因为如果还使用TYPE_公式,则会出现顶部提到的相同输出

下面是使用setCellValueExplicit


我可以知道正确的解决方案或快速修复方法吗?提前非常感谢

我发现PHP的PHPSReadSheet库还不允许使用
AGGREGATE()
和复杂的公式/函数,所以我找到了另一种方法

通过使用此excel代码

=索引(E$2:E$38,如果(M4=M3,匹配(L3,E$2:E$38,0),0)+匹配(M4,偏移量(J$2,如果(M4=M3,匹配(L3,E$2:E$38,0),0,计数(J$2:J$38)-如果(M4=M3,匹配(L3,E$2:E$38,0),0))

我能够遍历整个范围,确保不会出现重复的出版物名称


这和我的另一个问题有关->

我发现PHP的PHPSReadSheet库还不允许使用
AGGREGATE()
和复杂的公式/函数,所以我找到了另一种解决方法

通过使用此excel代码

=索引(E$2:E$38,如果(M4=M3,匹配(L3,E$2:E$38,0),0)+匹配(M4,偏移量(J$2,如果(M4=M3,匹配(L3,E$2:E$38,0),0,计数(J$2:J$38)-如果(M4=M3,匹配(L3,E$2:E$38,0),0))

我能够遍历整个范围,确保不会出现重复的出版物名称


这和我的另一个问题有关->

PhP、codeigniter或Laravel版本是否支持聚合()?如果他们没有或其中一个没有,那么它会认为index()有太多的参数。我的CodeIgniter应用程序有PHP版本5.6,而我的Laravel应用程序有PHP版本7.2,先生,你认为它是PHP版本吗?我没有任何这些要检查,所以你需要检查,这就是我建议的原因。当你回显$code时,你会得到什么?hello@TimBrownlaw,我还有其他变量,比如
$occurrence
$top\u cell
,它们计算什么单元格应该作为计算的参考,它们只显示数字,与顶部的公式相同。PhP版本,codeigniter或Laravel支架骨料()?如果他们没有或其中一个没有,那么它会认为index()有太多的参数。我的CodeIgniter应用程序有PHP版本5.6,而我的Laravel应用程序有PHP版本7.2,先生,你认为它是PHP版本吗?我没有任何这些要检查,所以你需要检查,这就是我建议的原因。当你回显$code时,你会得到什么?hello@TimBrownlaw,我还有其他变量,比如
$occurance
$top\u cell
,它们计算的单元格应该是计算的参考,它们只显示数字,与顶部的公式相同
$ews2->setCellValueExplicit("L$top_cell", $code, DataType::TYPE_STRING);