Hyperf 结合 PhpOffice/PhpSpreadsheet 实现 Excel&CSV 文件导出导入
本文环境 Hyperf2.1,PHP7.3,Mysql5.7
不懂的可以评论或联系我邮箱:owen@owenzhang.com
著作权归 OwenZhang 所有。商业转载请联系 OwenZhang 获得授权,非商业转载请注明出处。
Hyperf & PhpSpreadsheet 介绍
Hyperf 介绍
Hyperf 是基于 Swoole 4.5+
实现的高性能、高灵活性的 PHP 协程框架,内置协程服务器及大量常用的组件,性能较传统基于 PHP-FPM
的框架有质的提升,提供超高性能的同时,也保持着极其灵活的可扩展性,标准组件均基于 PSR 标准 实现,基于强大的依赖注入设计,保证了绝大部分组件或类都是 可替换
与 可复用
的。
PhpOffice/PhpSpreadsheet 介绍
PhpSpreadsheet 是一个用纯 PHP 编写的库,它提供了一组类,允许您读取和写入各种电子表格文件格式,如 Excel 和 LibreOffice Calc。
PhpSpreadsheet 是 PHPExcel 的下一个版本。它破坏了兼容性,从而大大提高了代码库质量(命名空间、PSR 合规性、使用最新的 PHP 语言功能等)。
因为所有的努力都转移到了 PhpSpreadsheet 上,PHPExcel 将不再被维护。所有对 PHPExcel 的贡献、补丁和新功能都应针对 PhpSpreadsheet 分支。master
GitHub PHPOffice/PhpSpreadsheet:用于读取和写入电子表格文件的纯PHP库 (github.com)
官方使用文档 Welcome to PhpSpreadsheet's documentation - PhpSpreadsheet Documentation
PhpOffice/PhpSpreadsheet 安装
使用composer将 PhpSpreadsheet 安装到你的项目中:
或者,如果您计划使用它们,还可以下载文档和示例:
文件导出导入 &代码实例
csv 文件导出
导出实例类文件
函数说明:使用 hyperf 框架的跨域中间件
->withHeader
添加浏览器响应头->withBody
添加浏览器内容主体Headers
可以根据实际情况进行改写。
代码实例:
调用导出实例函数方法
调用上面的 csv 文件导出类,浏览器调整新页面直接下载导出。
代码实例:
excel 文件导出
导出实例类文件
xls 后缀 excel 文件导出的 heard 头:
xls='application/vnd.ms-excel'
xlsx 后缀 excel 文件导出的 heard 头:
xlsx='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
函数说明:
构造函数 创建一个 PhpSpreadsheet 实例
__construct()
设置表头
$title=['id','标题','内容'] setHeader($title)
添加表内容
$data=[ [1,标题1,内容1], [2,标题2,内容2], ... ] addData($data)
保存到服务器本地
$fileName=文件名 saveToLocal($fileName)
直接从浏览器下载到本地,有问题,不使用,
php://output
目前 PhpSpreadsheet 插件有问题,PhpSpreadsheet 插件作者还在修复saveToBrowser($fileName)
保存临时文件在从浏览器自动下载到本地
saveToBrowserByTmp($fileName)
代码实例:
调用导出实例函数方法
函数说明:
保存到服务器本地
$exportService->setHeader($title)->addData($data)->saveToLocal($fileName);
下载服务器的文件到本地
$this->response->download($result['path'], $result['filename']);
保存临时文件在从浏览器自动下载到本地
$exportService->setHeader($title)->addData($data)->saveToBrowserByTmp($fileName);
代码实例:
php://output 问题分享
直接从浏览器下载到本地,有问题,不使用
php://output
目前 PhpSpreadsheet 插件有问题,PhpSpreadsheet 插件作者还在修复
https://github.com/PHPOffice/PhpSpreadsheet/issues/28#issuecomment-263101387
excle 文件导入(批量添加数据到 Mysql)
查看另外一篇文章详细使用PhpOffice/PhpSpreadsheet读取和写入Excel - 掘金 (juejin.cn)
调用 PhpSpreadsheet 读取函数方法
函数说明:
获取上传文件的临时路径
$file['tmp_file']
指定第一个工作表为当前
$spreadsheet->getSheet(0)->toArray();
execl 文件读取数据
$container->get(BadwordServiceInterface::class)->getBadwordListImport($data);
批量添加数据到 mysql
getBadwordListImportToMysql
代码实例:
Buy me a cup of coffee :)
觉得对你有帮助,就给我打赏吧,谢谢!
版权声明: 本文为 InfoQ 作者【Owen Zhang】的原创文章。
原文链接:【http://xie.infoq.cn/article/6f0a2b98135769f299b67b044】。文章转载请联系作者。
评论