我想在依賴的phpexcel中設置多個下拉列表。基本上,當您在列A的下拉列表中選擇一個值時,它會在列B的下拉列表中加載不同的內容。PHPExcel多個下拉列表,依賴於
我能夠在單元格上舒適地設置下拉列表。我試圖找出如何基於選擇一個下拉列表來加載內容。
任何意見或解決方案或指導將不勝感激
我想在依賴的phpexcel中設置多個下拉列表。基本上,當您在列A的下拉列表中選擇一個值時,它會在列B的下拉列表中加載不同的內容。PHPExcel多個下拉列表,依賴於
我能夠在單元格上舒適地設置下拉列表。我試圖找出如何基於選擇一個下拉列表來加載內容。
任何意見或解決方案或指導將不勝感激
嗯,我設法弄清楚。以下是未來任何人的要點:
最好使用命名範圍。基本上先定義單元格中的列表項(命名區域)。這可以在不同的工作表上。那麼,讓我們用一個國家和城市的例子。下拉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或默認保存下拉菜單。祝一切順利。
謝謝你提供了一個詳細的答案,如果他們問同樣的問題,指出其他人將會很有用;我將嘗試在下一個版本的PHPExcel –
中提供一個示例@MarkBaker先生,我如何將我的數組傳遞給它。我從數據庫中提取數據並想將其導出爲excel。我怎樣才能通過這個數組。 – Mukesh
偉大的答案,只是一個小東西來解決:
當傳遞getCell細胞('A1') - > getDataValidation()應當'A0'代替。 getCell('B1') - > getDataValidation();應該是'B0'以防止選擇和數據之間的衝突。
編輯:如果我想讓城市也成爲一個列表並依賴於另一個名爲neighborhoods的列表,該怎麼辦?
非常感謝!
你能想出如何在MS Excel本身實現你想要的? –
是的。找到這個方便的指南http://www.excel-easy.com/examples/dependent-drop-down-lists.html –