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、引用和实例化

use PhpOffice\PhpSpreadsheet\Spreadsheet;// 实例化 Spreadsheet 对象
$spreadsheet = new Spreadsheet();

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 设置单元格样式
  • 对齐
use PhpOffice\PhpSpreadsheet\Style\Alignment;
// 居中对齐
$styleArray = ['alignment' => ['horizontal' => Alignment::HORIZONTAL_CENTER, //水平居中'vertical' => Alignment::VERTICAL_CENTER, //垂直居中],
];
$worksheet->getStyle('A1')->applyFromArray($styleArray);
  • 边框
    上 下 左 右 全部 边框都可设置
//红色边框
use PhpOffice\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' );

工作簿操作

1、xlsx 文件导出

  • IOFactory::createWriter 写入到文件
use PhpOffice\PhpSpreadsheet\IOFactory;
// MIME 协议,文件的类型,不设置,会默认html
header('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 协议,文件的类型,不设置,会默认html
header('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 框架)

<?phpnamespace app\api\controller;use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Style\Border;
use PhpOffice\PhpSpreadsheet\IOFactory;class Excel
{public function exporteasy(){$spreadsheet = new Spreadsheet();$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 管理员操作记录表

public function export(){$spreadsheet = new Spreadsheet();$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 ($data as $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');}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/4433.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python基础知识笔记

参考视频和资料&#xff1a;2022新版黑马程序员python教程&#xff0c;8天python从入门到精通&#xff0c;学python看这套就够了_哔哩哔哩_bilibili 最后有知识的思维导图&#xff01; Python入门学习 Day1 解释器&#xff1a;pycharm 一、Pycharm快捷键和基础 注释多行…

Golang每日一练(leetDay0114) 矩阵中的最长递增路径、按要求补齐数组

目录 329. 矩阵中的最长递增路径 Longest Increasing Path In A Matrix &#x1f31f;&#x1f31f; 330. 按要求补齐数组 Patching Array &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Golang每日一练 专栏 Python每日…

MIT 6.830数据库系统 -- lab two

MIT 6.830数据库系统 -- lab two 项目拉取Lab Two实现提示练习一 -- Filter and Join练习二 -- Aggregates练习三 -- HeapFile Mutability练习四 -- Insertion & deletion练习五 -- Page eviction练习六 -- Query walkthrough练习七 - 查询解析 项目拉取 原项目使用ant进行…

【PostgreSQL 数据库技术峰会(成都站)】云原生虚拟数仓 PieCloudDB Database 的架构和关键模块实现...

2023年6月17日&#xff0c;中国开源软件推进联盟 PostgreSQL 分会在成都举办了数据库技术峰会。此次峰会以“新机遇、新态势、新发展”为主题&#xff0c;结合当下信创热潮、人工智能等产业变革背景&#xff0c;探讨 PostgreSQL 数据库在这些新机遇下的发展前景。峰会邀请众多行…

NoSQL之Redis配置

NoSQL 一、关系型数据库与非关系型数据库关系型数据库非关系型数据库区别 二、Redis简介Redis的优点Redis的使用场景 三、Redis安装部署四、Redis命令工具redis-cli 命令行工具redis-benchmark 测试工具 五、Redis 数据库常用命令六、Redis多数据库常用命令 一、关系型数据库与…

IDEA远程Debug调试工具(Remote)的使用

我们在开发的过程中&#xff0c;经常会遇到这样的情况&#xff1a;代码在本地测试得好好的&#xff0c;但部署上线后测试结果就不一样了&#xff0c;这时就需要去服务器上查看日志进行分析从而定位问题&#xff0c;但这样还是会比较麻烦&#xff0c;如果能够Debug调试&#xff…

【若依项目学习】day1-启动项目

若依开源框架&#xff0c;前后端分离项目&#xff0c;地址&#xff1a;http://doc.ruoyi.vip/ruoyi-vue/ 先配置环境 JDK1.8&#xff0c; MySQL5.7 &#xff0c;Maven3.6&#xff0c;redis、nginx(可以不配)、 node 具体见&#xff1a;https://ygstriver.blog.csdn.net/articl…

初级应急响应-Windows-常用工具

应急工具-PChunter PCHunter是一款强大的内核级监控软件&#xff0c;软件可以查看内核文件、驱动模块、隐藏进程、注册表内核&#xff0c;网络等等信息&#xff0c;和PCHunter功能相似的还有火绒剑&#xff0c;PowerTool等。 应急工具-Autoruns 登录时的加载程序、驱动程序加…

从渲染流程、数据处理结构聊聊Flutter性能优化

不可否认 Flutter 是一个非常强大的移动应用开发框架&#xff0c;我们在技术架构选型时就是选用的 Flutter&#xff0c;特别是跨端能力属实很优秀&#xff0c;but 也逐渐发现在复杂的应用程序实现中&#xff0c;App 的性能会受到一些影响。 其实这个问题&#xff0c;我们内部也…

九、会话控制——cookie、session、token

文章目录 前言一、cookie1.1 cookie 是什么1.2 cookie 的特点1.3 cookie 的运行流程1.4 express 框架中设置cookie1.5 express 框架中删除cookie1.6 express 框架中获取cookie 二、session2.1 session 是什么2.2 session 的作用2.3 session 的运行流程2.4 session 和 cookie 的…

Linux进程信号【信号产生】

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; Linux学习之旅 &#x1f383;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 文章目录 &#x1f307;前言&#x1f3d9;️正文1、进程信号基本概念1.1、什么是信号&#xff1f;1.2、信号的作用1.3、信号的…

Spring Boot 中的 @Cacheable 注解

Spring Boot 中的 Cacheable 注解 在 Spring Boot 中&#xff0c;缓存是一个非常重要的话题。当我们需要频繁读取一些数据时&#xff0c;为了提高性能&#xff0c;可以将这些数据缓存起来&#xff0c;避免每次都从数据库中读取。为了实现缓存&#xff0c;Spring Boot 提供了一…