0


php使用PhpSpreadsheet导出Excel表格详解

本文会介绍php使用PhpSpreadsheet操作Excel,供大家参考,具体内容如下:

PhpSpreadsheet介绍

1、简介
PhpSpreadsheet 是一个用纯PHP编写的库,提供了一组类,使您可以读取和写入不同的电子表格文件格式
PhpSpreadsheet 提供了丰富的API接口,可以设置诸多单元格以及文档属性,包括样式、图片、日期、函数等等诸多应用,总之你想要什么样的Excel表格,PhpSpreadsheet都能做到。

使用 PhpSpreadsheet 开发的PHP要求 7.1或更高版本
PhpSpreadsheet 支持链式操作

2、安装
使用 composer 安装,在项目根目录下执行下面命令,即可安装。本次是在ThinkPHP5框架里使用。

composer require phpoffice/phpspreadsheet

使用

1、引用和实例化

usePhpOffice\PhpSpreadsheet\Spreadsheet;// 实例化 Spreadsheet 对象$spreadsheet=newSpreadsheet();

2、获取工作簿
getActiveSheet

// 获取活动工作薄$sheet=$spreadsheet->getActiveSheet();

单元格操作

1、获取单元格
两种获取单元格方式

  • getCell
  • getCellByColumnAndRow 数字单元格坐标获取单元格
$cell=$sheet->getCell('A1');$cell=$sheet->getCellByColumnAndRow(1,1);// 参数:列、行

2、设置单元格的值

  • setValue
  • setCellValue
  • setCellValueByColumnAndRow
// 获取单元格$cellA=$sheet->getCell('A1');// 设置单元格值$cellA->setValue('姓名');// 设置A1单元格的值为姓名// 给A1设置值,参数:单元格位置,值$sheet->setCellValue('A1','ID');//给A2赋值 hello$sheet->setCellValueByColumnAndRow(1,2,'hello');

3、单元格文字样式

  • getStyle 获取单元格样式
  • getFont 获取单元格文字样式
  • setBold 设置文字粗细
  • setName 设置文字字体
  • setSize 设置文字大小
//将A1至D1单元格设置成粗体$sheet->getStyle('A1:D1')->getFont()->setBold(true);//将A1单元格设置成粗体,黑体,10号字$sheet->getStyle('A1')->getFont()->setBold(true)->setName('黑体')->setSize(10);

