PHPSpreadsheet генерирует ошибку «Неверное количество аргументов для функции INDEX (): задано 5, ожидается от 1 до 4» - PullRequest
1 голос
/ 07 мая 2019

Я попытался ввести следующий код непосредственно в строке формул Excel =INDEX($E$4:$E$132,AGGREGATE(15,6,ROW($1:$30) / ($J$4:$J$132=M4), COUNTIF($M$4:M4, M4))) и прекрасно работает (левая колонка на рисунке ниже).

pic

Но если я использую свое веб-приложение для создания файла отчета 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 НЕ выполняет предварительный расчет кода, он считывает код в виде строки

$ews2->setCellValueExplicit("L$top_cell", $code, DataType::TYPE_STRING);

NOTE TYPE_STRING предоставляется, потому что, если также используется TYPE_FORMULA, происходит тот же вывод, упомянутый вверху

Вот как это выглядит при использовании setCellValueExplicit

Precoded from PHP Могу ли я узнать правильное решение или быстрое решение для этого?Заранее большое спасибо!

1 Ответ

0 голосов
/ 09 мая 2019

Я обнаружил, что библиотека PHPSpreadsheet для PHP еще не позволяет использовать AGGREGATE() и сложные формулы / функции, поэтому я нашел другой способ обойти

Используя этот код Excel

=INDEX(E$2:E$38,IF(M4=M3,MATCH(L3,E$2:E$38,0),0)+MATCH(M4,OFFSET(J$2,IF(M4=M3,MATCH(L3,E$2:E$38,0),0),0,COUNT(J$2:J$38)-IF(M4=M3,MATCH(L3,E$2:E$38,0),0),1),0))

Мне удалось пройти весь диапазон и убедиться, что повторяющиеся названия публикаций не появятся

Это связано с другим моим вопросом -> Excel - Получение 2-й или n-й подходящей строки из ваших соответствующих данных

...