Composer安装需先配置全局命令:Windows用官方安装器勾选Add to PATH,macOS/Linux用curl下载后移至/usr/local/bin并加执行权限;再通过composer require phpoffice/phpspreadsheet引入PhpSpreadsheet库,注意require autoload.php、路径正确及大文件读取优化。

Composer 安装失败或命令不可用?先确认基础环境
没装好 composer,后面所有操作都白搭。不是“下载个 composer.phar 放项目里就行”,得让系统全局识别 composer 命令。
- Windows 用户推荐用 官方安装器,勾选“Add to PATH”;装完在 CMD 执行
composer --version,有输出才算成功 - macOS / Linux 用户优先用
curl -sS https://getcomposer.org/installer | php下载composer.phar,再执行sudo mv composer.phar /usr/local/bin/composer并加执行权限:sudo chmod +x /usr/local/bin/composer - 如果报错
Command "composer" not found,说明 PATH 没生效,重启终端或运行source ~/.zshrc(或~/.bash_profile)
用 composer require 引入 PhpSpreadsheet 到项目
别去 GitHub 下 zip 包手动解压,也别用 git clone,直接走 Composer 依赖管理最稳。PhpSpreadsheet 是官方维护的现代 Excel 库,替代已废弃的 PHPExcel。
- 确保你在项目根目录(即有
composer.json的地方),运行:composer require phpoffice/phpspreadsheet
- 会自动写入
composer.json的require字段,并生成/更新vendor/autoload.php - 如果提示版本冲突(比如 Laravel 项目里已有旧版
guzzlehttp/guzzle),加--with-all-dependencies强制兼容:composer require phpoffice/phpspreadsheet --with-all-dependencies
- 国内慢?提前配好镜像源:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
在 PHP 脚本中加载并读写 Excel 文件
引入后不 autoload 就等于没装。PhpSpreadsheet 不提供全局函数,必须用命名空间 + 自动加载。
- 开头必须包含:
require 'vendor/autoload.php';
- 读取
.xlsx文件示例:$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load('data.xlsx'); $worksheet = $spreadsheet->getActiveSheet(); echo $worksheet->getCell('A1')->getValue(); - 写入新文件示例:
$spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); $sheet->setCellValue('A1', 'Hello World'); $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet); $writer->save('output.xlsx'); - 注意:
IOFactory::load()会根据后缀自动选择读取器,但只支持.xlsx、.xls、.csv等常见格式;读.xls需额外装phpoffice/phpspreadsheet的依赖markbaker/complex和markbaker/matrix(Composer 会自动处理)
常见报错和绕过方式
实际写代码时卡在某一步,大概率是这几个点没对上。
立即学习“PHP免费学习笔记(深入)”;
-
Class 'PhpOffice\PhpSpreadsheet\Spreadsheet' not found:没执行require 'vendor/autoload.php',或者路径错了(比如脚本不在项目根目录,要写成__DIR__ . '/vendor/autoload.php') -
Could not open data.xlsx for reading! File does not exist:检查文件路径是否相对当前脚本位置,建议用绝对路径调试:__DIR__ . '/data.xlsx' - 内存溢出(
Allowed memory size exhausted):大文件读取默认加载全量数据,改用ChunkReadFilter或设置读取配置:$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx'); $reader->setReadDataOnly(true); // 只读值,不读样式 - Laravel 中导出 Excel 报 500?确认没漏掉
use PhpOffice\PhpSpreadsheet\Spreadsheet;,且控制器方法里没 echo 其他内容(会破坏二进制响应头)
vendor/autoload.php 的引入时机和路径,以及读大文件时没开 setReadDataOnly(true) 导致 OOM。其他都是路径、命名空间、扩展(如 zip、xml)没开这类基础问题。










