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. 最终效果
原数据

导出结果

原文地址:https://www.cnblogs.com/lxwphp/p/9804651.html

时间: 2024-08-04 14:16:32

laravel-admin 自定义导出excel功能,并导出图片的相关文章

扩展GridView导出Excel功能

using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Runtime.CompilerServices;using System.Text;using System.Web;using System.Web.Compilation;using System.Web.UI;using System.Web.UI.WebControls; namespace Web{ 

flex 导出Excel功能实现

方法一: 1.Excel导出主要代码: try   {    var bytes: ByteArray = new ByteArray();    bytes.writeMultiByte(DataGridExporter.exportSCV(dataGrid),"cn-gb");    var fr:FileReference = new FileReference();    var date:Date = new Date();    var dateTime:String =

项目笔记:导出Excel功能分sheet页插入数据

导出Excel功能分sheet页处理数据: /*导出EXCEL*/ public void createExcel() { log.info("导出Excel功能已经启动-BEGIN"); JxlUtil jsl = new JxlUtil(); List<Device> dataList =new ArrayList<Device>(); List<DeviceExport> list = new ArrayList<DeviceExport

C# 使用Epplus导出Excel [2]:导出动态列数据

上一篇导出excel,是导出已知固定列,有时候我们根本就不知道有几列.列名是什么,因此这些动态列,可以用Dictionary<string,string>接收. 1.实体Student上加上一个字段Dictionarys Student.cs public class Student { public String Name { get; set; } public String Code { get; set; } public Dictionary<string, string>

DataTable 更改在有数据列的类型方法+DataTable 导出excel功能

/// <summary> /// 导出功能 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btn_export_Click(object sender, EventArgs e) { try { string strSql = CreateStrWhere

asp.net core web的导入导出excel功能

这里主要记录下asp.net core web页面上进行导入导出excel的操作. 主要是导入,因为现在使用的很多前端框架(例如kendo ui)本身就有导出的功能. 这里使用到EPPlus.Core,其实对于excel的导入导出还可以使用NPOI, 这里讲解EPPlus的方式 1.创建asp.net core web (mvc)项目 效果图如下 2.在项目上右键,进入nuget管理器,安装EPPlus.Core 3.添加一个XlsxController控制器,在其中添加导入和导出功能 usin

thinkphp导出excel功能封装

官网http://phpexcel.codeplex.com/下载最新PHPExcel放到tp框架的核心目录ThinkPHP里面的Vendor下 1 public function test(){ 2 $xlsName = "用户"; 3 4 //注意 数组第一个字段必须是小写 数组第二个(列标题)根据你的情况填写 5 $xlsCell = array( 6 array('字段1','账号序列'), 7 array('字段2','登录账户'), 8 array('字段3','账户昵称'

Atitit.导出excel功能的设计 与解决方案

1.1. 项目起源于背景1 1.2. Js  jquery方案(推荐)jquery.table2excel1 1.3. 服务器方案2 1.4. 详细信息2 1.5. 参考4 1.1. 项目起源于背景 正好我们项目也正好在研究更快速的导出excel的方法..昨天终于有了结论..除了我们常用的后端导出excel,前端js导出excel效果也不错,估计可以覆盖90%的领域...所以更好的导出方案就是 js导出(90%)+后端语言导出(10%),取长补短,结合使用 1.2. Js  jquery方案(推

C# 关于导出EXCEL功能

/// <summary>        /// 导出Excel数据        /// </summary>        /// <param name="search"></param>        /// <returns></returns>        public ActionResult ExportExcel(SearchEntity search)//查询条件         { List