laravel-excel 3 导出(多图片导出)

文章目录

  • 前言
  • 一、扩展版本
  • 二、代码
    • 1.excel导出类
    • 2.controller生成数据类
  • 三、效果
  • 总结


前言

本文记录通过laravel-excel:3将供应商信息导出为excel的功能,特别记录关于该拓展对图片、表格样式的操作。其中用到了php的可变变量


一、扩展版本

1、composer require “maatwebsite/excel”: “^3.1”
2、官方文档:https://docs.laravel-excel.com/3.1/getting-started/


二、代码

1.excel导出类

excel导出类ExcelController实现WithDrawings、FromArray等接口:

<?php


namespace App\Http\Controllers;

use Maatwebsite\Excel\Concerns\FromArray;
use Maatwebsite\Excel\Concerns\WithColumnFormatting;
use Maatwebsite\Excel\Concerns\WithColumnWidths;
use Maatwebsite\Excel\Concerns\WithDrawings;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Events\AfterSheet;

class ExcelController implements FromArray,WithColumnFormatting,WithColumnWidths,WithDrawings,WithEvents
{
    protected $arr;
    //$drawings为PhpOffice\PhpSpreadsheet\Worksheet\Drawing对象数组
    protected $drawings;
    public function __construct(array $arr,$drawings)
    {
        $this->arr= $arr;
        $this->drawings = $drawings;
    }
    //导出数据
    public function array(): array
    {
        return $this->arr;
    }
//自定义单元格格式
    public function columnFormats(): array
    {
//        return [
//            'B' => NumberFormat::FORMAT_DATE_DDMMYYYY,
//            'C' => NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE,
//        ];
        return [];
    }
//自定义宽
    public function columnWidths(): array
    {
        return [
          'A'=>'20',
          'B'=>'20',
          'C'=>'20',
          'D'=>'20',
          'E'=>'20',
          'F'=>'20',
          'G'=>'20',
          'H'=>'20',
          'I'=>'20',
          'J'=>'20',
          'K'=>'20',
          'L'=>'20',
          'M'=>'20',
          'N'=>'20',
        ];
    }
//导出图片
    public function drawings()
    {
        return $this->drawings;
    }
//自定义高
    public function registerEvents(): array
    {
        return [
            AfterSheet::class => function(AfterSheet $event){
                $event->sheet->getDelegate()->getDefaultRowDimension()->setRowHeight(50);
            },
        ];
    }
}

2.controller生成数据类

代码如下(数据库图片名以逗号’,'相隔):


use PhpOffice\PhpSpreadsheet\Worksheet\Drawing;

class SupplierController extends Controller{

    /**
     * laravel-excel3导出
     * 图片文件不能重复
     * 取相关图片类的第一个图片文件展示
     */
    public function supplier_excel(){
    //表头
    $sup_arr = [
            ['供应商名称','成立日期','统一社会信用代码','营业执照有效期','动物检验检疫证明','经营许可证'],
        ];
        $sup = supplier::where('id',$su_id)->get(['su_name','start_time','code','exp'])->toArray();
        //将供应商信息加到sup_arr数组中
        foreach ($sup as $k => $v){
            $sup_arr[] = array_values($v);
        }
        //获取图片名称
$img = supplier::where('id',$su_id)->get(['business_cert','zoon_cert'])->toArray();
        $i = 2;
        $drawings = [];
        foreach ($img as $k => $v){
            $img_name = explode(',',$v['zoon_cert']);
            if (empty($img_name[0])) break;
            //将对象命名为可变变量
            $$i = new Drawing();
            //自定义导出图片信息
            $$i->setName('Logo');
            $$i->setDescription('This is my logo');
            $$i->setPath(env('APP_STORAGE').'supplier/'.$img_name[0]);
            $$i->setHeight(50);
            $$i->setCoordinates('E'.$i);
            //将对象放入数组
            $drawings[] = ${$i};
            $i += 1;
        }
        //第二类图片
        $i1 = 2;
        foreach ($img as $k => $v){
            $img_name = explode(',',$v['food_cert']);
            if (empty($img_name[0])) break;
            $$i = new Drawing();
            $$i->setName('Logo');
            $$i->setDescription('This is my logo');
            $$i->setPath(env('APP_STORAGE').'supplier/'.$img_name[0]);
            $$i->setHeight(50);
            $$i->setCoordinates('F'.$i1);
            $drawings[] = ${$i};
            $i1 += 1;
        }
        //将数据与对象数组传入导出类
        $export = new ExcelController($sup_arr,$drawings);
        //下载excel文件
        return Excel::download($export, 'supplier.xlsx');
     }
  }

三、效果

laravel-excel 3 导出(多图片导出)_第1张图片

总结

excel下载的 response类型为’Symfony\Component\HttpFoundation\BinaryFileResponse’,可能与框架的响应类型不同。

你可能感兴趣的:(excel,php)