4、单元格文字颜色

  • getColor() 获取坐标颜色
  • setRGB() 设置字体颜色(颜色值带#)
  • getRGB() 获取字体颜色
  • setARGB() 设置字体颜色(颜色值不带#)
  • getARGB() 获取字体颜色
// B3单元格设置颜色$sheet->getStyle('B3')->getFont()->getColor()->setRGB('#AEEEEE');$sheet->getStyle('B3')->getFont()->getColor()->setARGB('FFFF0000');

5、单元格内文字换行

  • setWrapText 设置文本里的\n符合为:换行
//使用 \n 进行单元格内换行,相当于 Alt+Enter$sheet->getCell('A1')->setValue("hello\nworld");$sheet->getStyle('A1')->getAlignment()->setWrapText(true);

6、单元格列和行

  • getColumnDimension 获取一列
  • getWidth 获取一列的宽度
  • setWidth 设置一列的宽度
  • setAutoSize 设置一列的宽度自动调整
  • getDefaultColumnDimension 获取一列的默认值
//设置默认列宽20$sheet->getDefaultColumnDimension()->setWidth(20);//将A列宽度设置成20$sheet->getColumnDimension('A')->setWidth(20);//自动计算列宽$sheet->getColumnDimension('A')->setAutoSize(true);
  • getRowDimension 获取一行
  • getRowHeight 获取一行的高度
  • setRowHeight 设置一行的高度
//设置默认行高$sheet->getDefaultRowDimension()->setRowHeight(20);//设置第一行行高为20pt$sheet->getRowDimension('1')->setRowHeight(20);
  • getHighestColumn 获取总列数
  • getHighestRow 获取总行数
echo$sheet->getHighestColumn();echo$sheet->getHighestRow();

7、单元格样式

  • applyFromArray 设置单元格样式
  • 对齐
usePhpOffice\PhpSpreadsheet\Style\Alignment;// 居中对齐$styleArray=['alignment'=>['horizontal'=>Alignment::HORIZONTAL_CENTER,//水平居中'vertical'=>Alignment::VERTICAL_CENTER,//垂直居中],];$worksheet->getStyle('A1')->applyFromArray($styleArray);
  • 边框 上 下 左 右 全部 边框都可设置
//红色边框usePhpOffice\PhpSpreadsheet\Style\Border;// 外边框// Border 类中的常量都是边框样式// Border::BORDER_THICK 边框样式$styleArray=['borders'=>['outline'=>['borderStyle'=>Border::BORDER_THICK,'color'=>['argb'=>'FFFF0000'],],],];$worksheet->getStyle('B2:G8')->applyFromArray($styleArray);

8、单元格合并和拆分

  • mergeCells 合并
  • unmergeCells 拆分
// 合并A1到C1列$sheet->mergeCells('A1:C4');// 合并A1到A4行$sheet->mergeCells('A1:A4');// 合并后,赋值只能给A1,开始的坐标。$sheet->getCell('A1')->setValue('西安');// 拆分$sheet->mergeCells('A1:C4');$sheet->unmergeCells('A1:A4');

9、超链接

  • getHyperlink 获取单元格链接
  • setUrl 设置单元格链接
$spreadsheet->getActiveSheet()->setCellValue('E6','xxxx的博客');$spreadsheet->getActiveSheet()->getCell('E6')->getHyperlink()->setUrl('https://blog.csdn.net/u011167662');

10、使用函数
SUM求和A;VERAGE平均数;MIN最小值;MAX最大值

$sheet->setCellValue('A3','=SUM(A1:A2)');$sheet->setCellValue('A3','=MAX(A1:A2)');

11、批量赋值

  • fromArray 从数组中的值填充工作表

参数1:数据(数组)
参数2:去除某个值
参数3:从哪个位置开始

$sheet->fromArray([[1,'欧阳克','18岁','188cm'],[2,'黄蓉','17岁','165cm'],[3,'郭靖','21岁','180cm']],3,'A2');

12、写入图片

usePhpOffice\PhpSpreadsheet\Worksheet\Drawing;//写入图片$drawing=newDrawing();$drawing->setName('Logo')->setDescription('Logo')->setPath('../files/1.jpg')->setHeight(30)->setCoordinates('D6')->setOffsetX(50)->setOffsetY(6);$drawing->setRotation(25);$drawing->getShadow()->setVisible(true);$drawing->getShadow()->setDirection(45);$drawing->setWorksheet($sheet);

工作簿操作

1、xlsx 文件导出

  • IOFactory::createWriter 写入到文件
usePhpOffice\PhpSpreadsheet\IOFactory;// MIME 协议,文件的类型,不设置,会默认htmlheader('Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');// MIME 协议的扩展$filename=date('Y-m-d').'工作报告单';header('Content-Disposition:attachment;filename='.$filename.'.xlsx');// 缓存控制header('Cache-Control:max-age=0');$write=IOFactory::createWriter($spreadsheet,'Xlsx');$write->save('php://output');

2、xls 文件导出

// MIME 协议,文件的类型,不设置,会默认htmlheader('Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');// MIME 协议的扩展$filename=date('Y-m-d').'工作报告单';header('Content-Disposition:attachment;filename='.$filename.'.xls');// 缓存控制header('Cache-Control:max-age=0');$write=IOFactory::createWriter($spreadsheet,'Xls');$write->save('php://output');

3、设置工作簿标题

  • setTitle
$sheet->setTitle('标题1');

实战

1、导出简单数据(使用 ThinkPHP5 框架)

<?phpnamespaceapp\api\controller;usePhpOffice\PhpSpreadsheet\Spreadsheet;usePhpOffice\PhpSpreadsheet\Style\Alignment;usePhpOffice\PhpSpreadsheet\Style\Border;usePhpOffice\PhpSpreadsheet\IOFactory;classExcel{publicfunctionexporteasy(){$spreadsheet=newSpreadsheet();$worksheet=$spreadsheet->getActiveSheet();$title='Excel导出';$worksheet->setTitle($title);$worksheet->mergeCells('B2:D2');$worksheet->getRowDimension(1)->setRowHeight(50);$worksheet->getStyle('B2:D2')->applyFromArray(['alignment'=>['horizontal'=>Alignment::HORIZONTAL_CENTER,'vertical'=>Alignment::VERTICAL_CENTER,],'borders'=>['outline'=>['borderStyle'=>Border::BORDER_THIN,'color'=>['argb'=>'000000']],],'font'=>['name'=>'黑体','bold'=>true,'size'=>22]]);$worksheet->setCellValueByColumnAndRow(2,2,$title);$worksheet->setCellValueByColumnAndRow(2,3,'姓名');$worksheet->setCellValueByColumnAndRow(3,3,'性别');$worksheet->setCellValueByColumnAndRow(4,3,'年龄');$worksheet->setCellValueByColumnAndRow(2,4,'张三');$worksheet->setCellValueByColumnAndRow(3,4,'男');$worksheet->setCellValueByColumnAndRow(4,4,'20');header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');header('Content-Disposition: attachment;filename=Excel导出.xlsx');header('Cache-Control: max-age=0');$write=IOFactory::createWriter($spreadsheet,'Xlsx');$write->save('php://output');}}

导出表格截图:在这里插入图片描述
2、导出数据
liu_system_log 管理员操作记录表

publicfunctionexport(){$spreadsheet=newSpreadsheet();$sheet=$spreadsheet->getActiveSheet();$styleArray=['alignment'=>['horizontal'=>Alignment::HORIZONTAL_CENTER,'vertical'=>Alignment::VERTICAL_CENTER,],'borders'=>['outline'=>['borderStyle'=>Border::BORDER_THICK,],],];$sheet->getDefaultColumnDimension()->setWidth(20);// 列宽$sheet->getDefaultRowDimension()->setRowHeight(20);// 行高// 标题$tabletitle='管理员操作记录表';$sheet->mergeCells('A1:D1');$sheet->getRowDimension('1')->setRowHeight(40);// 行高$sheet->getStyle('A1')->applyFromArray($styleArray);$sheet->getStyle('A1')->getFont()->setBold(true)->setSize(16);$sheet->setCellValue('A1',$tabletitle);$sheet->getStyle('A2:D2')->applyFromArray($styleArray);$sheet->getStyle('A2:D2')->getFont()->setBold(true)->setSize(12);$sheet->setCellValue('A2','管理员姓名');$sheet->setCellValue('B2','操作');$sheet->setCellValue('C2','ip');$sheet->setCellValue('D2','操作时间');$data=Db::name('system_log')->select();$sort=0;foreach($dataas$v){$sheet->setCellValue('A'.($sort+3),$v['admin_name']);$sheet->setCellValue('B'.($sort+3),$v['page']);$sheet->setCellValue('C'.($sort+3),$v['ip']);$sheet->setCellValue('D'.($sort+3),date('Y-m-d H:i:s',$v['add_time']));$sort++;}// 工作簿标题$sheettitle='管理员操作记录表';$sheet->setTitle($sheettitle);header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');// 文件名$filename='管理员操作记录表';header('Content-Disposition: attachment;filename='.$filename.'.xlsx');header('Cache-Control: max-age=0');$write=IOFactory::createWriter($spreadsheet,'Xlsx');$write->save('php://output');}
标签: php excel Spreadsheet

本文转载自: https://blog.csdn.net/weixin_44888397/article/details/131484139
版权归原作者 L小臣 所有, 如有侵权,请联系我们删除。

“php使用PhpSpreadsheet导出Excel表格详解”的评论:

还没有评论