laravel-admin 自定义导出excel功能,并导出图片

laravel-admin 自定义导出excel功能,并导出图片

https://www.jianshu.com/p/91975f66427d

最近用laravel-admin在做一个小项目,其中用到了excel导出功能。

但是laravel-admin自带的导出功能不带图片,并且导出的数据有很多冗余的字段,并非我所需要的功能。

所以参考官方文档调整代码,实现了自定义导出excel文件,并且带上图片;

步骤如下:

1. 安装laravel-excel插件

可参考laravel5.5 中使用laravel-excel

composer require maatwebsite/excel:~2.1.0

php artisan vendor:publish

--provider="MaatwebsiteExcelExcelServiceProvider"

2. 自定义导出类

我是参照laravel-admin官方文档建立的导出类:app/Admin/Extensions/ExcelExpoter.php;

导出类中需要引入使用的Excel,和导入图片所使用的PHPExcel_Worksheet_Drawing

use MaatwebsiteExcelFacadesExcel;

use PHPExcel_Worksheet_Drawing;

具体代码如下: 
<?php /** * Created by PhpStorm. * User: yuran * Date: 2018/10/13 * Time: 10:04 */ namespace App\Admin\Extensions; use Encore\Admin\Grid\Exporters\AbstractExporter; use Maatwebsite\Excel\Facades\Excel; use PHPExcel_Worksheet_Drawing; class ExcelExpoter extends AbstractExporter { protected $head = []; protected $body = []; public function setAttr($head, $body){ $this->head = $head; $this->body = $body; } public function export() { //定义文件名称为日期拼上uniqid() $fileName = date('YmdHis') . '-' . uniqid(); Excel::create($fileName, function($excel) { $excel->sheet('sheet1', function($sheet) { // 这段逻辑是从表格数据中取出需要导出的字段 $head = $this->head; $body = $this->body; //init列 $title_array = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH']; $rows = collect([$head]); //写入标题 $sheet->rows($rows); collect( $this->getData() )->map( function ($item,$k)use($body,$sheet,$title_array ) { foreach ($body as $i=>$keyName){ if($keyName == 'url') { //判断图片列,如果是则放图片 $objDrawing = new PHPExcel_Worksheet_Drawing; $v = public_path('/upload/'). array_get($item, $keyName); //拼接图片地址 $objDrawing->setPath( $v ); $sp = $title_array[$i]; $objDrawing->setCoordinates( $sp . ($k+2) ); $sheet->setHeight($k+2, 65); //设置高度 $sheet->setWidth(array( $sp =>12)); //设置宽度 $objDrawing->setHeight(80); $objDrawing->setOffsetX(1); $objDrawing->setRotation(1); $objDrawing->setWorksheet($sheet); } else { //否则放置文字数据 $v = array_get($item, $keyName); $sheet->cell($title_array[$i] . ($k+2), function ($cell) use ($v) { $cell->setValue($v); }); } } }); }); })->export('xls'); } }

3. 调用

在model-grid中使用这个导出类:

 $excel = new ExcelExpoter();
        $excel->setAttr(['id', '名称', '类型', '二维码', '上传人'], ['id', 'name', 'type', 'url', 'admin']);
        $grid->exporter($excel);

4. 最终效果
原数据laravel-admin 自定义导出excel功能,并导出图片

 

导出结果

laravel-admin 自定义导出excel功能,并导出图片

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/112803.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 真正理解exists 和not exists

    真正理解exists 和not exists前言今天看了下mysql训练题,其中有一题很有意思。​    下面也写了sql解答,使用了group_concat()函数,这个函数是分组后将一组的字段(比如name)拼接在一起,默认以逗号分隔。这个思路可以,但是在成绩表插入信息时的顺序是乱的,那又怎么查。    我然后看了几个其他人的答案,还有的用课程数作比较的,写的很乱很杂。想了一会,觉得使用notexists解答是可以的。exists与notexist.

    2022年7月27日
  • linux的 intellij idea激活码-激活码分享

    (linux的 intellij idea激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html76VF8VOVJM-eyJsa…

    2022年4月1日
  • 勤快的love枫[ZJOI2007]

    勤快的love枫[ZJOI2007]

    2022年3月5日
  • a算法解决八数码实验报告_人工智能常用算法模型

    a算法解决八数码实验报告_人工智能常用算法模型实验一A*算法求解8数码问题一、实验目的熟悉和掌握启发式搜索的定义、估价函数和算法过程,并利用A*算法求解N数码难题,理解求解流程和搜索顺序。二、实验原理A*算法是一种启发式图搜索算法,其特点在于对估价函数的定义上。对于一般的启发式图搜索,总是选择估价函数f值最小的节点作为扩展节点。因此,f是根据需要找到一条最小代价路径的观点来估算节点的,所以,可考虑每个节点n的估价函数值为两个分量:从起始节点到节点n的实际代价g(n)以及从节点n到达目标节点的估价代价h(n),且hn≤h*n,h*n

    2022年10月31日
  • IntelliJ IDEA安装操作步骤

    IntelliJ IDEA安装操作步骤一、下载安装1、打开官网:http://www.jetbrains.com/idea/,点击页面中的“DOWNLOAD”2、根据自己的需要选择下载的IntelliJIDEA版本,此处我的电脑是Windows764位的,我选择的是Community(社区版)3、双击下载好的安装包4、点击“Next”5、选择安装位置,然后点击“Next”6、勾选安装选型,然后点击“Next…

    2022年6月29日
  • jQuery 快速入门教程

    jQuery 快速入门教程内容目录jQuery入门什么是jQuery如何使用jQueryjQuery的运行原理如何选择jQuery版本ready()准备就绪时执行代码jQuery核心:选取元素使用jQuery选择器选取元素,并封装为jQuery对象将现有的DOM元素封装为jQuery对象将HTML字符串封装为jQuery对象元素筛选jQ

    2022年5月30日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号