PHPExcel last version, 1.8.1, was released in 2015. The project was officially deprecated in 2017 and permanently archived in 2019.
虽然PHPExcel在2017年就被弃用了,转而使用PhpSpreadsheet,但是在低版本的php中还是习惯使用PHPExcel导出excel数据报表。
这是PhpSpreadshee官方文档的使用条件,即要使用 PhpSpreadsheet ,php的版本不能低于7.1。
如果仅仅只是导出数据报表还是很容易的,但这样的表在浏览查看的时候不是很好,需要手动调整表格样式。
为此,博主特意写了一个函数,可以让我们导出的报表带有格式样式。
这个函数的使用也非常简单,只需传入需要导出的数据(包括表头标题数组,以及数据内容数组),以及表格样式。
PHPExcel 下载地址:https://github.com/PHPOffice/PHPExcel
下载后把PHPexcel的核心类文件夹 ‘classes’ 重命名为PHPExcel放到项目中,如果是thinkphp5,则重命名后的PHPExcel文件夹 放到 extend 文件夹中。
<?php //非框架使用PHPExcel导出excel报表引入文件 require_once 'PHPExcel/PHPExcel.php'; require_once 'PHPExcel/PHPExcel/IOFactory.php'; require_once 'PHPExcel/PHPExcel/Worksheet.php'; function PHPExcelExport($data, $fileName = '导出数据表', $out=1, $style=[]){ if(empty($data)){ trigger_error('导出数据不能为空', E_USER_ERROR); } //表格样式 //可以把样式放到 $style 参数中,在使用的时候如果参数 $style 中有相应值就用$style 中的值,如果没有就给一个默认值 $freezePane = 'B2'; //冻结单元格坐标 $fontFamily = 'Arial'; //字体 $width = '25'; //表格列宽,每列统一宽度 $titleHeight = '45'; //表头标题行的行高 $height = '33'; //其他行的行高 $titleBGColor = 'FFFF00'; //表头标题行的背景颜色 $titleFontSize = '18'; //表头标题行的字体大小 $fontSize = '11'; //其他行的字体大小 $fileName = $fileName ? $fileName:date('YmdHis');//导出报表的文件名设置 //开始导出excel //thinkphp5 中使用PHPexcel导出excel报表 // // \think\Loader::import('PHPExcel.PHPExcel'); // \think\Loader::import('PHPExcel.PHPExcel.IOFactory.PHPExcel_IOFactory'); // \think\Loader::import('PHPExcel.PHPExcel.Worksheet.PHPExcel_Worksheet'); $objPHPExcel = new \PHPExcel(); // var_dump($objPHPExcel);exit(); $objSheet = $objPHPExcel -> getActiveSheet(); $objSheet ->getDefaultStyle()->getFont()->setName($fontFamily)->setSize($fontSize); $objSheet->freezePane($freezePane); $borderStyle = [ 'borders' => array( 'allborders' => array( 'style' => \PHPExcel_Style_Border::BORDER_THICK, 'color' => array('rgb' => '000000'), ), ), ]; //PHPExcel_Style_Border::BORDER_THICK $numTitles = count($data['title']); $numData = count($data['data']) + 1; //输出title行 $i = 0; foreach ($data['title'] as $val) { $columnP = getCellP($i); $objSheet->setCellValue($columnP.'1',$val); $objSheet->getColumnDimension($columnP)->setWidth(25); $i+=1; } $widthP = getCellP(0).'1:'.getCellP($numTitles-1).'1'; $objSheet->getStyle($widthP)->getAlignment() ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER) ->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER); $objSheet ->getStyle($widthP) ->getFont()->setSize(18)->setBold(true); $objSheet->getStyle($widthP)->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setRGB($titleBGColor); $objSheet -> getStyle('A1:'.getCellP($numTitles-1).($numData))->applyFromArray($borderStyle); $objSheet->getRowDimension(1)->setRowHeight($titleHeight); $i = 2; foreach ($data['data'] as $res){ $objSheet->getRowDimension($i)->setRowHeight($height); $j = 0; foreach ($res as $k => $val) { $objSheet->setCellValue(getCellP($j).$i,$val); $j+=1; } $i++; } $cntArea = getCellP(0).'2:'.getCellP($numTitles-1).$numData; $objSheet -> getStyle($cntArea) -> getAlignment() -> setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER) -> setVertical(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER); //输出到浏览器 下载 header('Content-Type: application/vnd.ms-excel'); header("Content-Disposition: attachment;filename=$fileName.xls"); header('Cache-Control: max-age=0'); $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $r = $objWriter->save('php://output'); } //excel表的列名是 A-Z,AA-ZZ,以此类推 //根据传入的 index 获取当前列的列名 function getCellP($index){ $AZlist = []; $Plist = range('A','Z'); $AZlist = array_merge($AZlist,$Plist); for ($i = 0; $i < 26; $i++){ for ($j = 0; $j < 26; $j++) { array_push($AZlist,$Plist[$i].$Plist[$j]); } } $index = intval($index); return $AZlist[$index]; }
调用 PHPExcelExport 函数,导出 excel 报表:
//在项目中data可以直接通过数据库或者其他方式获取 //$data 的数据格式为二维数组,data里一个 title 表标题数组,一个 data 数据数组 //数据数组里的数据和表标题数组里的数据一一对应 $data = [ 'title'=>[ '姓名', '年龄', '性别' ], 'data' =>[ ['张三',30,'男'], ['李四',30,'男'], ['王五',30,'男'], ['张三',30,'男'], ['张三',30,'男'], ], ]; PHPExcelExport($data);
有了这个函数,以后任何需要导出数据报表的地方,只需要调用一些函数就可以了,是不是非常方便。 文章来源:https://www.xinyueseo.com/other/519.html
继续阅读与本文标签相同的文章
php ajax 导出excel
-
阿里云Linux服务器动态扩容(阿里云服务器扩容后磁盘空间无变化解决方法)
2020-11-30栏目: 建站教程
-
6个SEM实战技巧,大神手把手教你做推广!
2020-07-20栏目: SEM
-
苏州美食推荐,持续更新
2020-06-17栏目: 生活笔记
-
企业如何玩转视频号
2020-05-12栏目: 运营杂谈
-
SEO关键词排名该掌握的核心优化技巧
2020-05-12栏目: SEO
发表评论 已发布 0 条