avadim / fast-excel-laravel
轻量级且非常快的Laravel XLSX电子表格导出/导入
Requires
- php: >=7.4
- ext-json: *
- avadim/fast-excel-reader: ^2.15
- avadim/fast-excel-writer: ^5.3.1
- illuminate/contracts: ^6.0|^7.0|^8.0|^9.0|^10.0
- illuminate/support: ^6.0|^7.0|^8.0|^9.0|^10.0
Requires (Dev)
- orchestra/testbench: ^4.0|^5.0|^6.0
- phpunit/phpunit: ^8.0|^9.0
README
轻量级且非常快的Laravel XLSX电子表格读写库(基于纯PHP的FastExcelWriter和FastExcelReader)
简介
从您的Laravel应用程序中导出数据从未如此快速!将模型导入到您的Laravel应用程序中从未如此简单!
此库是围绕avadim/fast-excel-writer和avadim/fast-excel-reader构建的包装器,因此它也是轻量级、快速且占用内存最少。使用此库,您可以从Laravel应用程序中将数组、集合和模型导出到XLSX文件,并可以将数据导入到Laravel应用程序中。
特性
- 轻松将模型、集合和数组导出到Excel
- 以非常快且使用最少内存的方式导出大型数据集
- 可以创建多个工作表,并支持基本的列、行和单元格样式
- 您可以设置行的宽度和列的宽度(包括自动宽度计算)
- 非常快且内存使用量最少地将工作簿和工作表导入到Eloquent模型中
- 从导入的表头自动检测字段
- 映射导入/导出数据
- 支持自动格式化器和自定义格式化器导入数据的日期时间值
- 库可以定义和从XLSX文件中提取图像
- 您可以向输出XLSX文件添加活动超链接、公式、注释、图表和图像
- 支持带/不带密码的工作簿和工作表保护
- 支持页面设置 - 页边距、页面大小
安装
通过composer安装
composer require avadim/fast-excel-laravel
然后您可以使用外观Excel
// Create workbook... $excel = \Excel::create(); // export model... $excel->sheet()->withHeadings()->exportModel(Users::class); // and save XLSX-file to default storage $excel->saveTo('path/file.xlsx'); // or save file to specified disk $excel->store('disk', 'path/file.xlsx'); // Open saved workbook $excel = \Excel::open(storage_path('path/file.xlsx')); // import records to database $excel->withHeadings()->importModel(User::class);
跳转到
导出数据
导出模型
轻松快速地导出模型。这样,您可以只导出模型数据,不带标题和任何样式
// Create workbook with sheet named 'Users' $excel = \Excel::create('Users'); // Export all users to Excel file $sheet->exportModel(Users::class); $excel->saveTo('path/file.xlsx');
以下代码将字段名称和样式(字体和边框)写入第一行,然后导出User模型的所有数据
// Create workbook with sheet named 'Users' $excel = \Excel::create('Users'); // Write users with field names in the first row $sheet->withHeadings() ->applyFontStyleBold() ->applyBorder('thin') ->exportModel(Users::class); $excel->saveTo('path/file.xlsx');
映射导出数据
您可以将需要添加为行的数据映射
$sheet = $excel->getSheet(); $sheet->mapping(function($model) { return [ 'id' => $model->id, 'date' => $model->created_at, 'name' => $model->first_name . $model->last_name, ]; })->exportModel(User::class); $excel->save($testFileName);
导出任何集合和数组
// Create workbook with sheet named 'Users' $excel = \Excel::create('Users'); $sheet = $excel->getSheet(); // Get users as collection $users = User::where('age', '>', 35)->get(); // Write attribute names $sheet->writeRow(array_keys(User::getAttributes())); // Write all selected records $sheet->writeData($users); $sheet = $excel->makeSheet('Records'); // Get collection of records using Query Builder $records = \DB::table('users')->where('age', '>=', 21)->get(['id', 'name', 'birthday']); $sheet->writeData($records); $sheet = $excel->makeSheet('Collection'); // Make custom collection of arrays $collection = collect([ [ 'id' => 1, 'site' => 'google.com' ], [ 'id' => 2, 'site.com' => 'youtube.com' ], ]); $sheet->writeData($collection); $sheet = $excel->makeSheet('Array'); // Make array and write to sheet $array = [ [ 'id' => 1, 'name' => 'Helen' ], [ 'id' => 2, 'name' => 'Peter' ], ]; $sheet->writeData($array); $sheet = $excel->makeSheet('Callback'); $sheet->writeData(function () { foreach (User::cursor() as $user) { yield $user; } });
数据导出的高级用法
有关avadim/fast-excel-writer的详细文档,请参阅此处:https://github.com/aVadim483/fast-excel-writer/tree/master#readme
$excel = \Excel::create('Users'); $sheet = $excel->getSheet(); // Set column B to 12 $sheet->setColWidth('B', 12); // Set options for column C $sheet->setColOptions('C', ['width' => 12, 'text-align' => 'center']); // Set column width to auto $sheet->setColWidth('D', 'auto'); $title = 'This is demo of avadim/fast-excel-laravel'; // Begin area for direct access to cells $area = $sheet->beginArea(); $area->setValue('A2:D2', $title) ->applyFontSize(14) ->applyFontStyleBold() ->applyTextCenter(); // Write headers to area, column letters are case independent $area ->setValue('a4:a5', '#') ->setValue('b4:b5', 'Number') ->setValue('c4:d4', 'Movie Character') ->setValue('c5', 'Birthday') ->setValue('d5', 'Name') ; // Apply styles to headers $area->withRange('a4:d5') ->applyBgColor('#ccc') ->applyFontStyleBold() ->applyOuterBorder('thin') ->applyInnerBorder('thick') ->applyTextCenter(); // Write area to sheet $sheet->writeAreas(); // You can set value formats for some fields $sheet->setFieldFormats(['birthday' => '@date', 'number' => '@integer']); // Write data to sheet $sheet->writeData($data); // Save XLSX-file $excel->saveTo($testFileName);
导入数据
导入模型
要导入模型,您可以使用方法importModel()
。如果第一行包含字段名称,则可以使用方法withHeadings()
应用这些名称
// Open XLSX-file $excel = Excel::open($file); // Import a workbook to User model using the first row as attribute names $excel->withHeadings()->importModel(User::class); // Done!!!
您可以从列或单元格定义要导入的列或单元格
// Import row to User model from columns range A:B - only 'name' and 'birthday' $excel->withHeadings()->importModel(User::class, 'A:B');
// Import from cells range $excel->withHeadings()->importModel(User::class, 'B4:D7'); // Define top left cell only $excel->withHeadings()->importModel(User::class, 'B4');
在最后两个示例中,我们还假设导入数据的第一行(第4行)是属性名称。
映射导入数据
但是,您可以自己设置列与字段名称之间的对应关系。
// Import row to User model from columns range B:E $excel->mapping(function ($record) { return [ 'id' => $record['A'], 'name' => $record['B'], 'birthday' => $record['C'], 'random' => $record['D'], ]; })->importModel(User::class, 'B:D'); // Define top left cell only $excel->mapping(['B' => 'name', 'C' => 'birthday', 'D' => 'random'])->importModel(User::class, 'B5'); // Define top left cell only (shorter way) $excel->importModel(User::class, 'B5', ['B' => 'name', 'C' => 'birthday', 'D' => 'random']);
数据导入的高级用法
有关avadim/fast-excel-reader的详细文档,请参阅此处:https://github.com/aVadim483/fast-excel-reader/tree/master#readme
$excel = Excel::open($file); $sheet = $excel->getSheet('Articles'); $sheet->setReadArea('B5'); foreach ($sheet->nextRow() as $rowNum => $rowData) { $user = User::create([ 'name' => $rowData['B'], 'birthday' => new \Carbon($rowData['C']), 'password' => bcrypt($rowData['D']), ]); Article::create([ 'user_id' => $user->id, 'title' => $rowData['E'], 'date' => new \Carbon($rowData['F']), 'public' => $rowData['G'] === 'yes', ]); }
更多特性
您可以在FastExcelWriter的文档中查看更多导出特性。
您可以在FastExcelReader的文档中查看更多导入功能
您想支持FastExcelLaravel吗?
如果您觉得这个包很有用,您可以支持并捐款给我一杯咖啡
- USDT (TRC20) TSsUFvJehQBJCKeYgNNR1cpswY6JZnbZK7
- USDT (ERC20) 0x5244519D65035aF868a010C2f68a086F473FC82b
- ETH 0x5244519D65035aF868a010C2f68a086F473FC82b
或者直接在GitHub上给我一个star :)