医院网站建设招标百度数据开放平台
用php生成excel模板,并设置下拉框的选项。如果选项太多,可能导致下拉框不显示的问题。下面会给出示例,以及解决方案,支持生成包含大量数据的下拉框。
// $info 为下拉框的数数据,['男','女','保密']
function exportDataSelectOptions ($info){
//文件名称
$filename = 'AAAA导入模板';//excel表格列名
$header = [['名字',30],['手机号',25],['邮箱',25],['性别',10],['所在地址',26]];//需要制作的下拉框文件
$spectials = [ ['column'=>'D','options'=>['男','女','保密'] ],['column'=>'E','options'=>$info]];//样例
$data = [['测试样例1','13665663533','13665663533@qq.com','女',$info[0]],['测试样例2','13665663532','13665663532@qq.com','男',$info[0]],['测试样例3','13665663513','13665663513@qq.com','男',$info[0]],];ini_set("error_reporting","E_ALL & ~E_NOTICE");require_once '../phpexcel/Classes/PHPExcel.php'; //初始化PHPExcel(),不使用模板 $objPHPExcel = new PHPExcel();$objPHPExcel->setActiveSheetIndex(0);//头部样式
$objPHPExcel->getDefaultStyle()->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getDefaultStyle()->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$hk = 0; //所有单元格(行)默认高度
$objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(25);// 自动换行
// $objPHPExcel->getActiveSheet()->getStyle( 'A1:L100')->getAlignment()->setWrapText(true);// 设置特有的表格样式
$styleThinBlackBorderOutline = array( //边框线'borders' => array('allborders' => array( //设置全部边框'style' => \PHPExcel_Style_Border::BORDER_THIN //粗的是thick),),
);
//设置边框
$objPHPExcel->getActiveSheet()->getStyle( 'A1:L100')->applyFromArray($styleThinBlackBorderOutline);//合并单元格(如果要拆分单元格是需要先合并再拆分的,否则程序会报错)
$objPHPExcel->getActiveSheet()->mergeCells('A1:L1');//拆分单元格;
// $objPHPExcel->getActiveSheet()->unmergeCells('B7:D7'); // 设置内容
$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1','标题:XXXXXXX');
// 设置字体样式
// $PHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setName('宋体');
// 设置文字加粗
// $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);
// 设置文字大小
// $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(18);
// 设置文字水平居中
$objPHPExcel->getActiveSheet(0)->getStyle('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
// 设置文字垂直居中
$objPHPExcel->getActiveSheet(0)->getStyle('A1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_BOTTOM);
// 设置自动换行
// $PHPExcel->getActiveSheet(0)->getStyle('A2')->getAlignment()->setWrapText(true);//写入头部
foreach ($header as $k => $v)
{$colum = \PHPExcel_Cell::stringFromColumnIndex($hk);$objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum.$rowindex, $v[0]);$objPHPExcel->getActiveSheet(0)->getColumnDimension($colum )->setWidth($v[1]);$hk += 1;
}$objActSheet = $objPHPExcel->getActiveSheet(0);// 新建工作表 -->保存下拉框数据来源
$objPHPExcel->createSheet();
$subObject = $objPHPExcel->getSheet(1);
$subObject->setTitle("data");$subcolumn = ['A','B','C','D','E','F','G','H','I','J','K'];
//设置下拉框
foreach($spectials as $k => $spectial)
{//保存下拉框内容到新建的工作表中$list = $spectial['options']; if ($list) {foreach ($list as $i => $d) {$c = $subcolumn[$k].($i+1);$subObject->setCellValue($c,$d); } }//下拉框写入开始行数$n = 2;// 我这里设置100行,可自行设置while($n < 101) {$objValidation = $objActSheet->getCell($spectial['column'].(string)$n)->getDataValidation(); //这一句为要设置数据有效性的单元格// $objValidation的各项设置参数可详见phpexcel文件,// 目录大概为/.../phpoffice/phpexcel/Classes/PHPExcel/Writer/Excel5/Worksheet.php // 2767行 方法名:writeDataValidity$objValidation -> setType(\PHPExcel_Cell_DataValidation::TYPE_LIST)-> setErrorStyle(\PHPExcel_Cell_DataValidation::STYLE_STOP)-> setAllowBlank(true)-> setShowInputMessage(true)-> setShowErrorMessage(true)-> setShowDropDown(true)-> setErrorTitle('输入的值有误')-> setError('您输入的值不在下拉框列表内.')-> setPromptTitle('')-> setPrompt('')-> setOperator(\PHPExcel_Cell_DataValidation::OPERATOR_BETWEEN)->setFormula1("data!$".$subcolumn[$k]."$1:$".$subcolumn[$k]."$".count($list)); //下拉框数据来源多的时候,建议使用此方法// -> setFormula1('"'.$optionsString.'"'); //如果下拉框数据来源少,可使用此方法,无需新建表格$n++;}
}//样例数据
$column = 2;
foreach($data as $key => $rows) //行写入
{$span = 0;foreach($rows as $keyName => $value) // 列写入{$j = \PHPExcel_Cell::stringFromColumnIndex($span);$objActSheet->setCellValue($j.$column, $value);$span++;}$column++;
}ob_end_clean();
ob_start();
$objWriter = new \PHPExcel_Writer_Excel5($objPHPExcel);
ob_end_flush();
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header('Content-Disposition:inline;filename="'.$filename.'.xls"');
header("Content-Transfer-Encoding: binary");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");
$objWriter->save('php://output');
//清空数据缓存
unset($data);
}