PHPExcel: проверка данных не работает в формате .xls

У меня есть файл Excel с двумя листами:

  1. Рабочий лист ;
  2. Список – список элементов, который будет отображаться в Worksheet листа в качестве элемента списка.

Пожалуйста, ознакомьтесь с приведенными ниже изображениями:

Списокрабочий лист

Я хочу сгенерировать это с PHPExcel библиотеки PHPExcel . Я попытался, но не получил ожидаемых результатов. Смотрите мой ниже код:

 $objPHPExcel = new PHPExcel(); // Set document properties $objPHPExcel->getProperties()->setCreator("Soumya Biswas") ->setLastModifiedBy("Soumya Biswas") ->setTitle("Office 2007 XLSX Test Document") ->setSubject("Office 2007 XLSX Test Document") ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.") ->setKeywords("office 2007 openxml php") ->setCategory("Test result file"); // Create a first sheet $objPHPExcel->setActiveSheetIndex(0); $objPHPExcel->getActiveSheet()->setCellValue('A5', "List"); // Set data validation $objValidation = $objPHPExcel->getActiveSheet()->getCell('B5')->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('"$List.$A$1:$A$10"'); // Make sure to put the list items between " and " !!! $objPHPExcel->createSheet(); $objPHPExcel->setActiveSheetIndex(1); $objPHPExcel->getActiveSheet()->setTitle('List'); for ($i = 1; $i <= 10; $i++) { $objPHPExcel->getActiveSheet()->setCellValue("A{$i}", "List Item {$i}"); } // Set active sheet index to the first sheet, so Excel opens this as the first sheet $objPHPExcel->setActiveSheetIndex(0); header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="data-validation.xls"'); header('Cache-Control: max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); exit; 

Я думаю, что правильный синтаксис для ссылок диапазонов ячеек на другом листе:

 List!$A$1:$A$10 

Поэтому вы должны попробовать:

 $objValidation->setFormula1('List!$A$1:$A$10'); // tested it, worked for me 

Получил идею из http://phpexcel.codeplex.com/discussions/320393 :

-> setFormula1 ("Рабочий лист! A1: {$ endCell} 1"); // работа ….

Хотя у этого парня была другая проблема с использованием именованных диапазонов.

Предпосылки: Я думаю, что:

 $objValidation->setFormula1('"$List.$A$1:$A$10"'); 

вы объясните, используя данную строку между кавычками как значение списка, как описано здесь: здесь (где вы, вероятно, получили этот фрагмент в первую очередь) или здесь . Но поскольку вы не хотите использовать элементы фиксированного списка, но динамически отнесены, вы должны опустить двойные кавычки.