承接 lkexcel/lkexportexcel 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

lkexcel/lkexportexcel

最新稳定版本:v1.0.1

Composer 安装命令:

composer require lkexcel/lkexportexcel

包简介

新一代PHP Excel处理库 - 高性能、低内存、易使用

README 文档

README

🚀 新一代PHP Excel处理库 - 高性能、低内存、易使用

PHP Version License Performance Memory

✨ 核心特性

🚀 超高性能

  • 极速处理: 比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 文件了解详情。

🤝 贡献

欢迎贡献代码!请先阅读 贡献指南

📞 支持

统计信息

  • 总下载量: 1
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 1
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-06-20