在下拉列表中显示国家/地区列表PHPExcel

问题描述 投票:1回答:1

我正在尝试使用PHPExcel创建一个excel文件。我想在一列中显示国家/地区下拉菜单,以便用户可以选择国家/地区并将其与其他数据一起上传。

现在要在excel文件中创建一个下拉列表,我们可以使用如下的数据验证

$objValidation = $objPHPExcel->getActiveSheet()->getCell('N' . $i)->getDataValidation();
$objValidation->setType(PHPExcel_Cell_DataValidation::TYPE_LIST);
$objValidation->setFormula1('"male,female"');

但是我认为它有256个字符的限制,国家列表肯定大于这个限制。当我创建我的excel文件时,如上所述下拉,但我的国家/地区下拉列表显示空下拉列表。

我也试过了命名范围

$objPHPExcel->addNamedRange( 
new PHPExcel_NamedRange(
    'countries', 
    $objPHPExcel->getSheet(1), 
    'A1:A'.($counter-1),
    false,
    NULL
) 
);

$objValidation->setFormula1('countries');

也试过这一个

$objValidation->setFormula1('=countries');

$objValidation->setFormula1('countries!A1:A'.($counter-1));

但它也显示了相同的结果。所以我错过了一些东西。

php excel phpexcel phpspreadsheet
1个回答
1
投票
$objValidation->setFormula1('worksheetName!$A$1:$A$3');

应该工作,如PHPExcel Docs中所述,并在15datavalidation.php文件夹中的15datavalidation-xls.phpExamples示例中进行了演示

应该使用命名范围,并且在使用大陆和国家的file 39dropdown.php in the Examples folder中有一个这样的例子

$objPHPExcel->addNamedRange(
    new PHPExcel_NamedRange(
        'Continents', 
        $objPHPExcel->getActiveSheet(), $continentColumn . '1:' . $continentColumn . ($key+1)
    )
);


$objValidation = $objPHPExcel->getActiveSheet()
    ->getCell('B1')
    ->getDataValidation();
$objValidation->setType( PHPExcel_Cell_DataValidation::TYPE_LIST )
    ->setErrorStyle( PHPExcel_Cell_DataValidation::STYLE_INFORMATION )
    ->setAllowBlank(false)
    ->setShowInputMessage(true)
    ->setShowErrorMessage(true)
    ->setShowDropDown(true)
    ->setErrorTitle('Input error')
    ->setError('Continent is not in the list.')
    ->setPromptTitle('Pick from the list')
    ->setPrompt('Please pick a continent from the drop-down list.')
    ->setFormula1('=Continents');

所有这些示例都可以正常工作(尽管链接下拉列表不适用于Excel5 Writer。

我所能建议的是确保您在公式中的正确工作表上引用正确的单元格范围

© www.soinside.com 2019 - 2024. All rights reserved.