php高性能的导出excel读写扩展——xlswriter,比传统的Spreadsheet要快很多

1、安装pecl最简单方式

参考:https://zhuanlan.zhihu.com/p/434020011

  • 查询自己的php目录

    bash 复制代码
    find / -name php-config 2>/dev/null
  • 先进入php安装的bin目录

    bash 复制代码
    cd /www/server/php/74//bin/
  • 下载php安装pecl的脚本

    bash 复制代码
    wget --no-check-certificate http://pear.php.net/go-pear.phar -O go-pear.php
  • 安装pecl

    bash 复制代码
    php go-pear.php
  • pecl基本命令

    bash 复制代码
    pecl search xlswriter    #查找扩展

2、安装xlswriter

参考:https://xlswriter-docs.viest.me/zh-cn/an-zhuang/pecl-tui-jian

通过pecl 安装指定版本xlswriter,注意要指定版本,默认安装的是最新版,这不是我们想要的

bash 复制代码
#安装扩展
pecl install xlswriter-1.3.7

可能会报错:configure: error: Cannot find php-config. Please use --with-php-config=PATH ERROR:/tmp/pear/install/xlswriter/configure --enable-reader=yes' failed

这个错误是因为 PECL 找不到 php-config,这通常发生在 PHP 不是通过标准包管理器安装,或者路径不在系统 PATH 中的情况。

使用 PECL 但先设置环境变量

bash 复制代码
# 设置 PHP 相关路径到环境变量
export PATH=/www/server/php/74/bin:$PATH

# 验证 php-config 可用
php-config --version

# 现在可以正常安装了
pecl install xlswriter-1.3.7

3、安装laravel-xlswriter和使用

参考:https://learnku.com/articles/56844

参考代码

bash 复制代码
<?php

namespace App\Exports;

use Lysice\XlsWriter\Interfaces\FromArray;
use Lysice\XlsWriter\Traits\Exportable;
use Lysice\XlsWriter\Excel;

class UserExport implements FromArray
{
    use Exportable;

    private $data = [];
    private $headers = [];
    private $filename = 'demo.xlsx';
    private $disk = 'public';
    private $visibility = 'private';

    /**
     * 通过构造函数传入动态数据
     */
    public function __construct(array $data = [], array $headers = [], string $filename = null)
    {
        $this->data = $data;
        $this->headers = $headers;
        
        if ($filename) {
            $this->filename = $filename;
        }
    }

    /**
     * @return array
     */
    public function array(): array
    {
        return $this->data;
    }

    /**
     * @return array
     */
    public function headers(): array
    {
        return $this->headers;
    }

    /**
     * 设置文件名
     */
    public function setFilename(string $filename): self
    {
        $this->filename = $filename;
        return $this;
    }

    /**
     * 设置存储磁盘
     */
    public function setDisk(string $disk): self
    {
        $this->disk = $disk;
        return $this;
    }

    /**
     * 设置可见性
     */
    public function setVisibility(string $visibility): self
    {
        $this->visibility = $visibility;
        return $this;
    }

    /**
     * 保存文件(封装后的方法)
     */
    public function save(): string
    {
        return $this->store(
            $this->filename,
            $this->disk,
            Excel::TYPE_XLSX,
            ['visibility' => $this->visibility]
        );
    }
}

调用方式:

bash 复制代码
// 最简单的调用
$export = new UserExport($data, $headers);
$path = $export->save();

// 或者链式调用自定义配置
$path = (new UserExport($data, $headers))
    ->setFilename('users.xlsx')
    ->setDisk('public')
    ->setVisibility('private')
    ->save();
相关推荐
一条破秋裤3 小时前
TCP 套接字:API 流程、地址结构与网络字节序
网络·tcp/ip·php
HZZD_HZZD4 小时前
弱网下CoAP还省吗?合众致达Cat.1电表90天实测:MQTT重连流量占52%、续航差距从38%拉大到73%
开发语言·物联网·php·腾讯云
无糖可乐没有灵魂6 小时前
用一篇文章来精通“进程/线程/协程/锁“多并发任务
开发语言·php
字节渡客6 小时前
PHP项目复盘:foreach 引用残留造成的诡异数据错乱
开发语言·php
泡海椒6 小时前
JQuick-Excel JQuickRow 数据准备实战:JObjectConverter、JQuickRow.toRows 与 XML 导出链路
xml·windows·excel
aixingpan7 小时前
aixingpan.cn API开发文档:api_docs_transit接口指南
前端·php
狗凯之家源码网16 小时前
淘客口令落地页生成器 PHP 版深度评测
开发语言·php
画绛集美术16 小时前
本地化部署LLM用于美术史问答:一间美术教室的实践记录
开发语言·php
PHP实战开发录20 小时前
MySQL字段加索引为什么没变快
数据库·mysql·php·开发
狗凯之家源码网1 天前
PHP 用户反馈系统源码深度评测与实战指南
开发语言·php·用户反馈系统