您现在的位置是:网站首页>>PHP>>laravel

laravel 实现Excel/csv 文件导出导入

发布时间:2018-12-18 09:58:01作者:wangjian浏览量:770点赞量:0

    一:安装maatwebsite/excel拓展

    composer require "maatwebsite/excel:~2.1.0"

    二:配置

    1:在config/app.php中

    providers数组中添加:

    Maatwebsite\Excel\ExcelServiceProvider::class,

    aliases数组中添加:

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

    2:如果想要对Laravel Excel进行更多的自定义配置,执行如下Artisan命令

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

    这时候会在config目录下新增一个excel.php文件

    三:Excel/csv文件导出

    $user = User::select('user_no','user_name','create_time')->get()->toArray();
    $header = ['用户编号','用户名称','创建时间'];
    array_unshift($user,$header);//向$user数组头部追加header
    //$user的数据结构如:
    /*$user = [
        ['用户编号','用户名称','创建时间'],
        ['001','A','2018-12-16 11:36:45'],
        ['002','B','2018-12-17 11:36:45'],
    ];*/
    //用户表是导出的文件名称
    //xls表示导出的文件格式可以使xls,xlsx,csv
    Excel::create('用户表',function($excel) use ($user){
        $excel->sheet('score', function($sheet) use ($user){
            $sheet->rows($user);
        });
    })->export('xls');

    四:导入excel/csv文件并读取文件内容

    1:导入Excel/csv文件可以参考:laravel 实现文件上传

    2:将服务器生成的excel/csv文件保存到服务器

    $user = User::select('user_no','user_name','create_time')->get()->toArray();
    $header = ['用户编号','用户名称','创建时间'];
    array_unshift($user,$header);//向$user数组头部追加header
    //$user的数据结构如:
    /*$user = [
        ['用户编号','用户名称','创建时间'],
        ['001','A','2018-12-16 11:36:45'],
        ['002','B','2018-12-17 11:36:45'],
    ];*/
    //用户表是保存在服务器上的文件名称
    //xls表示导出的文件格式可以使xls,xlsx,csv
    Excel::create('用户表',function($excel) use ($user){
        $excel->sheet('score', function($sheet) use ($user){
            $sheet->rows($user);
        });
    })->store('xls');

    这时候执行会报错,这是应为文件名中文乱码问题,将文件名改为:

    iconv('UTF-8', 'GBK', '用户表')

    这时候在次执行后会在storage/exports目录下生成一个对应的Excel文件,你还可以边将Excel/csv文件导出边将Excel/csv文件保存在服务器上

    只需要在->store('xls')后面加上->export('xls')即可

    配置Excel文件保存的地址在config/excel.php文件中:

    image.png

    3:读取Excel/csv文件内容

    $filePath = 'storage/exports/2018-12-18.xls';//要读取的文件地址
    Excel::load($filePath, function($reader) {
        //$data = $reader->all();//获取数据对象
        $data = $reader->toArray();//获取数据数组
        dd($data);
    });

    执行上述命令之后发现只能读取到最后一列的数据

    解决方法:

    需要配置 config/excel.php

    'to_ascii' => true,

    修改为:

    'to_ascii' => false,

    image.png

    Laravel Excel官方学习网站:https://laravel-excel.maatwebsite.nl/

0 +1