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

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

它的 Github 地址是:https://github.com/Maatwebsite/Laravel-Excel

安装

我们就按照GIthub上的readme文件进行安装吧。

composer require "maatwebsite/excel:~2.1.0"

在 config/app.php 中注册服务提供者到 providers 数组:

Maatwebsite\Excel\ExcelServiceProvider::class,

在 config/app.php 中注册门面到 aliases 数组:

‘Excel‘ => Maatwebsite\Excel\Facades\Excel::class,

生成 Laravel Excel 的配置文件,使用如下命令:

php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"

然后你会发现在 config 目录下有一个 excel.php 文件 ,大概的配置项,主要就是缓存表单,和导入导出的一些设置。

导出文件

我待会直接拿我的测试代码进行展示,不过在这之前你需要一条路由和一个控制器(一个导出方法)

//Excel导出
Route::get(‘/excel/export‘,‘Member\[email protected]‘)->name(‘/excel/export‘);

//Excel导入
Route::get(‘/excel/import‘,‘Member\[email protected]‘)->name(‘/excel/import‘);

创建控制器,可以使用 artisan 命令或者手动创建:

php artisan make:controller 控制器名称

导出方法:

<?php
namespace App\Http\Controllers\Member;
use App\Http\Controllers\BaseController;
use App\Model\Member\MemberFollow;
use Illuminate\Http\Request;
use Illuminate\Database\QueryException;
use Excel;

class MemberController extends BaseController
{
    /**
     *
     * Excel导出
     */
    public function export()
    {
        ini_set(‘memory_limit‘,‘500M‘);
        set_time_limit(0);//设置超时限制为0分钟
        $cellData = MemberFollow::select(‘xt_name‘,‘sex‘,‘face‘)->limit(5)->get()->toArray();
        $cellData[0] = array(‘昵称‘,‘性别‘,‘头像‘);
        for($i=0;$i<count($cellData);$i++){
            $cellData[$i] = array_values($cellData[$i]);
        }
        //dd($cellData);
        Excel::create(‘用户信息‘,function($excel) use ($cellData){
            $excel->sheet(‘score‘, function($sheet) use ($cellData){
                $sheet->rows($cellData);
            });
        })->export(‘xls‘);
        die;
    }
}

我来对上面的代码进行解释下。 

a. ini_set 设置内存溢出大小和超时时间是因为我的数据量比较大,不想直接去 php.ini 中修改,所以直接在这设置。你也可以修改 excel.php 配置项中的缓存大小,适当调整。

b. 首先你得需要知道 cellData 是一个二维数组,并且二维数组中的每一个一维数组必须是索引数组才行,这样格式上才能正确。

所以,我对我查询出的 $cellData 先进行了 toArray() 转化操作。然后我让你看下查询出的结构,因为我们数组表中的每个列都是一个字段,所以决定了一维数组是关联数组,需要去键处理。

for 循环处理后就是: 

如果你要导出 csv 或者 xlsx 文件,只需将 export 方法中的参数改成 csv 或 xlsx 即可。也可以进行连贯操作直接将导出的文件直接保存到服务器上。

使用 store 方法:

Excel::create(‘用户信息‘,function($excel) use ($cellData){
      $excel->sheet(‘score‘, function($sheet) use ($cellData){
        $sheet->rows($cellData);
      });
      })->store(‘xls‘)->export(‘xls‘);

导入 Excel 文件

导入我们可以直接用第一步注册的门面 Excel 门面上的 load 方法

 public function import(Request $request)
    {
        if(!$request->hasFile(‘question_file‘)){
            exit(‘ 操作有误,请重新上传!‘);
        }
        $file = $_FILES;
        $excel_file_path = $file[‘question_file‘][‘tmp_name‘];

        Excel::load($excel_file_path, function($reader) {
            $data = $reader->toArray();
            $question_data = [];
            foreach($data[0] as $key=>$val){
                if(($val[‘tx‘]) == 2){
                    $option = [‘A‘=>$val[‘a‘],‘B‘=>$val[‘b‘]];
                }else{
                    $option = [‘A‘=>$val[‘a‘],‘B‘=>$val[‘b‘],‘C‘=>$val[‘c‘]];
                }
                $question_data[] =[
                    ‘cid‘ =>intval($val[‘cid‘]), //用取整函数 intval(11.0) 结果:11
                    ‘title‘ => $val[‘title‘],
                    ‘option‘ => serialize($option),
                    ‘answer‘ => $val[‘answer‘],
                    ‘score‘ => intval($val[‘score‘]),
                    ‘status‘ =>intval($val[‘status‘]),
                    ‘time‘ =>time(),
                    ‘tx‘ =>intval($val[‘tx‘])
                ];
            }
            dd($question_data);
        });
    }

