我正在Laravel应用程序中使用PhpSpreadsheet来输出需要对其进行相当严格控制的电子表格,以便允许在输入数据后将同一电子表格重新输入到应用程序中。
我可以控制数据类型,甚至当用户输入不正确的类型(例如:
但是,一旦用户单击“确定”或“取消”,则格式错误的文本将保留在单元格中。 是否有一种方法不仅可以为用户标记它,而且可以完全禁止不正确的输入?
当前示例代码:
if($sub['type'] === 'date') {
$ws->getStyle('C' . $row)->getNumberFormat()->setFormatCode(
\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_DMYSLASH
);
$objValidation = $ws->getCell('C' . $row)->getDataValidation();
$objValidation->setType(\PhpOffice\PhpSpreadsheet\Cell\DataValidation::TYPE_DATE);
$objValidation->setErrorStyle(\PhpOffice\PhpSpreadsheet\Cell\DataValidation::STYLE_INFORMATION);
$objValidation->setAllowBlank(true);
$objValidation->setShowInputMessage(true);
$objValidation->setShowErrorMessage(true);
$objValidation->setShowDropDown(true);
$objValidation->setErrorTitle('Input error');
$objValidation->setError('Please enter a date in the format d/m/yy only.');
}
我想我已经错过了PhpSpreadsheet手册中的某些内容?我已经在诸如setAllowBlank
之类的某些方法上研究了基本代码,但我可能找不到合适的位置。
答案 0 :(得分:1)
为什么在验证错误后不清空单元格,所以出现isValid function。代码如下:
if(! PhpOffice\PhpSpreadsheet\Cell\DataValidator::isValid($yourCell)){
$yourCell->setValue("");
}
答案 1 :(得分:0)
我仍然在文档中找不到这个(尽管我确定它在某处)。但是,一旦我能够找出 PhpSpreadsheet 代码的位置,就可以找到它。 PhpSpreadsheet 的非常优雅的解决方案...在我正在研究的基本代码领域中,我只是看不到它!
轻松解决,只需更改一个词:
$objValidation->setErrorStyle(\PhpOffice\PhpSpreadsheet\Cell\DataValidation::STYLE_INFORMATION);
成为:
$objValidation->setErrorStyle(\PhpOffice\PhpSpreadsheet\Cell\DataValidation::STYLE_STOP);
大'!'弹出窗口上的提示给了我一个提示,让他们看看他们的样式代码而不是命令代码。这将弹出相同的框,但带有'X'并防止更改无效的单元格,这正是我想要的。
希望以后能帮助别人。