Laravel -- Excel 导入(import) (v2.1.0)

时间:2022-12-12 17:02:28

原博客地址 https://www.jianshu.com/p/7287ebdc77bb

Install (安装)
//> composer.json 中 require中添加如下:
"maatwebsite/excel": "~2.1.0"
//> 然后使用如下composer命令安装
composer update
//> config/app.php 中注册 服务提供类 providers数组中
Maatwebsite\Excel\ExcelServiceProvider::class,
//> config/app.php 中注册 门面类 aliases 数组中
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
//> 移动配置文件 excel.php 到 config目录下面 命令:
php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"
//> 服务器容器中绑定 的是'excel'
App::make('excel')
Import(导入)
  • 我们来修改 config/excel.php 的导入配置参数
//> 修改一下 excel.php 配置文件 的 import 数组参数,否则导入时只解析ASCII(对中文不敏感)
'to_ascii' => false # 这个参数改为false(否则,只会得到excel的ascii编码以内组成的字符串)
'heading' => 'slugged' # 表示得到关联数组(键是Excel的A1行标题)
# 'heading' => false # 表示得到索引数组(从0开始到...)(其他参数请自行尝试)
'startRow' => 1 # 如果没特殊需求,就使用默认值(表示开始取得位置 row :从第几行还是取值)
# 这里就采用默认值吧(输入、输出编码)
'encoding' => [
'input' => 'UTF-8',
'output' => 'UTF-8'
],
# 根据需要适当配置该参数(作用:如果设置为true,会自动忽略为空的某一数值)
# 比如 SPU标题下存在一行为空值,那么该行中就不会出现 apu => null 情况(会自动忽略)
'ignoreEmpty' => false,
# 改值为 false (表示:当前我们默认只或的一个sheet文件);true:表示当前默认获取多个sheet文件;(如果不是多文件导入,默认设置为false)
'force_sheets_collection' => false,
//> 其他import参数,遇到再详细讨论
//> 文件导入
Excel::load($fileName, function ($reader){
foreach ($reader->get() as $item){
dump($item);
}
});
# 参看一下上传控制器 动作
public function excel(Request $request){
//> 判断请求类型
if( $request->isMethod('post') && $_FILES['file'] ){
//> 获取上传文件路径 $_FILES
if( $_FILES['file']['error'] == 0 ){
//> 获取上传文件名称(已便于后面判断是否上传需要后缀文件)
$name = $_FILES['file']['name'];
//> 获取上传文件后缀 如(xls exe xlsx 等)
$ext = strtolower(trim(substr($name,(strpos($name,'.')+1))));
//> 判断文件是否为指定的上传文件后缀
if( ! in_array($ext,array('xls','xlsx')) ){
//> 返回上一次请求位置,并携带错误消息
return redirect()->back()->withErrors('请输入xls或xlsx后缀文件')->withInput();
}
//> 获取文件上传路径
$fileName = $_FILES['file']['tmp_name'];
//> excel文件导入 上传文件
Excel::load($fileName, function ($reader){
//> 处理上传文件数据 此时 处理多个上传的 sheet 文件
foreach ($reader->get() as $item){
//> 处理相关上传excel数据
dump($item);
}
});
}
exit;
}
return redirect()->route('home.index');
}
//> 现在我们讨论一下get()和all()方法
load回调的$reader->get()或$reader->all()并没有很大的区别(得到结果都是一样的)
# 获取 sheet 标题 (改标题)
$reader->getTitle()
# 获取指定 前 $limit 行 数据
# ->takeRows($limit) 获取指定的前$limit条数据
Excel::load($fileName, function ($reader){
//> takeRows 限制获取数据
foreach ($reader->takeRows(10)->get() as $item) {
dump($item);
}
});
# ->limitRows($start=0,$end) 获取指定长度数据
Excel::load($fileName, function ($reader){
//> limitRows(5,10):获取第5条到第10条数据
foreach ($reader->limitRows(5,10)->get() as $item) {
dump($item);
}
});
# ->skipRows($num):跳过指定行
Excel::load($fileName, function ($reader){
//> skipRows($num) :开始跳过多少行,在取数据(这里:从第5行开始,取10条数据)
//> skipRows和takeRows一起使用才能达到上面描述的效果(和limitRows()好像就无效了)
foreach ($reader->skipRows(5)->takeRows(10)->get() as $item) {
dump($item);
}
});
//> 上面是获取行;下面介绍获取列
# ->takeColumns() 类比 takeRows()方法:只是takeColumns获取的是列数据
# ->limitColumns() 类比 limitRows()方法:只是limitColumns()获取的是列数据
# ->skipColumns() 类比 skipColumns()方法: 只是skipColumns()跳过的列
//> toArray() 对象转换为数组
Excel::load($fileName, function ($reader){
//> 这样使用也是可以的 $reader->get()->toArray();
foreach ($reader->get() as $item) {
//> toArray() 转换为数组
dump($item->toArray());
}
});
//> toObject() 转换为对象
# toObject() 好像并没有多大用处(一直提示错误)
Laravel Excel提供了两个打印方法(并没有多个用处)
$reader->dump();
$reader->dd();
//> each() 遍历方法(该方法类似 foreach)
Excel::load($fileName, function ($reader){
$reader->each(function($sheet){
$sheet->each(function($row){
dump($row);
});
});
});
  • 选择页和列
