PhpSpreadsheet 单元格验证规则禁止无效输入

PhpSpreadsheet cell validation rules to disallow invalid entry

我在 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,但我可能没有找对地方。

为什么在出现 isValid function 验证错误后不清空单元格。代码可能如下所示:

if(! PhpOffice\PhpSpreadsheet\Cell\DataValidator::isValid($yourCell)){
    $yourCell->setValue("");
}

我仍然无法在文档中找到它(尽管我确定它在某处)。但是一旦我能够找出在 PhpSpreadsheet 代码中查看的位置,我就找到了它。来自 PhpSpreadsheet 的非常优雅的解决方案...我只是在我正在研究的基本代码区域中看不到它!

轻松解决,改一个字:

$objValidation->setErrorStyle(\PhpOffice\PhpSpreadsheet\Cell\DataValidation::STYLE_INFORMATION);

变为:

$objValidation->setErrorStyle(\PhpOffice\PhpSpreadsheet\Cell\DataValidation::STYLE_STOP);

大'!'在弹出窗口上给了我一个线索来查看他们的样式代码而不是命令代码。这会弹出同一个框,但带有 'X' 并在无效时阻止更改单元格 ,这正是我想要的。

希望以后能帮助到别人。