Laravel Excel:maatwebsite/excel ^3.1 导出excel方法详解

PHP/Mysql/Nginx Alice 2个月前 (10-01) 98次浏览 0个评论

layui 解决 table 自定义导出功能修改文件名,表格隐藏列的方法,导出选中行数据】,这篇文章有写到过layui的导出功能,介绍了如何导出选中行的数据到 Excel。

因 layui 自带的导出表格功能,导出的是当前页面的数据,而要导出所有数据则需要使用其它方法,这篇文章介绍了如何使用maatwebsite/excel批量导出数据。

项目环境:

PHP:>=7.1.3

Laravel:^5.5

1、安装 maatwebsite/excel

composer require maatwebsite/excel

2、打开 config/app.php 文件,添加以下代码

'providers' => [
	Maatwebsite\Excel\ExcelServiceProvider::class,
]
'aliases' => [
	'Excel' => Maatwebsite\Excel\Facades\Excel::class,
]

3、发布配置,运行 vendor publish 命令

php artisan vendor:publish

将会自动创建一个新配置文件 config/excel.php

4、用法:

(1)、创建一个导出类,这里以实际项目为例,以下为导出类 SolutionsExport.php 代码

<?php
namespace App\Containers\Solutions\Models;

use Maatwebsite\Excel\Concerns\FromCollection;

class SolutionsExport implements FromCollection
{
    private $data;
    private $row;
    public function __construct($data, $row)
    {
        $this->data = $data;
        $this->row = $row;
    }

    public function collection()
    {
        $row = $this->row;
        $data = $this->data;

        //设置表头
        foreach ($row[0] as $key => $value) {
            $key_arr[] = $key;
        }

        //输入数据
        foreach ($data as $key => &$value) {
            $js = [];
            for ($i=0; $i < count($key_arr); $i++) {
		//这里可以对某些字段进行处理
                if ($key_arr[$i] === 'id_relation') {
                    $value[ $key_arr[$i] ] = ProductResourcesRelation::where('id_relation',($value[ $key_arr[$i] ]))->value('title');
                }
                $js = array_merge($js,[ $key_arr[$i] => $value[ $key_arr[$i] ] ]);
            }
            array_push($row, $js);
            unset($val);
        }

        return collect($row);
    }
}

(2)调用方法导出文件

<?php

namespace App\Containers\Solutions\UI\WEB\Controllers;

use App\Containers\Solutions\Models\SolutionsExport;
use Maatwebsite\Excel\Facades\Excel;

class Controller extends WebController
{
	//课程列表导出
	public function findAllSolutionses()
	{
		//获取所有要导出的数据
		$data = Product::all();
		//处理数据
		......
		//将数据处理后,最终结果示例如下:
		$data=[
			0=>[
				"title" => '古琴名曲',
				"id_relation" => '1830',
				"bar_code" => 'gqmq',
				"format" => 'mp3',
				"vwarp" => '华夏正音,修身养性'
				"created_at" => '2020/7/7 10:51:06'
				"updated_at" => '2021/8/22 21:18:04'
			],
			1=>[
				"title" => '阳关三叠',
				"id_relation" => '1869',
				"bar_code" => 'ygsd',
				"format" => 'mp4',
				"vwarp" => '唐代最流行的离别之歌'
				"created_at" => '2020/7/7 10:51:05'
				"updated_at" => '2020/7/9 14:45:53'
			]
		];
		
		//设置表头
		$row = [[
			"title" => '课程标题',
			"id_relation" => '课程专辑',
			"bar_code" => '课程编码',
			"format" => '格式',
			"vwarp" => '课程描述',
			"created_at" => '创建时间',
			"updated_at" => '更新时间',
		]];
		
		//注意,上面的$data 和$row,字段名和顺序要保持一致,不然导出的结果会不正确。

               //执行导出
		return Excel::download(new SolutionsExport($data, $row), '课程列表.xlsx');
	}
}

(3)、导出完成

Laravel Excel:maatwebsite/excel ^3.1 导出 excel 方法详解

附:前端页面处理如下:

<script type="text/html" id="toolbar">
	<a class="layui-btn layui-btn-normal layui-btn-sm" lay-event="imported"><i class="layui-icon layui-icon-spread-left"></i>批量导入</a>
	<a class="layui-btn layui-btn-normal layui-btn-sm" lay-event="exportall"><i class="layui-icon layui-icon-spread-left"></i>批量导出</a>
</script>

<table class="layui-hide" id="datatable" lay-filter="ftable"></table>

<script type="text/javascript">
layui.use('table', function(){
	table.on('toolbar(ftable)', function(obj){
		switch(obj.event){
			//批量导出
			case 'exportall':
				window.location.href = "/console/solutions/all";
				break;
			//批量导入
			case 'imported':
			  window.location.href = "/console/solutions/imported/";
			  break;
		};
	});
});
</script>

页面效果:

Laravel Excel:maatwebsite/excel ^3.1 导出 excel 方法详解

/console/solutions/all路由规则设置如下:

$router->get('/console/solutions/all', [
    'as' => 'console.solutions.list',
    'uses'  => 'Controller@findAllSolutionses',
    'middleware' => [
        'auth:web',
    ],
]);

更多关于 Laravel Excel的相关信息,具体可以参考:https://docs.laravel-excel.com/3.1/exports/


女程序员博客 , 版权所有丨本站采用BY-NC-SA协议进行授权 , 转载请注明Laravel Excel:maatwebsite/excel ^3.1 导出 excel 方法详解

【声明】:本博客仅为分享信息,不参与任何交易,也非中介,所有内容仅代表个人观点,均不作直接、间接、法定、约定的保证,读者购买风险自担。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。

【关于安全】:任何 IDC 都有倒闭和跑路的可能,备份永远是最佳选择,服务器也是机器,不勤备份是对自己极不负责的表现,请保持良好的备份习惯。

喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址