2013-04-22 429 views
4

我正在使用PHPExcel生成模板Excel文档供用户下载,以便他们上传批量数据。PHPExcel设置列上的默认下拉选项

作为其中的一部分,我希望某些字段是下拉选项。

的资料验证示例演示如何为单个细胞做法如下:

$objValidation = $objPHPExcel->getActiveSheet()->getCell('B5')->getDataValidation(); 
$objValidation->setType(PHPExcel_Cell_DataValidation::TYPE_LIST); 
$objValidation->setErrorStyle(PHPExcel_Cell_DataValidation::STYLE_INFORMATION); 
$objValidation->setAllowBlank(false); 
$objValidation->setShowInputMessage(true); 
$objValidation->setShowErrorMessage(true); 
$objValidation->setShowDropDown(true); 
$objValidation->setErrorTitle('Input error'); 
$objValidation->setError('Value is not in list.'); 
$objValidation->setPromptTitle('Pick from list'); 
$objValidation->setPrompt('Please pick a value from the drop-down list.'); 
$objValidation->setFormula1('"Item A,Item B,Item C"'); // Make sure to put the list items between " and " !!! 

这是罚款单个细胞,但我想在B列的所有细胞中的下拉列表中,当新的数据行是添加。我怎样才能做到这一点?

谢谢

回答

1

我知道这是一个非常晚的答复。但是,以防万一。

使用循环(的foreach /对)

循环

$i = 2; 
foreach(...){ 
    $objValidation = $objPHPExcel->getActiveSheet()->getCell('B'.$i)->getDataValidation(); 
    $objValidation->setType(PHPExcel_Cell_DataValidation::TYPE_LIST); 
    $objValidation->setErrorStyle(PHPExcel_Cell_DataValidation::STYLE_INFORMATION); 
    $objValidation->setAllowBlank(false); 
    $objValidation->setShowInputMessage(true); 
    $objValidation->setShowErrorMessage(true); 
    $objValidation->setShowDropDown(true); 
    $objValidation->setErrorTitle('Input error'); 
    $objValidation->setError('Value is not in list.'); 
    $objValidation->setPromptTitle('Pick from list'); 
    $objValidation->setPrompt('Please pick a value from the drop-down list.'); 
    $objValidation->setFormula1('"Item A,Item B,Item C"'); 

    $i++; 
} 

这将做你想要的内部。

+0

这是行不通的:$ objValidation-> setFormula1(''Item A,Item B,Item C''),是否有任何更改用空格添加值? – consigliere 2017-05-13 02:09:09

2

你可以尝试下面的代码:你的开始单元格没有$ i = 3你可以改变这个值,$ i < = 250循环区域。

for ($i = 3; $i <= 250; $i++) 
{ 
    $objValidation2 = $objPHPExcel->getActiveSheet()->getCell('N' . $i)->getDataValidation(); 
    $objValidation2->setType(PHPExcel_Cell_DataValidation::TYPE_LIST); 
    $objValidation2->setErrorStyle(PHPExcel_Cell_DataValidation::STYLE_INFORMATION); 
    $objValidation2->setAllowBlank(false); 
    $objValidation2->setShowInputMessage(true); 
    $objValidation2->setShowDropDown(true); 
    $objValidation2->setPromptTitle('Pick from list'); 
    $objValidation2->setPrompt('Please pick a value from the drop-down list.'); 
    $objValidation2->setErrorTitle('Input error'); 
    $objValidation2->setError('Value is not in list'); 
    $objValidation2->setFormula1('"male,female"'); 
} 
1

来自官方的文档:

如果您需要在多个小区上数据验证,一个可以克隆 规则集:

$objPHPExcel->getActiveSheet()->getCell('B8')->setDataValidation(clone 
$objValidation); 

但是,仍然在2015年有结束没有“每区域”的方式来设置这一点。