lkexcel/lkexportexcel
最新稳定版本:v1.0.1
Composer 安装命令:
composer require lkexcel/lkexportexcel
包简介
新一代PHP Excel处理库 - 高性能、低内存、易使用
README 文档
README
🚀 新一代PHP Excel处理库 - 高性能、低内存、易使用
✨ 核心特性
🚀 超高性能
- 极速处理: 比PhpSpreadsheet快5倍以上
- 流式架构: 内存使用与文件大小完全解耦
- 智能调优: 自动检测数据量并优化处理策略
- 百万数据: 轻松处理100万+条数据,内存使用恒定
💡 易用设计
- 链式API: Laravel风格的优雅链式调用
- 智能检测: 自动识别文件格式和数据类型
- 框架集成: 深度支持Laravel、WebMan、ThinkPHP
- 丰富示例: 13个实用示例覆盖各种场景
🛠️ 完整功能
- 多格式支持: CSV、XLSX读写
- 样式控制: 字体、颜色、边框等完整样式
- 数据库集成: 直接从数据库导入导出
- 进度显示: 内置进度条,实时显示处理状态
📊 性能测试报告
🏆 测试结果概览
| 数据量 | 导出速度(CSV) | 导出速度(XLSX) | 导入速度(CSV) | 导入速度(XLSX) | 内存峰值 | 状态 |
|---|---|---|---|---|---|---|
| 1K条 | 34,235条/秒 | 29,272条/秒 | 11,721条/秒 | 14,605条/秒 | 12 MB | ✅完美 |
| 10K条 | 45,622条/秒 | 65,925条/秒 | 12,975条/秒 | 11,662条/秒 | 63.5 MB | ✅优秀 |
| 110K条 | 77,079条/秒 | 72,242条/秒 | 113,430条/秒 | 110,503条/秒 | 84 MB | ✅优秀 |
| 100万条 | 64,289条/秒 | 68,807条/秒 | 140,466条/秒 | 124,924条/秒 | 317.3 MB | ✅完美 |
🚀 核心亮点
💪 百万数据处理能力
- 文件大小: 235.2 MB
- 总耗时: 45.38秒
- 导出速度: 64K-68K条/秒
- 导入速度: 124K-140K条/秒
- 内存使用: 流式处理,内存恒定
- 数据完整性: 100%准确 (1,000,001条含表头)
⚡ 智能自动调优
系统自动检测大数据处理需求,无需手动配置即可处理任意大小的文件:
🚀 自动调优: PHP内存限制已从 128M 提高到 512M
🎯 真正的流式处理
所有测试中均显示 "流式处理,内存恒定",证明内存使用与数据量完全解耦:
- 处理方式与数据量无关: 1K条和100万条数据使用相同的API
- 内存使用可预测: 无论数据量大小,内存消耗保持稳定
- 企业级稳定性: 100万条数据处理成功率100%
📦 安装
composer require lkexcel/lkexportexcel
系统要求
- PHP >= 8.1
- ext-xml
- ext-zip (XLSX支持,可选)
🚀 快速开始
基础读取
use LkExcel\LkExportExcel\Api\Reader; // 简单读取 $reader = new Reader(); $data = $reader->read('data.xlsx')->toArray(); // 链式操作 $data = $reader->read('users.csv') ->headers(true) // 包含表头 ->limit(100) // 只读100行 ->filter(fn($row) => $row['age'] > 18) // 过滤数据 ->toArray(); // 流式处理大文件 foreach ($reader->read('large.xlsx')->stream() as $row) { // 逐行处理,内存恒定 processRow($row); }
基础写入
use LkExcel\LkExportExcel\Api\Writer; $writer = new Writer(); // 简单写入 $writer->startWrite('output.xlsx') ->writeHeaders(['姓名', '年龄', '部门']) ->writeRows([ ['张三', 25, '技术部'], ['李四', 30, '产品部'], ]) ->finishWrite(); // 流式写入大量数据 $writer->startWrite('large.csv') ->writeHeaders(['ID', '数据', '时间']); for ($i = 0; $i < 1000000; $i++) { $writer->writeRow([$i, "数据{$i}", date('Y-m-d H:i:s')]); } $writer->finishWrite();
数据源集成
// 从任何可迭代数据源导出 $writer = new Writer(); $writer->startWrite('users.xlsx') ->fromDataSource($yourDataSource) // Generator、数组、Iterator等 ->finishWrite(); // 支持数据映射 $writer->startWrite('mapped_data.csv') ->fromDataSource($dataSource, function($item) { return [ 'id' => $item['user_id'], 'name' => strtoupper($item['username']), 'email' => $item['email_address'] ]; }) ->finishWrite();
格式转换
use LkExcel\LkExportExcel\Api\Converter; $converter = new Converter(); // CSV转XLSX $converter->convert('data.csv', 'data.xlsx'); // XLSX转CSV (支持大文件) $converter->convert('large.xlsx', 'large.csv'); // 批量转换 $converter->batchConvert([ 'file1.csv' => 'file1.xlsx', 'file2.xlsx' => 'file2.csv' ]);
🔌 框架集成
Laravel
1. 安装服务提供者
// config/app.php 'providers' => [ LkExcel\LkExportExcel\Integration\Laravel\LkExcelServiceProvider::class, ], 'aliases' => [ 'LkExcel' => LkExcel\LkExportExcel\Integration\Laravel\Facades\LkExcel::class, ],
2. 控制器中使用
use LkExcel; class UserController extends Controller { public function export() { // 从Collection导出 $users = User::all(); return LkExcel::download($users, 'users.xlsx'); } public function import(Request $request) { // 导入Excel文件 $data = LkExcel::import($request->file('excel')); // 批量插入数据库 User::insert($data); return response()->json(['success' => true]); } public function largeExport() { // 大数据导出 - 自动流式处理 return LkExcel::fromDataSource( $yourDataSource, 'active_users.xlsx' ); } }
WebMan
1. 配置安装
// config/bootstrap.php use LkExcel\LkExportExcel\Integration\WebMan\LkExcelPlugin; LkExcelPlugin::install([ 'temp_dir' => runtime_path('excel_temp'), ]);
2. 控制器使用
class ExportController { public function export(): Response { $users = User::select(); $response = LkExcelPlugin::downloadExcel($users, 'users.xlsx', [ 'headers' => ['ID', '姓名', '邮箱', '创建时间'] ]); return new Response( $response['status'], $response['headers'], $response['content'] ); } public function import(Request $request): Response { $file = $request->file('excel'); $reader = LkExcelPlugin::readFromUpload($file); $data = $reader->headers(true)->toArray(); // 处理导入数据 foreach ($data as $row) { User::create($row); } return json(['status' => 'success']); } }
ThinkPHP
1. 服务注册
// 在启动文件中注册 use LkExcel\LkExportExcel\Integration\ThinkPHP\LkExcelService; LkExcelService::register();
2. 控制器使用
class UserController extends BaseController { public function export() { $users = User::select(); // 使用助手函数 $response = lkexcel()->download($users, 'users.xlsx', [ 'headers' => ['ID', '姓名', '邮箱'], ]); return download($response['content'], $response['filename']); } public function exportFromModel() { // 从数据源导出 return lkexcel()->fromDataSource($yourDataSource, 'users.xlsx', [ 'headers' => ['ID', '姓名', '邮箱', '创建时间'] ]); } }
🎨 高级功能
样式设置
$writer = new Writer(); $writer->startWrite('styled.xlsx') ->writeHeaders(['产品', '价格', '状态']) ->setHeaderStyle([ 'font' => ['bold' => true, 'color' => '#FFFFFF'], 'fill' => ['color' => '#4472C4'] ]) ->writeRows([ ['商品A', 100, '在售'], ['商品B', 200, '缺货'], ]) ->setColumnStyle('B', ['numberFormat' => '¥#,##0.00']) // 价格格式 ->setConditionalStyle('C', [ '在售' => ['font' => ['color' => '#008000']], '缺货' => ['font' => ['color' => '#FF0000']] ]) ->finishWrite();
数据验证和转换
$reader = new Reader(); $data = $reader->read('data.xlsx') ->validate([ 'email' => 'email', // 邮箱验证 'age' => 'numeric', // 数字验证 'phone' => 'phone' // 手机号验证 ]) ->transform([ 'date' => fn($value) => date('Y-m-d', strtotime($value)), 'price' => fn($value) => floatval(str_replace(['¥', ','], '', $value)) ]) ->toArray();
进度监控
use LkExcel\LkExportExcel\Performance\ProgressReporter; $writer = new Writer(); $progress = new ProgressReporter(); $writer->setProgressCallback(function($current, $total) use ($progress) { $progress->update($current, $total); // 自定义进度处理 echo "处理进度: " . round($current/$total*100, 2) . "%\n"; }); $writer->startWrite('large.xlsx') ->fromDataSource($yourDataSource) ->finishWrite();
📝 常用示例
复杂数据导出
$writer = new Writer(); $writer->startWrite('user_report.xlsx') ->writeHeaders(['姓名', '邮箱', '部门', '薪资']) ->fromDataSource($yourReportData) ->setColumnStyle('D', ['numberFormat' => '¥#,##0.00']) ->finishWrite();
错误处理
try { $reader = new Reader(); $data = $reader->read('data.xlsx')->toArray(); } catch (\LkExcel\LkExportExcel\Exception\FileNotFoundException $e) { echo "文件不存在: " . $e->getMessage(); } catch (\LkExcel\LkExportExcel\Exception\InvalidFormatException $e) { echo "文件格式错误: " . $e->getMessage(); } catch (\LkExcel\LkExportExcel\Exception\MemoryLimitException $e) { echo "内存不足: " . $e->getMessage(); }
🔧 配置选项
// 全局配置 LkExportExcel::config([ 'default_format' => 'xlsx', 'memory_limit' => 128 * 1024 * 1024, // 128MB 'temp_directory' => sys_get_temp_dir(), 'auto_detect_format' => true, 'buffer_size' => 1000, // 缓冲行数 ]); // 读取配置 $reader = new Reader([ 'headers' => true, 'skip_empty_rows' => true, 'trim_whitespace' => true, ]); // 写入配置 $writer = new Writer([ 'auto_size_columns' => true, 'include_bom' => false, // CSV BOM 'compression_level' => 6, // XLSX压缩级别 ]);
📚 更多示例
项目包含13个实用示例,涵盖各种使用场景:
- 基础操作: 简单读写、格式转换
- 数据库集成: 导入导出、大数据处理
- 性能测试: 百万数据、内存监控
- 框架集成: Laravel、WebMan、ThinkPHP
- 高级功能: 样式设置、数据验证
查看 examples/ 目录获取完整示例代码。
📄 许可证
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
🤝 贡献
欢迎贡献代码!请先阅读 贡献指南。
📞 支持
- 文档: 完整文档
- 示例: 使用示例
- 问题: GitHub Issues
- 讨论: GitHub Discussions
统计信息
- 总下载量: 1
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-06-20