我在去年写过一篇关于laravel的Excel导出文章:Laravel Excel 实现 Excel/CSV 文件导入导出功能,使用的是Laravel Excel实现的。
该扩展包含Excel导入导出功能,功能点是比较完善的,但是有一个地方,当实现大量数据导出到Excel的时候,会发现侠侣很慢,然后如果开启任务管理器查看的时候会发现CPU使用率飙升,内存使用率飙升,功能是没问题,但是总体导出效果不尽如人意。
我们再来说一下另一个扩展:PHPExcel
PHPExcel & PhpSpreadsheet
PHPExcel 是一个处理Excel,CVS文件的开源框架,它基于微软的OpenXML标准和PHP语言。可以使用它来读取、写入不同格式的电子表格,这也是PHP至今最通用的Excel处理工具,但是它有一个非常致命的缺点: 特别占内存,对大批量的表格数据几乎会让人累觉不爱,处理速度非常慢,但是它功能非常丰富,API非常多,所以在导出复杂格式的Excel表格时,它又非常方便。所以,纠结啊~~~
不过,PHPExcel上一版本1.8.1于2015年发布。该项目于2017年正式弃用,并于2019年永久存档。现在如果你依旧想要使用PHPExcel的话建议使用它的进阶版PhpSpreadsheet,它打破了兼容性,大大提高了代码库质量(名称空间,PSR合规性,最新PHP语言功能的使用等)。
不过,还是文章开头所说的,这个扩展,功能性非常丰富,导出复杂的Excel表格很方便,但是内存的消耗很夸张,如果你导出的是一个简单的Excel的话,建议使用一下下面这个扩展。
PHP_XLSXWriter
PHP_XLSXWriter设计为轻量级,并且具有最小的内存使用量。
它旨在输出(Office 2007+)xlsx格式的Excel兼容电子表格,仅支持基本功能:
- 支持PHP 5.2.1+
- 采用UTF-8编码输入
- 多个工作表
- 支持货币/日期/数字单元格格式,简单公式
- 支持基本的单元格样式
- 支持编写巨大的100K +行电子表格
总体来说:它并没有PhpSpreadsheet
功能丰富,很多高级操作并不具备,但是它导出速度非常快,非常适合于数据量特别大,报表格式不是很复杂的导出需求。
基础使用
首先你需要安装它(建议使用composer安装):
如果你对composer
的使用不太了解,建议看下我写的另一篇文章:
Composer详细使用及利用Composer在Github和Packagist库中发布项目
composer require phpoffice/phpspreadsheet
我贴一个官方的demo:
$data = array(
array('year','month','amount'),
array('2003','1','220'),
array('2003','2','153.5'),
);
$writer = new XLSXWriter();
$writer->writeSheet($data);
$writer->writeToFile('output.xlsx');
在Laravel中使用
我这里其实并没有很规则的使用Laravel的方法来进行服务注册等等,只是在Laravel框架中进行了安装,然后直接使用类的方法,你如果使用这个库,可以到时候进行注册然后使用,更加方便一点。
安装步骤在基础使用中已经说明了,也可以查看github的文档。看一下代码吧
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class TestController extends Controller
{
/**
* 导出列表
*/
public function xlsxWriter()
{
$search = [];
$title = [
'姓名',
'年龄',
'性别',
'时间'
];
$data = [
[
'name' => '小明',
'age' => 18,
'sex' => '男',
'time' => '2019-05-30 13:20:45'
],
[
'name' => '小红',
'age' =>