Я пытаюсь создать файл Excel, используя PHPExcel. Я хочу показать страну в раскрывающемся списке в одном столбце, чтобы пользователь мог выбрать страну и загрузить ее с другими данными.
Теперь, чтобы создать выпадающий список в файле 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));
Но это также показывает тот же результат. Так что я что-то упустил.
$objValidation->setFormula1('worksheetName!$A$1:$A$3');
Должен работать, как описано в PHPExcel Docs и продемонстрировано в примерах 15datavalidation.php а также 15datavalidation-xls.php в Examples
папка
Как следует использовать именованный диапазон, и есть пример этого в файл 39dropdown.php
в папке примеров используя континенты и страны
$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.
Все, что я могу предложить, это убедиться, что вы ссылаетесь на правильный диапазон ячеек на правильном листе в вашей формуле
Других решений пока нет …