PHPExcel多个下拉列表依赖

Moh*_*mar 8 php phpexcel

我试图在依赖的phpexcel中设置多个下拉列表.基本上,当您在A列的下拉列表中选择一个值时,它会在B列的下拉列表中加载不同的内容.

我能够轻松地在单元格上设置下拉列表.我试图找出如何根据一个下拉列表的选择加载内容.

任何反馈或解决方案或指南将不胜感激

Moh*_*mar 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'
        ) 
    );
Run Code Online (Sandbox Code Playgroud)

这就是命名范围.一个是国家,另一个是每个国家的城市范围.现在加载第一个下拉列表以选择国家/地区.

$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!
Run Code Online (Sandbox Code Playgroud)

现在根据国家/地区的下拉列表加载城市.这使用名为Indirect的excel函数.基本上返回选定的值.因此命名相似的范围.所以我选择"英国",它会加载名为"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)'); 
Run Code Online (Sandbox Code Playgroud)

注意:我用过两张纸.工作表1用于保存数据和工作表0或默认用于保存下拉列表.祝一切顺利.

  • 感谢您提供一个详细的答案,如果他们提出相同的问题,指出其他人是有用的; 我将尝试在PHPExcel的下一个版本中提供此示例 (3认同)