遇到的问题:
我们还是先来看手册是怎么说的:
It is important to remember that any string participating in an Excel formula is allowed to be maximum 255 characters (not bytes).
当下拉列表的数据来源过长(more than 255 characters)时,该下拉列表会显示不正确(我遇到的情况是:该下拉列表显示了别的正常的下拉列表的数据来源)。
以下是我的解决办法:
<?php //----------------下拉列表数据来源过长的解决--------------------- //解决下拉框数据来源字串长度过大:将每个来源字串分解到一个空闲的单元格中 $str_list = "item1,item2,item3,......" ; $str_len = strlen($str_list); if ($str_len >= 255) { $str_list_arr = explode(',', $str_list); if ($str_list_arr) { foreach ($str_list_arr as $i => $d) { $c = "P" . ($i+1); $activeSheet->setCellValue($c,$d); } } $endcell = $c; $activeSheet->getColumnDimension('P')->setVisible(false); } $objValidation2 = $activeSheet->getCell("A1")->getDataValidation(); $objValidation2->setType(PHPExcel_Cell_DataValidation::TYPE_LIST) ->setErrorStyle(PHPExcel_Cell_DataValidation::STYLE_INFORMATION) ->setAllowBlank(true) ->setShowInputMessage(true) ->setShowErrorMessage(true) ->setShowDropDown(true) ->setErrorTitle('输入的值有误') ->setError('您输入的值不在下拉框列表内.') ->setPromptTitle('下拉选择框') ->setPrompt('请从下拉框中选择您需要的值!'); if ($str_len < 255) { $objValidation2->setFormula1('"' . $str_list . '"'); } else { $objValidation2->setFormula1("sheet1!P1:{$endcell}"); }
更多问题 及 解决方案 请参考: