PHPExcel формула вставки массива

Я хочу вставить эту формулу массива:

{=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))}");

Это не работает, я проверил документацию, но все еще ничего не нашел.

2

Решение

Я не мог найти никакого ответа, поэтому я прошел через PHPExcel и нашел себе решение:

in /PHPExcel/Cell.php в строке 251 в switch($pDataType) Добавь это:

case PHPExcel_Cell_DataType::TYPE_FORMULA_ARRAY:
$this->_value = (string)$pValue;
break;

in /PHPExcel/Cell/DataType.php добавьте эту константу:

const TYPE_FORMULA_ARRAY = 't';

Наконец в /PHPExcel/Writer/Excel2007/Worksheet.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!

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]