在PHP中,我们可以使用PHPExcel导出excel。而在平常的使用中,我们可以设置单元格的值使用下拉选择。本文介绍如何使用PHPExcel设置单元格值下拉选择。
PHP导出Excel的准备工作,可以参考这篇文章“Think PHP5框架中实现PHP导出Excel文件”。
示例代码如下(主要用到setFormula1方法):
/** * 单元格值设置下拉选择 */ function exportFormula() { // 初始化PHPExcel对象 vendor("PHPExcel.PHPExcel"); $objPHPExcel = new \PHPExcel(); $cellName = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ'); // 表头 $xlsCell = array( array('id', 'id'), array('name', '姓名'), array('sex', '性别'), ); for ($i = 0; $i < count($xlsCell); $i++) { $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i] . '1', $xlsCell[$i][1]); } // 示例数据 $datas = [['id' => 1, 'name' => 'neil', 'sex' => '男']]; $sex = array('1' => '男', '2' => '女'); for ($i = 0; $i < count($datas); $i++) { $index = 0; foreach ($datas[$i] as $k => $v) { if ($k != 'sex') { $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$index] . ($i + 2), $v); } else { // 设置性别单元格的值下拉 $list = implode(',', $sex); $objValidation1 = $objPHPExcel->getActiveSheet(0)->getCell($cellName[$index] . ($i + 2)) ->getDataValidation(); $objValidation1->setType(\PHPExcel_Cell_DataValidation::TYPE_LIST) ->setErrorStyle(\PHPExcel_Cell_DataValidation::STYLE_INFORMATION) ->setAllowBlank(false) ->setShowInputMessage(true) ->setShowErrorMessage(true) ->setShowDropDown(true) ->setErrorTitle('输入的值有误') ->setError('您输入的值不在下拉框列表内.') ->setPromptTitle('') ->setPrompt('') ->setFormula1('"' . $list . '"'); // 设置为变量内容 $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$index] . ($i + 2), $v); } $index++; } } // 下载文件到浏览器客户端 $title = '家庭成员表'; $xlsTitle = iconv('utf-8', 'gb2312', '家庭成员表'); // 文件标题 header('pragma:public'); header('Content-type:application/vnd.ms-excel;charset=utf-8;name="' . $xlsTitle . '.xls"'); header("Content-Disposition:attachment;filename=$title.xls"); $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('php://output'); exit; }