『2023版』详解PHP通过Excel模板导出Excel

网上其实有很多教程,但这些教程很多都差强人意,这里并非恶意贬低或者诋毁他人,只是客观的陈述。

比如这篇相对来说已经写的算是很不错:https://blog.csdn.net/u013224364/article/details/125786382

然而通篇没有告诉你怎么安装什么扩展,自己嘻嘻哈哈了半天,读者是一头雾水。

诚然,如果有做过类似项目的自然能从代码中读到是用了PHPExcel,但PHPExcel本身就一个问题,如下图:

『2023版』详解PHP通过Excel模板导出Excel

官方已经说明了项目已经在2017年正式弃用,PHPExcel – DEAD 这句话写的很清楚。令人难以置信的是,2022年2023年仍然有文章在继续介绍如何使用。

我并不反对使用一个陈旧的库,但是在正式开发的商业项目中,使用一个别人已经明确说明在8年前死亡的拓展并给出了迁移指南的情况下,是否可能会让整个项目承担一些不可预估的风险?

言归正传,下面开始详细的说一下,在PHP中,怎么导出一个基于excel模板的excel文件。

准备工作

在你的PHP项目中,安装PHPExcel中推荐的 PhpSpreadsheet ,这个项目的地址是:

https://github.com/PHPOffice/PhpSpreadsheet

手动添加的话则是在composer.json中添加:

随后执行安装

二则选其一进行即可。

使用PhpSpreadsheet

在你的项目文件中,按需use引用PhpOffice\PhpSpreadsheet,当然也可以不引用,需要使用的地方直接使用即可。

如何载入模板文件

『2023版』详解PHP通过Excel模板导出Excel

以下代码以TP6为实例,请根据自身情况作适当调整。

定义模板路径:

在TP6中,public_path()指向的是public目录,所以需要对应路径上传好我们的模板文件。

加载模板文件:

如果填写模板

模板的填写分为两种情况,一种是把Excel当固定表格使用,这样只需依次替换各个单元格的值即可,另一种则是渲染列表数据批量插入到excel中。

情况一,依次填写各个单元格:

这种情况非常之简单,只需如是操作即可。

类似上面的代码,依次填写各个单元格,合并单元格的情况也只需要任意被合并的单元格即可。

情况二,$list数据依次插入到表格中:

这种情况稍显复杂,为了不破坏样式,我们要做的是插入新行。

一般来说,我们在制作模板的时候,都会预留了一些空白行以供填写数据,那么只有在填写的数据行数大于预留的数据行数时,我们才需要插入新行,可通过如下代码实现。

这里假设我们预留了10行数据,只有当$list中的数据大于10行时,才会执行插入。

随后是依次插入各行的数据:

如何插入图片

官方文档关于这部分的说明在:https://phpspreadsheet.readthedocs.io/en/latest/topics/recipes/#add-a-drawing-to-a-worksheet

这里以多行数据插入的情况来做个简单示例,单张图片相对简单,对应调整或参照官方文档操作即可。

通过实例化Drawing对象来实现图片的插入,setPath中只需要描述图片的路径即可,上面的代码因为数据库中有多张图片,只取第一张所以这样写,实际情况中可以这样简写:

$drawing->setHeight是设置图片的高度;

$drawing->setCoordinates是插入的位置;

通过setRowHeight设置单元格高度和图片高度一致,使得excel更为美观。

如果是高宽比不确定的情况下,则还要定义宽度:

$drawing->setWidth(310);

插入图片的特殊情况

有一些图片数据,比如电子签名,是以base64的形式存储在数据中,则不能直接传递给Drawing对象来插入,否则可能会报错。

我们需要将base64图片转换为实体图片,存储在临时文件夹,再赋值给Drawing对象,这样能保证整个过程不会出错。

转换过程如下:

保存导出文件

经过以上操作之后,我们已经处理好了整个表格,接下来是导出。

导出也分为两大类,一类是PHP直接输出,另一类是先保存在本地,给前端传递文件路径下载。

PHP直接输出:

其实就是定义Header,然后执行即可,上面这个方法来自:https://blog.csdn.net/weixin_47736740/article/details/127802751

传递给前端:

相比较而言,我更喜欢这种方式,因为文件可以得到服用,查历史文件记录也方便,路径给到前端,前端怎么处理也都是可以的,所以宽容度会更高。

$this->ok 是我自己定义的方法,根据自己的实际输出路径给前端即可。

『2023版』详解PHP通过Excel模板导出Excel

至此,PHP 中通过excel模板文件导出excel表格的完整过程已经说明完毕,大致说来非常简单:

定义模板->加载模板路径->依次渲染填写数据->导出或保存表格

希望能有所帮助。

原创文章,作者:蓝洛水深,如若转载,请注明出处:https://blog.lanluo.cn/11999

(3)
蓝洛水深的头像蓝洛水深管理员
上一篇 2023年4月26日 上午9:30
下一篇 2023年5月16日 上午11:02

发表回复

登录后才能评论
联系QQ
联系QQ
分享本页
返回顶部