Формула проверки не сохраняется как функция - PullRequest
0 голосов
/ 19 февраля 2019

Я генерирую 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 испортит формат.

...