//> Excel门面提供一个 selectSheets(...$sheet) 方法:允许打开指定的sheet文件
# 当我们上传多个sheet文件需要被处理时,加载指定的sheet文件就可以使用该方法
Excel::selectSheets('sheet1', 'sheet2')->load(); //> 当然我们也可以选择一张sheet表加载
//> 通过索引加载sheet文件
Excel::selectSheetsByIndex(0, 1)->load(); //> 表示加载第一个第二个sheet文件
//> 获取指定sheet文件指定字段
$reader->select(array('firstname', 'lastname'))->get(); //> 获取firstname和lastname字段
# Or
$reader->get(array('firstname', 'lastname')); //> 直接给get()传递参数
  • 日期处理
//> 日期形式默认会被解析成Carbon对象 如 2017-01-01 08:00
//> 我们来看一下日期配置参数
dates => [
//> 是否开启日期解析:默认开启(解析日期字符串)
//> 如果设置为false:2017-01-01 08:00 可能会得到一个 1/1/17 08:00结果(由于美格式(月/日/年)可能会有些区别)
'enabled' => true,
//> 日期格式:如果设置为false 将返回一个Carbon时间对象
# 'format' => 'U' 时:返回一个时间戳 如 2016/1/1 8:12:00 => 1451635920
'format' => false,
//> 日期字段,那些字段是日期字段 如果不存在值:默认解析值为字符串 时间的形式的 数据
//> 如果写上:解析指定的字段 值 为指定字符串的形式
'columns' => []
],
//> ----------------------------------------------------------
//> date 参数是处理整个导入文件时(如果我们想处理单独某个字段数据时)
# ->formatDates($boolean, $format) 开启或关闭 日期 参数
$reader->formatDates(true);
$reader->formatDates(false);
$reader->formatDates(true, 'Y-m-d H:i'); //> 转换为 Y-m-d H:i 时间形式
Excel::load($fileName, function ($reader){
$reader->formatDates(false)->each(function($sheet){
$sheet->each(function($row){
dump($row);
});
});
});
$reader->formatDates(true, 'U'); 装换为时间戳形式
//> format($dateFormat) 转换为指定数据形式
Excel::load($fileName, function ($reader){
$reader->each(function($sheet){
$sheet->each(function($row){
dump($row->{"颜色分类"});
dump($row->{"颜色分类"}->format('U'));
dump($row->{"颜色分类"}->format('Y-m-d'));
});
exit;
});
});
//> setDateFormat($format) 默认返回指定形式,不在返回Carbon对象
$reader->setDateFormat('Y-m-d');
//> 设置日期列 setDateColumns()
$reader->setDateColumns(array(
'created_at',
'deleted_at'
))->get();
import配置文件 参数 :calculate 是否开启计算 (经测试,没什么用处)
// Enable calculation
$reader->calculate();
// Disable calculation
$reader->calculate(false);

 

