PHPExcel混合列验证

时间:2016-12-08 00:25:56

标签: php excel phpexcel calc

我正在使用PHPExcel,我想验证单元格的值。嗯,这个代码非常合适:

SELECT
    T1.Item
    , (T2.QTY-T1.QTY) AS [QTY Diff]
    , (T2.Amount - T1.Amount) AS [Amount Diff]
FROM
    <<Table>> T1
    LEFT OUTER JOIN <<Table>> T2
        ON T1.Item=T2.Item
        AND T1.YEAR=(T2.YEAR-1);

但现在我想添加两个默认值 - 字符串 - 这也应该是允许的,p.e。 “cancled”或“miss”。 这可能吗?我没有找到这个方向的任何东西? 另一个想法是创建一个隐藏的工作表,但我不知道相应的值列表是什么。

谢谢!

更新:

感谢Tim Williams我试过:

$objValidation = $objPHPExcel->getActiveSheet()->getCellByColumnAndRow($tdCount-1,$ii)->getDataValidation();
$objValidation->setType( PHPExcel_Cell_DataValidation::TYPE_WHOLE );
$objValidation->setErrorStyle( PHPExcel_Cell_DataValidation::STYLE_STOP );
$objValidation->setAllowBlank(true);
$objValidation->setShowInputMessage(true);
$objValidation->setShowErrorMessage(true);
$objValidation->setErrorTitle('Input error');
$objValidation->setError('Only integers between '.$min.' and '.$max.' allowed');
$objValidation->setPromptTitle('Permitted Input:');
$objValidation->setPrompt('Only integers between '.$min.' and '.$max.' allowed');
$objValidation->setFormula1(intval($min));
$objValidation->setFormula2(intval($max));

奇怪的是,第一个AND表达式已经过验证,我无法在min / max之外输入另一个数字。但我仍然无法进入“取消”或“错过”。通过在OpenOffice中插入此公式,我获得了正确的布尔值。

在PHPExcel中使用自定义公式进行验证是否正确?

2 个答案:

答案 0 :(得分:0)

可能你可以使用基于公式的验证:例如,这对我有用,假设你只想允许10到100之间的整数或值#34;取消&#34;,&#34;错过&#34 ; -

     =OR(IFERROR(AND(ROUND(H13,0)=H13,H13>=10,H13<=100),FALSE),
         OR(H13="canceled",H13="missed"))

我不知道如何转换为PHPExcel,因此只有半个答案

答案 1 :(得分:0)

  • 尝试评估Excel公式(FORMULAS =>评估公式),它可能会为您提供一些线索。

  • 在我遇到的类似情况下,允许使用十进制范围或特定的字符串,使用TYPE检查有助于解决问题。

类似的东西:

= IF(TYPE(A1)= 1,AND(A1> = 0,A1 <= 10),A1 =“ allowme”)