2016-12-08 48 views
0

我正在使用PHPExcel,我想验证单元格的值。嗯,这工作得细这段代码:PHPExcel混合列验证

$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)); 

不过现在我倒是临客将两个默认值 - 字符串 - 这也应该被允许,体育“cancled”或“错过”。 这可能吗?我没有在这个方向找到任何东西? 另一个想法是创建一个隐藏表,但我不知道对应的值列表可能是什么。

谢谢!

UPDATE:

感谢蒂姆·威廉斯我想:

$objValidation->setType(PHPExcel_Cell_DataValidation::TYPE_CUSTOM); 
$objValidation->setFormula1('=OR(AND('.$currCell.$ii.'>='.$min.','.$currCell.$ii.'<='.$max.'),'.$currCell.$ii.'="canceled",'.$currCell.$ii.'="missed")'); 

奇怪的是,第一和表达被验证,我不能够进入分之外另一个号码/ max。但我仍然无法输入“取消”或“错过”。通过在OpenOffice中插入这个公式,我得到了正确的布尔值。

这是在PHPExcel中使用自定义公式进行验证的正确方法吗?

回答

0

可能是你可以使用一个基于公式的验证:比如这个工作对我来说假设你想允许10和100的值之间唯一的全数字“取消”,“错过” -

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

我不知道如何转换为PHPExcel,但这只是答案的一半