Laravel Excel模板导出-带图片
Laravel Excel版本 3.1
1、数据准备
建个2个表,加点数据,控制器中查数据,给模板使用。
表1-order:id, order_no, img_path, note
表2-order_item:id, order_id, sku, num
查数据:
$data = OrderModel::with('item')->get()->toArray();
//使用关联模型hasmany查询
$data = $data[0];
dd($data);
打印结果:

2、模板准备
新建模板:resources/views/order_export.blade.php
<table>
<thead>
</thead>
<tbody>
<tr>
<td colspan="2" style="vertical-align: center;"><b>订单号</b></td>
<td colspan="2" style="vertical-align: center;"><b>备注</b></td>
<td colspan="2" style="vertical-align: center;"><b>图片</b></td>
</tr>
<tr>
<td colspan="2" style="vertical-align: center;">xxx</td>
<td colspan="2" style="vertical-align: center;">xxx</td>
<td colspan="2" style="vertical-align: center;">xxx</td>
</tr>
<tr>
<td colspan="2" style="vertical-align: center;"><b>SKU</b></td>
<td colspan="2" style="vertical-align: center;"><b>数量</b></td>
</tr>
<tr>
<td colspan="2" style="vertical-align: center;">xxx</td>
<td colspan="2" style="vertical-align: center;">xxx</td>
</tr>
</tbody>
</table>
3、新建导出类
php artisan make:export OrderExport
//app/Exports/OrderExport.php
OrderExport
3.1、实现FromView接口
实现view()方法
use Maatwebsite\Excel\Concerns\FromView;
class OrderExport implements FromView
{
public function view(): View
{
$data = OrderModel::with('item')->get()->toArray();//见上1、数据准备
return view('order_export', ['data'=>$data[0]]);
}
}
3.2、调整模板
<table>
<thead>
</thead>
<tbody>
<tr>
<td colspan="2" style="vertical-align: center;"><b>订单号</b></td>
<td colspan="2" style="vertical-align: center;"><b>备注</b></td>
<td colspan="2" style="vertical-align: center;"><b>图片</b></td>
</tr>
<tr>
<td colspan="2" style="vertical-align: center;">{{ $data['order_no'] }}</td>
<td colspan="2" style="vertical-align: center;">{{ $data['note'] }}</td>
<td colspan="2" style="vertical-align: center;">xxx</td>
</tr>
<tr>
<td colspan="2" style="vertical-align: center;"><b>SKU</b></td>
<td colspan="2" style="vertical-align: center;"><b>数量</b></td>
</tr>
@foreach($data['item'] as $k=>$item)
<tr>
<td colspan="2" style="vertical-align: center;">{{ $item['sku'] }}</td>
<td colspan="2" style="vertical-align: center;">{{ $item['num'] }}</td>
</tr>
@endforeach
</tbody>
</table>
3.3、控制器中调用
//控制器中写个方法
public function index()
{
return Excel::download(new OrderExport(), 'test.xlsx');
}
//路由指向,即可导出
3.4、导出结果:

这时候已经完成导出,但有些需要注意的,模板中的css只能内嵌而且只有少数的样式能够使用,具体那些没试,只知道边框线就没效果。还有就是图片img标签也是不适用,导出时出不了效果的。
4、图片导出
图片导出需要借助 WithEvents 监听事件,这个手册中并没有讲到。
还是上面的导出类:OrderExport,需要实现WithEvents 并实现registerEvents()方法
监听excel表格完成时,插入图片:
use Maatwebsite\Excel\Concerns\FromView;
use Maatwebsite\Excel\Concerns\WithEvents;
class OrderExport implements FromView,WithEvents
{
public function view(): View
{
$data = OrderModel::with('item')->get()->toArray();
return view('order_export', ['data'=>$data[0]]);
}
public function registerEvents(): array
{
return [ AfterSheet::class => function(AfterSheet $event){
$data = OrderModel::find(1);
$this->setImage2Excel($event, 'E2' ,$data['img_path'], 0,90);
//E2时表格横E竖2,图片需要出现的位置
}];
}
/**
* 添加图片到excel
* @param $event
* @param $position:excel表位置
* @param $path:图片路径
* @param $width:图片宽度
* @param $height:图片高度
* @throws \PhpOffice\PhpSpreadsheet\Exception
*/
private function setImage2Excel($event, $position, $path, $width,$height){
$drawing = new\PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
$drawing->setName('Logo');
$drawing->setDescription('Logo');
$drawing->setCoordinates($position);
$drawing->setPath(public_path($path));
($width==0)?null:$drawing->setWidth($width);
($height==0)?null:$drawing->setHeight($height);
$drawing->setWorksheet($event->sheet->getDelegate());
}
}
setImage2Excel()方法是自己封装的,需要多个图片导出时方便调用。
结果:

Laravel Excel模板导出-带图片的更多相关文章
- freemarker导出带图片的word文档
最近做一个关于文档导出功能, 顺便学习了下freemarker,做了个关于导出带图片的word文档,模板并没有写全,只是验证代码的正确性 这只是做一个小功能,故只做了后台代码关于导出的代码,并未与前台 ...
- ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据
ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ...
- .Net NPOI 根据excel模板导出excel、直接生成excel
一.根据Excel模板导出excel 1.导入NPOI.dll 2.DAL中添加类ExportExcel.cs using NPOI.SS.UserModel; using System; usin ...
- Excel模板导出之动态导出
说明 目前Magicodes.IE已支持Excel模板导出时使用JObject.Dictionary和ExpandoObject来进行动态导出,具体使用请看本篇教程. 本功能的想法.部分实现初步源于a ...
- java实现excel模板导出
一. 准备工作 1. 点击此下载相关开发工具 2. 将poi-3.8.jxls-core-1.0两个jar包放到工程中,并引用 3. 将excel模板runRecord.xls放到RunRecordB ...
- kettle 使用excel模板导出数据
通过excel进行高速开发报表: 建设思路: 1.首先制订相关的execl模板. 2.通过etl工具(kettle)能够高速的 将数据库中的数据按excel模板导出成新的excel就可以. 当中ket ...
- Magicodes.IE之Excel模板导出教材订购表
说明 本教程主要说明如果使用Magicodes.IE.Excel完成教材订购表的Excel模板导出. 要点 本教程使用Magicodes.IE.Excel来完成Excel模板导出 需要通过创建Dto来 ...
- C#实现Excel模板导出和从Excel导入数据
午休时间写了一个Demo关于Excel导入导出的简单练习 1.窗体 2.引用office命名空间 添加引用-程序集-扩展-Microsoft.Office.Interop.Excel 3.封装的Exc ...
- 6、jeecg 笔记之 自定义excel 模板导出(一)
1.前言 jeecg 中已经自带 excel 的导出导出功能,其所使用的是 easypoi,尽管所导出的 excel 能满足大部分需求, 但总是有需要用到自定义 excel 导出模板,下文所用到的皆是 ...
随机推荐
- 协程的优点(Python)
协程的优点: 协程是进程和线程的升级版,进程和线程都面临着内核态和用户态的切换问题而耗费许多切换时间, 而协程就是用户自己控制切换的时机,不再需要陷入系统的内核态.协程的执行效率非常高.因为子程序切换 ...
- python中coding:utf-8和setdefaultencoding区别
这两个作用不一样, 1. # coding:utf-8 作用是定义源代码的编码. 如果没有定义, 此源码中是不可以包含中文字符串的.PEP 0263 -- Defining Python Source ...
- Silverlight 后台利用代码触发 Button 的Click事件
页面上一个查询按钮,当用户点击 回车键 的时候 处罚查询按钮的onclick事件 public MainPage() { InitializeComponent(); this.KeyDown += ...
- WordPress xmlrpc.php flaw exploited to install a WSO 2.1 Web Shell by oRb
WordPress xmlrpc.php flaw exploited to install a “WSO 2.1 Web Shell by oRb” Below you can see in the ...
- bzoj 3110 [Zjoi2013]K大数查询【树套树||整体二分】
树套树: 约等于是个暴力了.以区间线段树的方式开一棵权值线段树,在权值线段树的每一个点上以动态开点的方式开一棵区间线段树. 结果非常惨烈(时限20s) #include<iostream> ...
- 《windows核心编程系列》一谈谈windows中的错误处理机制
错误处理 我们写的函数会用返回值表示程序执行的正确与否,使用void,就意味着程序一定不会出错.Bool类型标识true时为真,false时为假.其他类型根据需要可以定义成不同意义. Windows除 ...
- 配置Ubuntu16.04第01步:U盘安装 Ubuntu 16.04系统
Ubuntu 每年发布两个版本,Ubuntu 16.04 开发代号为“Xenial Xerus”,为第六个长期支持(LTS)版本. 1. 制作U盘系统安装盘 1.1下载最新的Universal USB ...
- Activity状态图、生命周期图(超详细),onSaveInstanceState只保存、恢复基本ui数据,持久数据不在这里保存。
1.Activity状态图 2.Activity生命周期简图 启动Activity: onCreate()—>onStart()—>onResume(),Activity进入running ...
- 升序 Collections.sort(list) 降序 Collections.reserve(list) 随机 Collections.shuffle(list)
package Day28ketangzuoye; import java.util.ArrayList; import java.util.Collections; import java.util ...
- ORA-28002错误原因及解决办法
在oracle database 11g中,默认在default概要文件中设置了“PASSWORD_LIFE_TIME=180天”所导致.密码过期后,业务进程连接数据库异常,影响业务使用.数据库密码过 ...