phpexcel导出下拉框,超过255字符不显示的问题处理
用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);
}