Search code examples
phpexcelphpexcel

PHPExcel corrupt file Drop down list not working Windows Excel Data validation


If I use:

$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('"male,female"');

to create an excel file, I get the following errors on windows Excel

1. We found a problem with some content in 'filename.xlsx'. Do you want to recover....
2. Removed Feature: Data validation from /xl/worksheets/shee1.xml part

If I comment that code out it opens normally.

Works as expected on Ubuntu Libre Office.


Solution

  • This is all explained in the PHPExcel documentation

    And if you look at the examples such as 15datavalidation.php, it demonstrates how to create List type data validations

    $objValidation = $objPHPExcel->getActiveSheet()
        ->getCell('B5')
        ->getDataValidation();
    $objValidation->setType( PHPExcel_Cell_DataValidation::TYPE_LIST );
    $objValidation->setErrorStyle( PHPExcel_Cell_DataValidation::STYLE_INFORMATION );
    ...
    $objValidation->setFormula1('"Item A,Item B,Item C"');
    

    shows how to create a list of fixed values

    $objValidation = $objPHPExcel->getActiveSheet()
        ->getCell('B7')
        ->getDataValidation();
    $objValidation->setType( PHPExcel_Cell_DataValidation::TYPE_LIST );
    $objValidation->setErrorStyle( PHPExcel_Cell_DataValidation::STYLE_INFORMATION );
    ...
    $objValidation->setFormula1('$D$2:$D$6');
    

    shows how to create a list using a formula

    Example 39dropdown.php even shows how to created linked lists, where the values in one list are dependent on the selected value of another