php利用createSheet生成excel表格(控制行高列宽、文本自动换行及表头字体样式)
函数内容概要:
1、解决身份证被科学技术法问题
2、解决excel表头字体加粗标红问题
3、解决表格列中字符过多显示不全问题(根据内容多少自动换行)
/*** 写入excel文件信息** update: 添加去除身份证科学计数法判断** @param $data 文件内容* @param $title 表格名称* @param $savePath 表格保存路径* @return string* @throws \PHPExcel_Exception* @throws \PHPExcel_Reader_Exception* @throws \PHPExcel_Writer_Exception*/
function writerSerialXls($data, $title, $savePath='')
{$objPHPExcel = new Spreadsheet();$filename = $title . '-' . date('YmdHis') . '.xls';$objPHPExcel->createSheet();$objPHPExcel->setActiveSheetIndex(0); //设置第一个工作表为活动工作表$objPHPExcel->getActiveSheet()->setTitle('sheet1'); //设置工作表名称$sheet = $objPHPExcel->getActiveSheet();// 获取A1单元格的样式$styleArray = ['font' => ['bold' => true,'color' => ['argb' => 'red']],'alignment' => ['horizontal' => 'center','wrapText' => true, // 启用自动换行 设置自动换行样式'vertical' => 'center',//lignment::VERTICAL_TOP, // 垂直对齐方式(可选)],];// 应用样式到表头 'A1:O1'$sheet->getStyle('A1:P1')->applyFromArray($styleArray);$styleCenterArray = ['alignment' => ['horizontal' => 'center','wrapText' => true, // 启用自动换行 设置自动换行样式'vertical' => 'center',],];foreach ($data as $k => $val) {//行 Row 7$rowHeight = 35;if($k == 0){// 设置第一行的行高$rowHeight = 60;}// $objPHPExcel->getActiveSheet()->getRowDimension($k)->setZeroHeight(true);//自适应行高 setRowHeight$sheet->getRowDimension($k+1)->setRowHeight($rowHeight);//自适应行高 foreach ($val as $i => $v) {//列 17 Column// 将列索引转换为字母(如 1 -> A, 2 -> B, 3 -> C)$colLetter = Coordinate::stringFromColumnIndex($i + 1);// 动态生成单元格坐标(如 A1, B2, C3 等)$cellCoordinate = $colLetter . ($k + 1);// 如果是身份证号列,强制存储为文本 解决身份证被科学技术法存储问题if ($i >= 0) {//算了,都存储为字符串型吧$sheet->setCellValueExplicit($cellCoordinate, $v, 'str');} else {$sheet->setCellValue($cellCoordinate, $v);}//所有文字居中显示$sheet->getCell($cellCoordinate)->getStyle()->applyFromArray($styleCenterArray);}}foreach ($data[0] as $i => $val) {//第一行 $i 列//每一列宽度if(in_array($i, [3,4,13,16])){// $sheet->getColumnDimension(chr($i + 65))->setWidth(20);//[1,2,9,10$sheet->getColumnDimension(chr($i + 65))->setAutoSize(true);}}//输出$objWriter = IOFactory::createWriter($objPHPExcel, 'Xls');if(!$savePath){$savePath = '/runtime/storage/upload/error';}//创建文件夹if (!file_exists($savePath)) {mkdir($savePath,0777,true);}$objWriter->save($savePath . '/' . $filename);unset($objPHPExcel);return $savePath . '/' . $filename;
}
调用以上函数,可生成excel表格内容如下: