借鉴文件:Laravel6.x及以上版本使用laravel-excel3.x之导出-Laravel-自如初个人博客
laravel-excel3.* 手册:🚀 5 minute quick start | Laravel Excel
第一步:安装
composer require maatwebsite/excel
第二步:创建自定义导出文件
该命令app/Exports
目录下生成对应的文件
php artisan make:export UsersExport --model=User
生成后的文件内容
<?php
namespace App\Exports;
use App\User;
use Maatwebsite\Excel\Concerns\FromCollection;
class UsersExport implements FromCollection
{
/**
* @return \Illuminate\Support\Collection
*/
public function collection()
{
return \App\Models\User::all();
}
}
第三步:编辑导出文件
默认是返回集合,这里根据需求,修改成数组
<?php
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromArray;
use App\User;
class TestExport implements FromArray
{
public function array(): array
{
$data = [
// 设置表头信息
['序号','姓名','性别','年龄'],
];
// 取出需求导出的数据
$userDatas = User::get();
foreach ($userDatas as $k => $v) {
$data[] = [
$v->id,
$v->name,
$v->gender,
$v->age,
];
}
return $data;
}
}
第四步:定义路由与方法
路由
Route::get('export','TestController@export');
控制器方法
<?php
namespace App\Http\Controllers;
use App\Exports\UserExport;
use App\Exports\UsersExport;
use Excel;
class UserController extends Controller
{
// 导出
public function export()
{
return \Maatwebsite\Excel\Facades\Excel::download(new UsersExport(), 'user.xlsx');
}
}
这样导出就完成了。
例子:
2、例子2
列子3、带图片导出
public function drawings()
{
$id = $this->invoices;
$data = [
// 设置表头信息
['编号ID','姓名','电话','状态','时间','图片'],
];
// 取出需求导出的数据
$userDatas = DB::table('task_applies as ta')
->join('members as m','m.id','=','ta.member_id')
->where('ta.task_id',$id)
->select('ta.id','ta.status','ta.create_time','file','m.username','m.nickname')
->get();
foreach ($userDatas as $k => $v) {
//样式输出
if($v->status == -2){
$v->status = '放弃任务';
}elseif($v->status == -1){
$v->status = '审核失败';
}elseif($v->status == 0){
$v->status = '未完成';
}elseif($v->status == 1){
$v->status = '等待审核';
}elseif($v->status == 2){
$v->status = '已完成';
}
$zui = $v->create_time;
$v->create_time =date('Y-m-d H:i:s',$zui);
$data[] = [
$v->id,
$v->nickname,
$v->username,
$v->status,
$v->create_time,
];
$data2[] = [
$v->id,
$v->nickname,
$v->username,
$v->status,
$v->create_time,
$v->file,
];
}
//二维数组取最后一组的数据
$arr2 = array_map('end',$data2);
$drawing = [];
foreach ($arr2 as $k => $v){
if(strpos($v,',') !== false){
//字符串转一维数组
$arr3 = explode(',',$v);
// dd($arr3);
// foreach ($arr3 as $k1 => $v1){
// $ks1 = 'G'.($k+2);
// ${$str.$k}[$k1] = new Drawing();
// ${$str.$k}[$k1] ->setName('Logo'.$k1);
// ${$str.$k}[$k1] ->setDescription('This is my logo'.$k1);
// ${$str.$k}[$k1] ->setPath(public_path($v1));
// ${$str.$k}[$k1] ->setHeight(20);
// ${$str.$k}[$k1] ->setCoordinates($ks1);
// array_push($drawing,${$str.$k});
// }
}else{
$ks = 'F'.($k+2);
$drawing[$k] = new Drawing();
$drawing[$k]->setName('Logo');
$drawing[$k]->setDescription('This is my logo');
$drawing[$k]->setPath(public_path($v));
$drawing[$k]->setHeight(20);
$drawing[$k]->setCoordinates($ks);
}
}
// dd($drawing);
return $drawing;
}
例子4:视图导出,一行带多张图片
https://www.jb51.net/article/175710.htm
Laravel Excel模板导出-带图片 - 木公007 - 博客园
<?php namespace App\Exports; use Illuminate\Support\Facades\DB; use Maatwebsite\Excel\Concerns\FromArray; use Maatwebsite\Excel\Concerns\FromCollection; use Illuminate\Contracts\View\View; use Maatwebsite\Excel\Concerns\FromView; use Maatwebsite\Excel\Concerns\WithEvents; use Maatwebsite\Excel\Concerns\WithDrawings; use PhpOffice\PhpSpreadsheet\Worksheet\Drawing; class OrderExport implements FromView,WithDrawings { protected $invoices; public function __construct($invoices) { $this->invoices = $invoices; } /** * @return \Illuminate\Support\Collection */ // public function collection() // { // // // } public function view(): View { $id = $this->invoices; // 取出需求导出的数据 $userDatas = DB::table('task_applies as ta') ->join('members as m','m.id','=','ta.member_id') ->where('ta.task_id',$id) ->select('ta.id','ta.status','ta.create_time','file','m.username','m.nickname') ->get() ->toArray(); foreach ($userDatas as $v){ //样式输出 if($v->status == -2){ $v->status = '放弃任务'; }elseif($v->status == -1){ $v->status = '审核失败'; }elseif($v->status == 0){ $v->status = '未完成'; }elseif($v->status == 1){ $v->status = '等待审核'; }elseif($v->status == 2){ $v->status = '已完成'; } $zui = $v->create_time; $v->create_time =date('Y-m-d H:i:s',$zui); } // dd($userDatas); return view('admin.task.daochu2',compact('userDatas')); } public function drawings() { $id = $this->invoices; $data = [ // 设置表头信息 ['编号ID','姓名','电话','状态','时间','图片'], ]; // 取出需求导出的数据 $userDatas = DB::table('task_applies as ta') ->join('members as m','m.id','=','ta.member_id') ->where('ta.task_id',$id) ->select('ta.id','ta.status','ta.create_time','file','m.username','m.nickname') ->get(); foreach ($userDatas as $k => $v) { //样式输出 if($v->status == -2){ $v->status = '放弃任务'; }elseif($v->status == -1){ $v->status = '审核失败'; }elseif($v->status == 0){ $v->status = '未完成'; }elseif($v->status == 1){ $v->status = '等待审核'; }elseif($v->status == 2){ $v->status = '已完成'; } $zui = $v->create_time; $v->create_time =date('Y-m-d H:i:s',$zui); $data[] = [ $v->id, $v->nickname, $v->username, $v->status, $v->create_time, ]; $data2[] = [ $v->id, $v->nickname, $v->username, $v->status, $v->create_time, $v->file, ]; } //二维数组取最后一组的数据 $arr2 = array_map('end',$data2); $drawing = []; $arr = ['K','L','M','N','O','P','Q']; foreach ($arr2 as $k => $v){ //字符串转一维数组 $arr3 = explode(',',$v); // dd($arr3); foreach ($arr3 as $k1 => $v1){ $ks1 = $arr[$k1].($k+2); $drawing[$k][$k1] = new Drawing(); $drawing[$k][$k1] ->setName('Logo'.$k.$k1); $drawing[$k][$k1] ->setDescription('This is my logo'.$k.$k1); $drawing[$k][$k1] ->setPath(public_path($v1)); $drawing[$k][$k1] ->setHeight(50); $drawing[$k][$k1] ->setCoordinates($ks1); } } $result = array_reduce($drawing, function ($result, $value) { return array_merge($result, array_values($value)); }, array()); // dd($result); return $result; } }
我是星星,学习不打烊。