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();
相关推荐
火云代理12 小时前
更换网络后为什么会退出登录?分清 IP、Cookie 与会话的关系
服务器·网络·网络协议·tcp/ip·php·ip
火云代理15 小时前
同一个网站,有的网络能打开、有的打不开?认识 IPv4 与 IPv6 的访问差异
服务器·网络·网络协议·tcp/ip·测试工具·php·状态模式
黎羽_19 小时前
Excel 插图在手机端不显示/错位:完整排查手册
excel·openpyxl·移动端·办公文档
笑容掩饰我的失落21 小时前
区块链从小白到精通(七):Solidity 语法精讲——数据类型、函数、修饰器与事件
算法·区块链·php·智能合约·哈希算法
笑容掩饰我的失落2 天前
区块链从小白到精通(八):从零实现一个标准 ERC-20 代币(完整可运行代码)
算法·区块链·php·智能合约·哈希算法
用户298698530142 天前
React 前端实现 Excel 与 CSV 互转:基于 WebAssembly 的浏览器端方案
javascript·react.js·excel
仓库日记3 天前
Excel进销存何时该换?用3项检查判断是否需要软件
经验分享·excel·进销存·开单软件
xbzb3 天前
从零容器化部署 ECShop:Harbor 私有仓库 + 自定义 PHP 镜像 + LNMP 三容器
容器·php·harbor·镜像·仓库·ecshop
用户0332126663673 天前
如何使用 Python 将 JSON 转换为 Excel
python·excel
2601_967980114 天前
Python自动化办公:模块、库与样式调整教程
python·excel·自动化办公·openpyxl·样式调整