星星博客站

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

编辑:laravel    日期:2021-05-19      

借鉴文件:https://www.ziruchu.com/art/254

laravel-excel3.* 手册:https://docs.laravel-excel.com/3.1/exports/

第一步:安装

composer require maatwebsite/excel

第二步:创建自定义导出文件

该命令app/Exports目录下生成对应的文件

php artisan make:export UsersExport --model=User

生成后的文件内容

<?phpnamespace 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();

    }
}

第三步:编辑导出文件

默认是返回集合,这里根据需求,修改成数组

<?phpnamespace 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');

控制器方法

<?phpnamespace 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

https://www.cnblogs.com/mg007/p/10965210.html

<?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;

   }

}

我是星星,学习不打烊。


上一篇:
下一篇:没有了