Я пытаюсь настроить несколько выпадающих списков в phpexcel, которые зависят. В принципе, когда вы выбираете значение в выпадающем списке в столбце A, он загружает различный контент в выпадающем списке в столбце B.
Я могу с комфортом настраивать выпадающие списки на ячейках. Я пытаюсь выяснить, как загрузить контент на основе выбора одного раскрывающегося списка.
Любая обратная связь или решения или руководство будут с благодарностью оценены
Хорошо, мне удалось это понять. Вот суть для любого в будущем:
Лучше всего использовать именованные диапазоны. В основном определите перед собой элементы списка (именованные диапазоны) в ячейках. это может быть на другом листе. Итак, давайте использовать пример стран и городов. у выпадающего списка 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!
Теперь для выпадающего списка загружать города в зависимости от страны. Это использует функцию excel, называемую косвенным. В основном возвращает выбранное значение. следовательно, так называемые диапазоны. поэтому я выбираю «Великобритания», он загружает названный диапазон под названием «Великобритания», в котором есть города Великобритании.
$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 или по умолчанию для размещения выпадающих меню. Всего наилучшего.
Отличный ответ, только одна мелочь, чтобы исправить:
Когда передается ячейка в getCell ( 'A1' ) -> getDataValidation (), она должна быть «A0» . То же самое для getCell ( 'B1' ) -> getDataValidation (); Должно быть «B0» для предотвращения конфликтов между выбором и данными.
EDIT: Что делать, если я хочу сделать города также списком и зависимым от, например, другого списка, называемого кварталами?
Большое спасибо!