Я генерирую XLSX-файлы в PHP, использую PhpSpreadsheet и пытаюсь реализовать динамический раскрывающийся список в качестве правила проверки.
$validator = $cell->getDataValidation();
$validator->setType(\PhpOffice\PhpSpreadsheet\Cell\DataValidation::TYPE_LIST);
$validator->setErrorStyle( \PhpOffice\PhpSpreadsheet\Cell\DataValidation::STYLE_INFORMATION );
$validator->setAllowBlank(false);
$validator->setShowInputMessage(true);
$validator->setShowErrorMessage(true);
$validator->setShowDropDown(true);
$validator->setFormula1("=OFFSET(values!\$D\$2:\$D\$6,OFFSET(values!\$B\$2,MATCH(A2,values!\$A\$2:\$A\$3)-1,0),0,OFFSET(values!\$C\$2,MATCH(A2,values!\$A\$2:\$A\$3)-1,0),1)");
Когда я использую простое выражение диапазона, такое как values!$A$2:$A$20
, тогда это работает правильно.Но когда используется функция, как описано выше, то после открытия листа в Libreoffice формула проверки не начинается со знака =
(равно), и правило проверки не работает.
Когда я вручную редактирую формулу в настройках проверки для конкретной ячейки и добавляю =
в начале, тогда все работает нормально.Есть ли решение для добавления формулы в правило проверки?
Обновление: теперь я попробовал это сделать в Excel 2010, но он только что удалил правила проверки в виде recovery
нечитаемых данных.Он отлично работает, когда используются только выражения диапазона, поэтому я предполагаю, что PhpSpreadsheet испортит формат.