Laravel 使用PHP_XLSXWriter实现大数据量Excel导出

本文介绍了在Laravel中使用PHP_XLSXWriter扩展进行大数据量Excel导出的情况,相较于PHPExcel,PHP_XLSXWriter内存占用少,导出速度快,适合处理大量数据和简单格式的报表。文章展示了基础使用、在Laravel中的应用以及如何指定列的数据类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我在去年写过一篇关于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' => 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

millet109

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值