Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHPExcel插入数组公式_Php_Phpexcel_Array Formulas - Fatal编程技术网

PHPExcel插入数组公式

PHPExcel插入数组公式,php,phpexcel,array-formulas,Php,Phpexcel,Array Formulas,我要插入此数组公式: {=SUM(IF(FREQUENCY(IF(T9:T977=1,MATCH(U9:U977,U9:U977,0)),ROW(U9:U977)-ROW(U9)+1),1))} 但当我使用: $sheet->getCell("C1")->setValue("{=SUM(IF(FREQUENCY(IF(T9:T977=1,MATCH(U9:U977,U9:U977,0)),ROW(U9:U977)-ROW(U9)+1),1))}"); 它不起作用,我检查了文档,但

我要插入此数组公式:

{=SUM(IF(FREQUENCY(IF(T9:T977=1,MATCH(U9:U977,U9:U977,0)),ROW(U9:U977)-ROW(U9)+1),1))}
但当我使用:

$sheet->getCell("C1")->setValue("{=SUM(IF(FREQUENCY(IF(T9:T977=1,MATCH(U9:U977,U9:U977,0)),ROW(U9:U977)-ROW(U9)+1),1))}");

它不起作用,我检查了文档,但仍然没有找到任何东西。

我找不到任何答案,所以我通过PHPExcel找到了一个解决方案:

在/PHPExcel/Cell.php中
开关($pDataType)
的第251行添加以下内容:

case PHPExcel_Cell_DataType::TYPE_FORMULA_ARRAY:
$this->_value = (string)$pValue;
break;
在/PHPExcel/Cell/DataType.php中添加此常量:

const TYPE_FORMULA_ARRAY = 't';
最后,在
/PHPExcel/Writer/Excel2007/sheet.php
中,我在从第1095行开始的开关中添加了以下内容:

case 't':           // Array Formulae
    $objWriter->startElement('f');
    $objWriter->writeAttribute('t', 'array');
    $objWriter->writeAttribute('ref', $pCellAddress);
    $objWriter->writeAttribute('aca', '1');
    $objWriter->writeAttribute('ca', '1');
    $objWriter->text($cellValue);
    $objWriter->endElement();               
    if ($this->getParentWriter()->getOffice2003Compatibility() === false) {
        if ($this->getParentWriter()->getPreCalculateFormulas()) {
            $calculatedValue = $pCell->getCalculatedValue();
            if (!is_array($calculatedValue) && substr($calculatedValue, 0, 1) != '#') {
                $objWriter->writeElement('v', PHPExcel_Shared_String::FormatNumber($calculatedValue));
            } else {
                $objWriter->writeElement('v', '0');
            }
        } else {
            $objWriter->writeElement('v', '0');
    }
}
break;
然后我使用了如下函数:

$sheet->getCell("C1")->setValueExplicit("=SUM(IF(FREQUENCY(IF(T9:T977=1,MATCH(U9:U977,U9:U977,0)),ROW(U9:U977)-ROW(U9)+1),1))", PHPExcel_Cell_DataType::TYPE_FORMULA_ARRAY);

当我创建一个excel文件时,一切都很好

由于在搜索PHPExcel的继任者PHPSpreadsheet时仍然会出现这个问题/答案,因此我想补充一点,后者支持内置数组公式。只需像往常一样分配公式,并将type属性设置为array:

$attrs = $sheet->getCell("C1")->getFormulaAttributes();
$attrs['t'] = 'array';
$sheet->getCell("C1")->setFormulaAttributes($attrs);

公式在excel中是否可以正常工作?下面的PHPExcelMade解决方案不支持数组公式。您在这里做得很好,但为什么不完成它?目前您只能为1个单元格设置数组函数?非常感谢。我花了一天半的时间寻找这个。我在PHPSReadSheet文档中没有看到任何提及。谢谢,谢谢,谢谢!!!