我正在尝试在依赖的phpexcel中设置多个下拉列表。基本上,当您在A列的下拉列表中选择一个值时,它会在B列的下拉列表中加载不同的内容。
我能够轻松地在单元格上设置下拉列表。我试图找出如何根据一个下拉列表的选择加载内容。
非常感谢任何反馈或解决方案或指南
答案 0 :(得分:10)
我设法搞清楚了。这是未来任何人的要点:
最好使用命名范围。基本上在单元格中定义列表项(命名范围)。这可以在不同的工作表上。所以,让我们举一个国家和城市的例子。下拉1将有县,下拉2将有城市。因此,定义命名范围。一个将被称为国家。其他两个命名范围将在国家名称后面调用。所以,我们走吧。
$objPHPExcel->getSheetByName('Worksheet 1')->SetCellValue("A1", "UK");
$objPHPExcel->getSheetByName('Worksheet 1')->SetCellValue("A2", "USA");
$objPHPExcel->addNamedRange(
new PHPExcel_NamedRange(
'countries',
$objPHPExcel->getSheetByName('Worksheet 1'),
'A1:A2'
)
);
$objPHPExcel->getSheetByName('Worksheet 1')->SetCellValue("B1", "London");
$objPHPExcel->getSheetByName('Worksheet 1')->SetCellValue("B2", "Birmingham");
$objPHPExcel->getSheetByName('Worksheet 1')->SetCellValue("B3", "Leeds");
$objPHPExcel->addNamedRange(
new PHPExcel_NamedRange(
'UK',
$objPHPExcel->getSheetByName('Worksheet 1'),
'B1:B3'
)
);
$objPHPExcel->getSheetByName('Worksheet 1')->SetCellValue("C1", "Atlanta");
$objPHPExcel->getSheetByName('Worksheet 1')->SetCellValue("C2", "New York");
$objPHPExcel->getSheetByName('Worksheet 1')->SetCellValue("C3", "Los Angeles");
$objPHPExcel->addNamedRange(
new PHPExcel_NamedRange(
'USA',
$objPHPExcel->getSheetByName('Worksheet 1'),
'C1:C3'
)
);
那就是命名范围。一个是国家,另一个是每个国家的城市范围。现在加载第一个下拉列表以选择国家。
$objValidation = $objPHPExcel->getActiveSheet()->getCell('A1')->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("=countries"); //note this!
现在根据国家/地区的下拉列表加载城市。这使用名为Indirect的excel函数。基本上返回选定的值。因此命名相似的范围。所以我选择" UK",它加载名为" UK"有英国城市。
$objValidation = $objPHPExcel->getActiveSheet()->getCell('B1')->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('=INDIRECT($A$1)');
注意:我使用过两张纸。工作表1用于保存数据和工作表0或默认用于保存下拉列表。一切顺利。
答案 1 :(得分:0)
很好的答案,只需要修理一件小事:
在getCell中传递单元格时(' A1' ) - > getDataValidation()它应该是' A0' 代替。 getCell相同(' B1' ) - > getDataValidation();应该' B0' 以防止选择和数据之间的冲突。
编辑:如果我想让城市也成为一个列表并依赖于另一个名为邻里的列表,该怎么办?
非常感谢!