Laravel -- Excel 导入(import) (v2.1.0)的更多相关文章

  1. laravel Excel导入导出

    1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和导出. 该 ...

  2. laravel Excel 导入

    <?php namespace App\Modules\Live\Http\Controllers; use Illuminate\Http\Request; use Maatwebsite\E ...

  3. Laravel 5使用Laravel Excel实现Excel&sol;CSV文件导入导出的功能详解

    1.简介 本文主要给大家介绍了关于Laravel 5用Laravel Excel实现Excel/CSV文件导入导出的相关内容,下面话不多说了,来一起看看详细的介绍吧. Laravel Excel 在 ...

  4. Laravel Excel 实现 Excel-CSV 文件导入导出功能

    Laravel Excel 是一款基于 PHPExcel 开发的Laravel框架专用的 Excel/CSV 文件导入导出功能的扩展包,用起来的非常方便. 它的 Github 地址是:https:// ...

  5. laravel框架——Excel导入导出

    一.composer安装PHPExcel插件 1.在框架根目录下安装依赖 composer require "maatwebsite/excel:~2.1.0" 2.打开框架在co ...

  6. Laravel 5 中使用 Laravel Excel 实现 Excel&sol;CSV 文件导入导出功能

    1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和导出. 该 ...

  7. 在 Laravel 5 中使用 Laravel Excel 实现 Excel&sol;CSV 文件导入导出功能

    1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel ,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和 导出  ...

  8. TP5&period;0 excel 导入导出

    引第三方的phpexcel类库放到 ThinkPHP\Library\Vendor\demo下,自己建的文件夹demo 再将Excel.class放到ThinkPHP\Library\Org\clas ...

  9. Lumen5&period;5,使用laravel excel 下载 、导入excel文件

    1.安装 首先是安装laravel excel,使用composer安装 composer require maatwebsite/excel ~2.1.0 2.配置 在bootstrap/app.p ...

随机推荐

  1. Win10 无法完全关机问题

    Win10是重新安装的.开机运行时间长了或者跑的东西多了.关机,键盘灯还是亮的,要强制按电源键关机才行. 问题解决:从网上搜以为是显卡驱动问题,上官网更新最新驱动,结果还是关不了机.偶然间搜到是Int ...

  2. 手写代码自动实现自动布局,即Auto Layout的使用

    手写代码自动实现自动布局,即Auto Layout的使用,有需要的朋友可以参考下. 这里要注意几点: 对子视图的约束,若是基于父视图,要通过父视图去添加约束. 对子视图进行自动布局调整,首先对UIVi ...

  3. mysql导入出现MySQL Error 1153 - Got a packet bigger than &&num;39&semi;max&lowbar;allowed&lowbar;packet&&num;39&semi; bytes

    解决办法: 就搞定了.

  4. JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结&lpar;转&rpar;

    hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和学习,使自己在做项目中更加 ...

  5. 用letsencrypt搭建免费的https网站

    环境:阿里云服务器centos7.3,nignx,letsencrypt做免费的https证书 Let’s Encrypt官网:https://letsencrypt.org/ 1.服务器开放端口:4 ...

  6. 使用Openfire配置安卓客户端聊天服务器

    Openfire是一种即时通信服务器,采用开放的XMPP协议,您可以使用各种支持XMPP协议的IM客户端软件登陆服务. Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP( ...

  7. object detection&lbrack;YOLO&rsqb;

    这部分,我们来聊聊YOLO. YOLO:You Only Look Once,顾名思义,就是希望网络在训练过程中,一张图片只要看一次就行,不需要去多次观察,比如滑框啥的,从而从底层原理上就减少了很多的 ...

  8. 记录一则xtts测试遇到的诡异现象

    背景:在一次xtts的测试中遇到因源库数据文件名称包含特殊字符导致表空间全量备份缺失文件,之所以说是诡异现象,是因为xtts的全备日志不报任何错误,在恢复阶段才发现缺少文件,这个缺陷比较隐晦,尤其在迁 ...

  9. javascript004&lowbar;ECMA5数组新特性

    •对于ECMAscript5这个版本的Array新特性补充: –位置方法:indexOf      lastIndexOf –迭代方法:every  filter   forEach   some   ...

  10. LPC(Low Pin Count) 与SIO(Super IO)

    记录bios学习的点点滴滴,虽然已经学了很长时间才发出来,但就当是温故而知新吧,由于水平有限,难免存在错误,望指正,同时感谢CSDN提供的平台. 1.LPC 定义:​ Intel所定义的PC接口,将以 ...