Laravel 如何实现 Excel 导入及导出功能

安装依赖#

首先使用Composer安装依赖,在项目根目录下执行:

Copy Highlighter-hljs
composer require maatwebsite/excel

导出Excel文件#

首先创建一个 export

Copy Highlighter-hljs
php artisan make:export SchoolExport

该命令会在 app/Exports 创建 SchoolExport.php 文件。

数组形式导出#

因为一般我们都是有选择性的导出指定数据。所以这里需要用 FromArray 来实现。

Copy Highlighter-hljs
<?php namespace App\Exports; use Maatwebsite\Excel\Concerns\FromArray; class SchoolExport implements FromArray { protected $invoices; public function __construct(array $invoices) { $this->invoices = $invoices; } public function array(): array { // TODO: Implement array() method. return $this->invoices; } }

然后直接在控制器中操作导出数据即可。

Copy Highlighter-hljs
public function school() { $sql = "select a.zwmc,a.id,a.szgj from gwdxyxk as a left join yu_school_ersanshi as b on a.id=b.s_ys_id where a.szgj='a0920192AD18538XLtaQ' and b.content1 is null and a.zwmc is not null"; $res = DB::connection('mysql_crm')->select($sql); $arr = array_map(function ($value){ return (array)$value; },$res); foreach ($arr as $k=>$v){ $arr[$k]['url'] = "https://baike.baidu.com/item/".$v['zwmc']; } //因为要设置行名称,所以讲表头合并到结果集的第一行 $result = array_merge([[ 'zwmc', 'id', 'szgj', 'url' ]],$arr); return Excel::download(new SchoolExport($result),'school.xlsx'); }

collection 导出#

若你直接导出表中所有数据。则可以直接使用 collection:

Copy Highlighter-hljs
<?php namespace App\Exports; use App\User; use Maatwebsite\Excel\Concerns\FromCollection; class UsersExport implements FromCollection { public function collection() { return User::all(); } }

然后直接在控制器中操作导出数据即可。

Copy Highlighter-hljs
<?php namespace App\Http\Controllers; use App\Exports\UsersExport; use Maatwebsite\Excel\Facades\Excel; class UsersController extends Controller { public function export() { return Excel::download(new UsersExport, 'users.xlsx'); } }

针对数据太多,还支持队列导出以及更多的导出格式。详细请查看官方文档

导入Excel文件#

首先创建一个 import

Copy Highlighter-hljs
php artisan make:import UsersImport --model=User

该命令会在 app/Imports 创建 UsersImport.php 文件。

Copy Highlighter-hljs
<?php namespace App\Imports; use App\User; use Illuminate\Support\Facades\Hash; use Maatwebsite\Excel\Concerns\ToModel; class UsersImport implements ToModel { /** * @param array $row * * @return User|null */ public function model(array $row) { return new User([ 'name' => $row[0], 'email' => $row[1], 'password' => Hash::make($row[2]), ]); } }

然后直接在控制器中导出数据即可:

Copy Highlighter-hljs
use App\Imports\UsersImport; use Maatwebsite\Excel\Facades\Excel; use App\Http\Controllers\Controller; class UsersController extends Controller { public function import() { Excel::import(new UsersImport, 'users.xlsx'); return redirect('/')->with('success', 'All good!'); } }
posted @   caibaotimes  阅读(1165)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示
CONTENTS