https://blog.csdn.net/yiluohan0307/article/details/80229978

http://www.ptbird.cn/laravel-excel-csv.html

项目需要从 csv 中导入数据并且写入到数据表中。

因为使用 Laravel 框架,因此就直接用了 Laravel-Excel 进行数据的读写操作。

网上关于 Laravel-Excel 的使用方法有很多,比较推荐的是在 laravel学院上的一篇:

  • 在 Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能
  • Laravel-Excel 文档地址:

  • https://laravel-excel.maatwebsite.nl/docs/2.1/getting-started/installation
  • 注意事项:

    目前 Laravel-Excel 已经到了 3.0 版本,不再基于 PHPExcel ,而是使用 PhpSpreadsheet

    但是现在 3.0 版本不能 import ,只能 export ,所以如果想要导入 excel/csv 只能使用 2.0 版本。

    import 功能将在 3.1 版本加入(应该是能够等到的,我写文章的时候,9 days ago 作者还在 push 代码: https://github.com/Maatwebsite/Laravel-Excel/ )。

    二、安装配置 laravel-excel

    我使用的是 laravel 5.6 版本:(laravel-excel 3.0 只能是 ^5.5 版本),安装的是 ~2.1.0

    Laravel 4 版本应当安装: ~1.3

    1. 安装

    composer require maatwebsite/excel ~2.1.0

    2. 配置 config/app.php

    providers 数组中添加:

    Maatwebsite\Excel\ExcelServiceProvider::class,

    aliases 数组中添加:

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

    3. 导出 Excel.php 配置文件

    php artisan vendor:publish

    这里可能会需要选择某个 tag 进行导出,根据需要输入要导出的配置文件的 tag 即可

    三、导入 Excel

    因为是使用的文件上传功能,因此将文件存储也加上去了。

    因为 $path 得到的文件地址没有 storage/app/ ,因此需要加上。

    这里需要注意的是,laravel-excel 的 load 使用的 path 参数,是本地文件的目录,因此只需要给出本地文件目录地址即可,与 web 目录无关。

    // 文件上传到了 storage/app/patient/xxxxx.txt
    $path = $request->file('file')->store('patient'); 
    // dd($path);
    // $path = "patient/47QhWPGzUgBCLZewclupIWxwfwIQdeDdlyx4DA84.txt";
    // 更新文件本地地址
    $path = 'storage/app/' . $path;
    // 获取 csv 内容
    $data = Excel::load($path, function ($reader) {}, 'GBK')->get();
    dd($data);

    关键的方法:

    $data = Excel::load($path, function ($reader) {}, 'GBK')->get();

    我是使用的 get() 方法来获取数据,除此之外,也可以在回调函数中获取,但是没办法回调什么的

    Excel::load($path,function($reader){
        $data = $reader->all();
        dd($data);
    

    非学,无以致疑;非问,无以广识