以上代码是我在本地环境做测试时写的,功能虽然实现了但是写得不够严谨,未做任何数据验证!

foreach 循环处理后就是:

参考文章: 

Laravel Excel 实现 Excel/CSV 文件导入导出功能:

https://blog.csdn.net/gu_wen_jie/article/details/79296470

在Laravel5中使用LaravelExcel实现Excel/CSV文件导入导出功能(PHPExcel):

http://blog.023xs.cn/Article/52

原文地址:https://www.cnblogs.com/zmdComeOn/p/10345851.html

时间: 2024-12-12 08:45:55

Laravel Excel 实现 Excel-CSV 文件导入导出功能的相关文章

在 Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能(转)

1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel ,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和 导出 . 该项目的GitHub地址是: https://github.com/Maatwebsite/Laravel-Excel . 本文我们将在Laravel中使用Laravel Excel简单实现Excel文件的导入和导出. 2.安装&配置 使用Composer安装依赖 首先在Laravel项目根目录

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

1.简介 Laravel Excel 在 Laravel 5 中集成 PHPOffice 套件中的 PHPExcel ,从而方便我们以优雅的.富有表现力的代码实现Excel/CSV文件的导入和 导出 . 该项目的GitHub地址是: https://github.com/Maatwebsite/Laravel-Excel . 本文我们将在Laravel中使用Laravel Excel简单实现Excel文件的导入和导出. 2.安装&配置 使用Composer安装依赖 首先在Laravel项目根目录

使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能

一.安装配置 使用Composer安装依赖: composer require maatwebsite/excel 发布配置(可选): php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider" 配置config/app.php的providers和aliases(可选): 'providers' => [ /* * Package Service Providers... */ M

【转】Java操作CSV文件导入导出

特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/mao2080/ 1 public class CSVUtils { 2 3 /** 4 * 5 * 描述:导出 6 * @author [email protected] 7 * @created 2017年8月26日 下午2:39:13 8 * @since 9 * @param file cs

MongoDB csv文件导入导出

1.导出到csv文件: 2.从csv导入: 数据经过csv导出导入,有一个非常隐蔽的问题,编写代码时需要注意: 先导入一条数据: 其中Price是double类型: 然后我把该条记录导出到Demo.csv,并且从数据库删除该条记录,然后再从Demo.csv导入该条记录: 再来看此时数据库中该条记录: 发现Price数值原本double型66.000000自动变成了Int32型66. 这时问题出现了,你如果还是用bson_iter_double(&iter)去取Price字段时,就会取不到值: 只

按照TYPE的文件导入导出功能

/** * 导入文件Action;*/private File excelFile;// 保存原始文件名private String excelFileFileName;// 保存原始文件名private String importResult; // 将Excel文件解析完毕后信息存放到这个User对象中private ExcelWorkSheet<TabUser> excelUserSheet; /*** 文件导入* * @return*/@Action(value = "imp

将csv格式的数据文件导入/导出数据库+添加新的字段

最近一直忙于实验室的事情,没有好好更新博客,在抓包的过程中,遇到了很多问题. 因为我常用Wireshark将抓包信息导出为csv文件,这里简单mark一下将csv文件导入/导出到数据库的2种方法: 一.简单,但是稍慢的方法,使用Navicat for MySQL,傻瓜式导入数据库: 流程如下: 安装完成并配置好连接后界面如下: 新建数据库 进入导入向导 选择导入类型: 然后选择文件作为数据源,这里是我之前抓好的包,300w+条抓包记录 这里直接采取默认设置 同样默认 自己设置了下表明,新建了表

将csv文件导入mongodb

1.表头就是字段名 2.注意如果导入乱码的话,就先把数据导入到sqlserver,再从sqlserver导出,导出注意数字类型长于15的列需要设置为文本类型后从sqlserver 复制粘贴到导出的csv文件, 3.将csv文件导入到mongodb,注意将表头名改为我们需要的列名 mongoimport -d ymci -c user_card --type csv --headerline --file E:\csv\rightcard.csv 原文地址:https://www.cnblogs.

2017年4月8日Office 365 使用CSV文件导入邮件组

国内版 第一步: Import-Module msonline Connect-MsolService 输入用户名密码 第二步: Get-MsolUser" 第三步: Set-ExecutionPolicy unrestricted $cred = Get-Credential $session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://partner.outlook.cn/Power