我正在使用PhpSpreadsheet在PHP中生成XLSX文件,并尝试实现动态下拉列表作为验证规则。
$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弄乱了格式。