我正在使用PHPExcel生成模板Excel文档供用户下载,以便他们上传批量数据。
作为其中的一部分,我希望某些字段可以从下拉列表中进行选择。
DataValidation示例显示了如何为单个单元格执行此操作,如下所示:
$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列中的所有单元格都是下拉列表。我怎样才能做到这一点?
由于
答案 0 :(得分: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 :(得分:1)
我知道这是一个非常晚的回复。但是,以防万一。
使用循环(foreach / for)
循环内的
$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++;
}
这将做你想要的。
答案 2 :(得分:1)
来自官方文件:
如果您需要在多个单元格上进行数据验证,可以克隆 规则集:
$objPHPExcel->getActiveSheet()->getCell('B8')->setDataValidation(clone $objValidation);
但是,仍然在2015年底,没有“按区域”的方式设置它。