Php 添加了@符号的公式

Php 添加了@符号的公式,php,phpspreadsheet,Php,Phpspreadsheet,我已经创建了几个公式,并将它们添加到PHPSReadSheet中,没有任何问题。但是当我创建以下公式,添加到PhpSpreadsheet并打开xlsx文件时,8行中的6行有“#VALUE!” 该公式计算大于或等于最小值且小于或等于最大值的一系列单元的标准差 公式是这样创建的: $cf_mP_Stdev = "=STDEV(IF(('" . $samplesWellsSheetName . "'!" . $mpCol . ($writeSampleWellsRow - 319) . ":"

我已经创建了几个公式,并将它们添加到PHPSReadSheet中,没有任何问题。但是当我创建以下公式,添加到PhpSpreadsheet并打开xlsx文件时,8行中的6行有“#VALUE!”

该公式计算大于或等于最小值且小于或等于最大值的一系列单元的标准差

公式是这样创建的:

$cf_mP_Stdev =
   "=STDEV(IF(('" . $samplesWellsSheetName . "'!" . $mpCol . ($writeSampleWellsRow - 319) . ":" . $mpCol . $writeSampleWellsRow . ">=J" . $writeControlPlatesRow . ")*('" .
   $samplesWellsSheetName . "'!" . $mpCol . ($writeSampleWellsRow - 319) . ":" . $mpCol . $writeSampleWellsRow . "<=L" . $writeControlPlatesRow . "),'" .
   $samplesWellsSheetName . "'!" . $mpCol . ($writeSampleWellsRow - 319) . ":" . $mpCol . $writeSampleWellsRow . "))";
$cf\u mP\u Stdev=
“=STDEV(如果((“$samplesWellsSheetName.”!“$mpCol.($writesSamplesWellsRow-319)。”:“$mpCol.$writesSamplesWellsRow.”>=J.“$writeControlPlatesRow.”*)*(“”。

$samplesWellsSheetName.“'!”$mpCol.($WriteSamplesWellsRow-319)。“:”$mpCol.$WriteSamplesWellsRow.“@用于数字/文本格式,因为字符串可能是这个部分的问题。我会在设置值时调试到公式中,如果公式中是@remove

var_dump($formula);
str_replace("@", "", $formula);  
$spreadsheet->getActiveSheet()->setCellValue('A2', $formula);

@用于数字/文本格式,作为字符串。问题可能来自此部分。我会在设置值时调试公式,如果公式中有@remove

var_dump($formula);
str_replace("@", "", $formula);  
$spreadsheet->getActiveSheet()->setCellValue('A2', $formula);

找到如何通过此StackOverflow链接编码数组公式:


我在PHPSReadSheet文档中找不到任何内容。

找到了如何通过此StackOverflow链接编码数组公式:

我在PHPSReadSheet文档中找不到任何内容。

据他们说

隐式求交算子是算法的一部分 对Excel的公式语言进行实质性升级,以支持动态 动态数组带来了显著的新计算能力和 Excel的功能

一般来说,返回多单元格范围或数组的函数 如果它们是在较旧版本的中编写的,则将以@作为前缀 出类拔萃

因此,如果您使用最新的Excel版本打开导出的文件,如果公式不是数组,他们将自动添加@符号。我尝试了OP建议的解决方案,但似乎无法使用PHPSReadSheet编写数组公式

我仍在寻找其他解决方案。

根据他们的说法

隐式求交算子是算法的一部分 对Excel的公式语言进行实质性升级,以支持动态 动态数组带来了显著的新计算能力和 Excel的功能

一般来说,返回多单元格范围或数组的函数 如果它们是在较旧版本的中编写的,则将以@作为前缀 出类拔萃

因此,如果您使用最新的Excel版本打开导出的文件,如果公式不是数组,他们将自动添加@符号。我尝试了OP建议的解决方案,但似乎无法使用PHPSReadSheet编写数组公式


我仍在寻找其他解决方案。

没有成功。在构建字符串$cf\u mP\u Stdev后,我将其分配给了单元格。然后我执行了一个getCell('P4')->getValue();公式定义正确,没有任何“@”符号“=Stdev(IF(('Samples-Wells'!H3:H322>=J4))*('Samples-Wells'!H3:H322I还有其他没有嵌入'@'符号'=STDEV('Controls-Wells'!I3:I18')的STDEV公式。有没有想过它是否与这个特定的STDEV公式有关,这个公式基本上是用''.'和'.''和'*'.''?另外一点注意:我正在Microsoft Excel for Mac(V16.35)上打开这个文件)。如果我在Excels for Windows上打开,则没有@符号,如果我在每个单元格中按Ctrl-Enter键,则会对其进行计算。没有考虑数组公式。需要了解Excel中发生了什么才能使MacNo成功。在生成字符串$cf\u mP\u Stdev后,我将其分配给该单元格。然后,我执行了一个getCell('P4')->getValue();公式定义正确,没有任何“@”符号“=STDEV(如果((('Samples-Wells'!H3:H322>=J4)*)('Samples-Wells'!H3:H322I还有其他未嵌入“@”符号的STDEV公式”=STDEV('Controls-Wells'!I3:I18)“。有没有想过它是否与这个特定的STDEV公式有关,这个公式基本上是用“*”和“*”?另外一个注意事项:我正在Microsoft Excel for Mac(V16.35)上打开这个文件。如果我在Excel for Windows上打开,则没有@符号,如果我在每个单元格中按Ctrl-Enter键,则会对其进行计算。没有考虑数组公式。需要计算Excel for Mac中发生的情况
=STDEV(IF((@'Samples-Wells'!H323:H642 >= J6)*(@'Samples-Wells'!H323:H642 <= L6),'Samples-Wells'!H323:H642))
var_dump($formula);
str_replace("@", "", $formula);  
$spreadsheet->getActiveSheet()->setCellValue('A2', $formula);
$attrs = $sheet->getCell("C1")->getFormulaAttributes();
$attrs['t'] = 'array';
$sheet->getCell("C1")->setFormulaAttributes($attrs);