Laravel6.x及以上版本使用laravel-excel3.x之导出

借鉴文件: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;

    }

}

我是星星,学习不打烊。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xingxingwuxin

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值