Laravel 使用 maatwebsite/Excel 3.1 实现导入导出的简单方法
官方文档
https://docs.laravel-excel.com/3.1/getting-startedgit地址
https://github.com/maatwebsite/Laravel-Excel在业务中会经常遇到需要导入导出Excel的需求,在使用laravel项目的时候,可以引入 maatwebsite/Excel 包,简单的实现这个功能。
安装
我使用的是Laravel 6.0 ,截止目前兼容的 maatwebsite/excel 版本为3.1 ,所以不需要指定版本,推荐使用Composer安装:
composer require maatwebsite/excel
如果要指定版本,可以使用以下命令安装:
composer require maatwebsite/excel ~3.1
Laravel与maatwebsite/excel版本的对应关系见下表:
| Version | Laravel Version | PHP Version |
|---|---|---|
| 2.1 | <=5.6 | <=7.0 |
| 3.0 | ^5.5 | ^7.0 |
| 3.1 | ^5.8 ^6.0 ^7.0 ^8.0 | ^7.2 ^8.0 |
Laravel5.5以上的包是自动注册的。如果要发布配置文件,可以执行下面的命令:
配置
使用命令发布配置文件,会在config文件夹下生成excel.php
php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider" --tag=config
导入Excel
我封装了一个类,可以将Excel导入成一个二维数组
<?php
namespace App\Utils;
use Maatwebsite\Excel\Facades\Excel;
class UploadHelper
{
public static function uploadExcel ($file){
if($file->isValid()){
$vailExtension = ['xlsx','xls'];
if(! in_array($file->getClientOriginalExtension() ,$vailExtension) ){
throw new \Exception("文件格式错误");
}
return Excel::toArray(new Import, $file)[0];
}else{
throw new \Exception("文件无效");
}
}
}
直接静态调用即可
<?php
namespace App\Http\Controllers;
use App\Utils\UploadHelper;
use Illuminate\Http\Request;
use Illuminate\Http\Request;
class Demo
{
public function importDemo (Request $request){
$isFile = $request->hasFile('file');
if (!$isFile) {
throw new \Exception("请上传文件");
}
$data = UploadHelper::uploadExcel($request->file('file'));
dd($data);
}
}
导出Excel
创建文件Export.php,并将下面的内容粘进去
<?php
namespace App\Utils;
use Maatwebsite\Excel\Concerns\FromCollection;
class Export implements FromCollection
{
private $row;
private $data;
public function __construct($row,$data)
{
$this->row = $row;
$this->data = $data;
}
/**
* @return \Illuminate\Support\Collection
*/
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++) {
$js = array_merge($js,[ $key_arr[$i] => $value[ $key_arr[$i] ] ?? '' ]);
}
array_push($row, $js);
unset($value);
}
return collect($row);
}
}
调用方法
<?php
namespace App\Http\Controllers;
use App\Utils\Export;
use Maatwebsite\Excel\Facades\Excel;
class Demo
{
public function exportDemo(){
$fileName = 'excel_name.xlsx';
//将生成的Excel保存到本地,在服务器端使用时注意要给文件夹权限
$row[] = [
"name" => "姓名",
"sex" => "性别",
];
$list = [
[
'name' => '张三',
'sex' => '男'
],
[
'name' => '李四',
'sex' => '女'
],
[
'name' => '老王',
'sex' => '男'
],
];
Excel::store(new Export($row,$list),$fileName ,"public");
$path = "/storage/{$fileName}";
//直接触发下载
//Excel::download(new Export($row,$list),$fileName ,"public");
}
}
如果导出的字段包含长数字,出现科学计数法的情况,请移步Laravel 使用 maatwebsite/excel 时长数字出现科学计数法的解决办法
Laravel 使用 maatwebsite/Excel 3.1 实现导入导出的简单方法的更多相关文章
- Laravel 使用 maatwebsite/excel 时长数字出现科学计数法的解决办法
在使用 maatwebsite/excel 包导出Excel的时候,有的单元格里会存放手机号等一大串的数字,这一串数字会被Excel软件处理为科学计数法,在后续处理数据的时候会产生不小的麻烦,一个个去 ...
- Laravel Excel 实现 Excel-CSV 文件导入导出功能
Laravel Excel 是一款基于 PHPExcel 开发的Laravel框架专用的 Excel/CSV 文件导入导出功能的扩展包,用起来的非常方便. 它的 Github 地址是:https:// ...
- Asp.net的对Excel文档的导入导出操作
刚刚初入职场,在休闲的时间写下了项目中用到的对Excel文档操作的方法以及总结,多的不说,直接上代码 public static void CreateExcel(DataSet ds, string ...
- java excel大数据量导入导出与优化
package com.hundsun.ta.utils; import java.io.File; import java.io.FileOutputStream; import java.io.I ...
- NPOI 2.1.1 系列(1) 使用NPOI读取 Excel文档 ;NpoiExcelHelper 导入导出 2003格式 2007格式的 Excel; Npoi 导出 xlsx 格式
下载地址 http://npoi.codeplex.com/releases 下面放一个 NPOIHelper 助手类吧,也不是我写的- NpoiExcelHelper 可以生成xlsx格式publi ...
- Thinkphp框架下PHPExcel实现Excel数据的批量化导入导出
第一步:下载官方的PHPExcel文件,下载地址https://github.com/PHPOffice/PHPExcel 第二步:解压打开,将PHPExcel\Classes\全部文件拷贝到thin ...
- 1、数据库与excel表格的数据导入导出
1.居民用户界面中,excel数据导入导出: 2.其他5张表数据显示到本角色主页的container容器中.
- Easypoi实现excel多sheet表导入导出功能
Easypoi简化了开发中对文档的导入导出实现,并不像poi那样都要写大段工具类来搞定文档的读写. 第一步引入Easypoi依赖 <!-- 导出文件工具 EasyPoi实现Excel读写管理测试 ...
- winform做的excel与数据库的导入导出
闲来无事,就来做一个常用的demo,也方便以后查阅 先看效果图 中间遇到的主要问题是获取当前连接下的所有的数据库以及数据库下所有的表 在网上查了查,找到如下的方法 首先是要先建立一个连接 _connM ...
随机推荐
- 巩固javaweb的第二十二天
巩固内容: 使用表单数据 : 要对用户输入的信息进行验证,需要先获取输入信息.每个表单元素都属于一个 form 表单,要获取信息,需要先获取 form,然后访问表单元素的值. 有两种方式可以获取 fo ...
- 【Go语言学习笔记】包
包其实是每个大型工程都会使用的模块化工具. 将相关的代码封装成一个包,给其他项目调用,提供不同的功能. GO的设计是将一个文件夹看成一个包,虽然不一定非要用文件夹的名字,但是比较建议. 同一个文件夹下 ...
- org.apache.hadoop.hive.ql.metadata.HiveException: Internal Error: cannot generate all output rows for a Partition解决
自己在路径访问明细表开发时,写的sql如下 SELECT guid, sessionid, event['url'] as page, `timestamp` as ts, row_number() ...
- @RequestBody配合@Valid 校验入参参数
自定义一个Controller import com.example.demo.pojo.User; import org.springframework.web.bind.annotation.Po ...
- ORACLE lag,lead
oracle中想取对应列前几行或者后几行的数据时可以使用lag和lead分析函数 lag:是滞后的意思,表示本行数据是要查询的数据后面,即查询之前行的记录. lead:是领队的意思,表示本行数据是要查 ...
- Linux学习 - 目录表
目录名 作用 权限 说明 /bin/ 存放系统命令的目录 所有用户 存放在/bin/下的命令单用户模式下也可以执行 /sbin/ 保存和系统环境设置相关的命令 root ...
- JFinal之ActiveRecord开发示例
JFinal独创Db + Record模式示例 JFinal配备的ActiveRecord插件,除了实现了类似Rails ActiveRecrod的功能之外,还实现了Db + Record模式,此模式 ...
- DT10功能介绍--DT10多波示波器
功能介绍 有些嵌入式软件方面的问题,利用传统的调试器可能无法解决,而通过逻辑分析器则能有效地解决.请仔细阅读本文, 看我们如何一步一步地讲解在这种情况下所需的配置. 但是,从传统意义上讲,逻辑分析器是 ...
- Webpack学习篇
<深入浅出Webpack>优化篇 01 Webpack 优化可以分为开发优化和输出质量优化两部分,主要要点如下: 优化开发体验,提升开发效率 优化构建速度 优化使用体验 优化输出质量 减少 ...
- mysqlslap基准测试
目录 简介 二.例子 三.其它选项 简介 mysqlslap是mysql自带的基准测试工具 优点:查询数据,语法简单,灵活容易使用.该工具可以模拟多个客户端同时并发的向服务器发出查询更新,给出了性能测 ...