原文链接:https://www.whongbin.cn/index/article/detail/id/58.html
前言
不得不说,phpExcel是个很好的工具类,之前在typo3项目中一直在用,这两天找下资料,发现在tp5中使用起来更加的简单,奉上安装代码和使用代码
安装
在linux中,进入项目目录,不是根目录(
public)
# 进入项目目录
cd /var/www/html/fuhuaqi/
# 安装PHPExcel
composer require phpoffice/phpexcel
cd ./vendor/
ls -l
执行完上述代码后,若在
vendor
存在phpoffice
目录,则安装成功,可以使用了
代码
导入
下面代码可以直接放在
application
目录下的common.php
中,以便全局调用
if (!function_exists('excel_export')) {
/**
* excel表格导出
* @param string $fileName 文件名称
* @param array $headArr 表头名称
* @param array $data 要导出的数据
*/
function excel_export($fileName = '', $headArr = [], $data = []) {
$fileName .= "_" . date("Ymd", \think\Request::instance()->time()) . ".xls";
$objPHPExcel = new \PHPExcel();
$objPHPExcel->getProperties();
$key = ord("A"); // 设置表头
foreach ($headArr as $v) {
$colum = chr($key);
//设置表头值
$objPHPExcel->getActiveSheet()->setCellValue($colum.'1',$v);
//设置表头字体样式
$objPHPExcel->getActiveSheet()->getStyle($colum.'1')->getFont()->setName('微软雅黑');
//设置表头字体大小
$objPHPExcel->getActiveSheet()->getStyle($colum.'1')->getFont()->setSize(13);
//设置表头字体是否加粗
$objPHPExcel->getActiveSheet()->getStyle($colum.'1')->getFont()->setBold(true);
//设置表头文字水平居中
$objPHPExcel->getActiveSheet()->getStyle($colum.'1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
//设置文字上下居中
$objPHPExcel->getActiveSheet()->getStyle($colum)->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
//设置单元格背景色
$objPHPExcel->getActiveSheet()->getStyle($colum.'1')->getFill()->getStartColor()->setARGB('FFFFFFFF');
$objPHPExcel->getActiveSheet()->getStyle($colum.'1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
$objPHPExcel->getActiveSheet()->getStyle($colum.'1')->getFill()->getStartColor()->setARGB('FF6DBA43');
//设置字体颜色
$objPHPExcel->getActiveSheet()->getStyle($colum.'1')->getFont()->getColor()->setARGB('FFFFFFFF');
//设置列宽度
$objPHPExcel->getActiveSheet()->getColumnDimension($colum)->setWidth(strlen($v)*3);
$key += 1;
}
$column = 2;
$objActSheet = $objPHPExcel->getActiveSheet();
foreach ($data as $key => $rows) { // 行写入
$span = ord("A");
foreach ($rows as $keyName => $value) { // 列写入
if (is_numeric($value)) $value = ' '.$value;
$objActSheet->setCellValue(chr($span) . $column, $value);
$span++;
}
$column++;
}
$fileName = iconv("utf-8", "gb2312", $fileName); // 重命名表
$objPHPExcel->setActiveSheetIndex(0); // 设置活动单指数到第一个表,所以Excel打开这是第一个表
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment;filename='$fileName'");
header('Cache-Control: max-age=0');
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output'); // 文件通过浏览器下载
exit();
}
}
控制器中使用
/**
* tp5 使用excel导出
* @param
* @return mixed
*/
public function excel() {
$name = '预约企业列表';
$header=['企业名称','负责人', '电话','预约服务','需求','预约时间'];
$datas=db('reservation')->alias('a')
->join('service s','s.id=a.service','LEFT')
->field('a.companyname,a.legalperson,a.legalphone,a.indorsation,s.title,a.create_time')
->order('a.create_time asc')
->select();
excel_export($name,$header,$datas);
}