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

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

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

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

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

  8. TP5.0 excel 导入导出

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

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

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

随机推荐

  1. MUI - 解决弹出输入法时页面高度变小导致底部上浮的问题

    解决弹出输入法时页面高度变小导致底部上浮的问题 在有输入框的页面,当输入法弹出的时候,底部元素上浮遮盖了输入框,影响页面美观及功能.查找了一下,页面变窄是不可避免的.即使是设置绝对固定也是不可以的.因 ...

  2. Redis 设置密码登录

    前言 redis在生产环境中通常都会设置密码以保证一定的安全性,本篇blog就简单记录一下如何在redis中设置客户端登录密码. 修改redis.conf RT,打开redis.conf文件,搜索re ...

  3. swap function & copy-and-swap idiom

    在C++中,众所周知在一个资源管理类(例如含有指向堆内存的指针)中需要重新定义拷贝构造函数.赋值运算符以及析构函数(Big Three),在新标准下还可能需要定义移动构造函数和移动赋值运算符(Big ...

  4. TreeSet之用外部比较器实现自定义有序(重要)

    Student.java package com.sxt.set5; public class Student{ private String name; private int age; priva ...

  5. ios程序员6级考试(答案和解释)

    http://blog.sunnyxx.com/2014/03/06/ios_exam_0_key/ 我是前言 上次发了个ios程序员6级考试题 ,还在不断补充中,开个帖子配套写答案和解释. 1. 下 ...

  6. python 字典元素删减

  7. 使用 Captcha 扩展包 为 Laravel 5 应用生成验证码

    http://laravelacademy.org/post/3910.html 1.安装 我们通过 Composer 安装 Captcha 扩展包: composer require mews/ca ...

  8. es6 promise简析

    1.Promise的含义 所谓Promise,就是一个对象,用来传递异步操作的消息. Promise对象有以下两个特点: 对象的状态不受外界影响.Promise对象代表一个异步操作,有三种状态:Pen ...

  9. @loj - 2483@「CEOI2017」Building Bridges

    目录 @desription@ @solution@ @accepted code@ @details@ @another solution@ @another code@ @desription@ ...

  10. 动画删除cell出问题

    删除UITableView行的代理时出了问题 解决办法 先remove数据,再执行 [_mTableView deleteRowsAtIndexPaths:[NSArray arrayWithObje ...