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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 推荐系统常用算法介绍_基于内容推荐算法

    推荐系统常用算法介绍_基于内容推荐算法原文链接:https://www.cnblogs.com/zhangyang520/p/10969951.html参考回答:推荐算法:基于人口学的推荐、基于内容的推荐、基于用户的协同过滤推荐、基

    2022年8月3日
    6
  • executescalar mysql_ExecuteScalar

    executescalar mysql_ExecuteScalar这两个答案和一点点思考使我想到了一个接近答案的东西。首先再澄清一下:该应用程序是用C#(2.0+)编写的,并使用ADO.NET与SQLServer2005进行通信。镜像设置是托管主体和镜像的两个W2k3服务器以及托管作为监视器的快速实例的第三个服务器。这样做的好处是,故障转移对于使用数据库的应用程序几乎是透明的,它将对某些连接引发错误,但从根本上讲一切都会很好地进行。是的,我们得到了奇怪的误报…

    2022年6月30日
    24
  • 程序员笑话「建议收藏」

    程序员笑话「建议收藏」十行代码九个警告八个错误竟然敢说七日精通六天学会五湖四海也不见如此三心二意之项目经理简直一等下流。

    2025年8月19日
    4
  • 费马小定理题

    费马小定理题费马小定理 假如 p 是质数 且 gcd a p 1 那么 nbsp A 题 HDU 4704 首先是挡板法 隔板法 然后用即可 高中数学范围不多叙述 然后得到答案是 nbsp 这题读入数据大 就算快速幂也肯定 TLE 所以用费马小定理 把数据规模降到 int 范围内 时间复杂度降低因为 1e9 7 是一个素数 基本可以假设 N 1 不是 1e9 7 的倍数 这一点我没想到 所以没写出来 所

    2025年11月16日
    5
  • java中两个list对象取交集、差集

    java中两个list对象取交集、差集在一般操作中,对于list集合取交集、差集、并集,比较简单,网上有很多例子,如:今天我们来说一下对于两个list集合该如何取交集与并集:如下两个集合:groupEntityList、saveEntities,groupEntityList是组织集合,saveEntities是组织用户集合,即saveEntities包含groupEntityList中的数据。交集:差集:saveEntities-groupEntityList表达式中谁在前,谁就是减数。希望对大家有所帮助,我是空谷有来人,感谢

    2022年9月27日
    3
  • pycharm如何执行高级撤销操作回到历史[通俗易懂]

    pycharm如何执行高级撤销操作回到历史[通俗易懂]今天写代码兴奋过头了,认为别人写得太麻烦,所以在看了这个人是要达成什么样的目标之后,把他的代码直接删了,然后自己重写,到后来发现有这样那样的问题,这个时候想参考原来的代码,可是为时已晚,已经是6,7个小时之前了,姑且不问能否一直使用低级撤销ctrl+z,就算可以,估计也要半个小时才能回到6,7个小时之前吧。这个时候,我悲从中来,悔恨自己在最开始的时候没有弄一个备份。但是,痛定思痛,发现了这一个撤销的高级操作,回退到历史,我以前在使用AndroidStudio的时候也有这个功能,所以试了试pycharm

    2022年8月26日
    6

发表回复

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

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