如何在 Laravel 项目中处理 Excel 文件

1.Laravel Excel

Laravel Excel 是一款基于PHPExcel开发的Laravel框架专用的Excel/CSV 文件导入导出功能的扩展包,用起来的非常方便。
它的Github地址是:https://github.com/Maatwebsite/Laravel-Excel
当然了,你也可以使用PHPExcel,但是请注意,PHPExcel官方团队已经停止维护了,现在官方团队开发维护的是它的升级版PHPExcel扩展包,叫做:PhpSpreadsheet
我们今天主要介绍(因为我前天项目中用到了导出,最后选择了Laravel Exxcel☺):Laravel Excel

安装

1). 使用 Composer 安装该扩展包  php7.1以上用3.1.0版本:

 

 

  1.  
    composer require "maatwebsite/excel:~3.1.0"

2). 安装完成后,修改 config/app.php 在 providers 数组内追加如下内容

 

 

[html] view plain copy
  1. 'providers' => [  
  2.     ...  
  3.     Maatwebsite\Excel\ExcelServiceProvider::class,  
  4. ],  

3). 同时在 aliases 数组内追加如下内容:

 

 

[html] view plain copy
  1. 'aliases' => [  
  2.     ...  
  3.     'Excel' => Maatwebsite\Excel\Facades\Excel::class,  
  4. ]  

4). 接下来运行以下命令生成此扩展包的配置文件 config/excel.php:

 

 

[html] view plain copy

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

5.创建导出类

php artisan make:export ExcelExport

 

<?php

namespace App\Exports;

use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\WithHeadings;
class ExcelExport implements FromCollection, WithHeadings
{
    use Exportable;

    private $data;
    private $headings;

    //数据注入
    public function __construct($data, $headings)
    {
        $this->data = $data;
        $this->headings = $headings;
    }

    //实现FromCollection接口
    public function collection()
    {
        return collect($this->data);
    }

    //实现WithHeadings接口
    public function headings(): array
    {
        return $this->headings;
    }
}

 

6.控制器里

public function export(){
        $data = [
            [
                'name' => 'cheng',
                'email' => 'cheng222'
            ],
            [
                'name' => 'cheng',
                'email' => 'cheng111'
            ],
        ];

        $headings = [
            'name',
            'email'
        ];
        return Excel::download(new ExcelExport($data, $headings), 'users.csv');

    }

 

 

导入文件

1.创建导入类

 php artisan make:import ExcelImport

这里向和我一样不明白的小白说下,关于导入导出excel 文档里主要设计到三种 : 模型 model  , 集合 collection , 数组 Array

此外还有 implements ToArray 和 implements ToCollection 两个方法,

<?php
 
namespace App\Imports;
 
use App\User;
use Illuminate\Support\Facades\Hash;
use Maatwebsite\Excel\Concerns\ToModel;
 
class UsersImport implements ToModel
{
    /**
     * @param array $row
     *
     * @return User|null
     */
    public function model(array $row)
    {
        return new User([
           'name'     => $row[0],
           'email'    => $row[1], 
           'password' => Hash::make($row[2]),
        ]);
    }
}

 

<?php
 
 
namespace App\Imports;
 
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToArray;
 
 
class UsersImport implements ToArray 
{
    public function Array(Array $tables)
    {
        return $tables;
    }
 
}

控制器的两种用法

$array = Excel::toArray(new UsersImport, 'users.xlsx');

$collection = Excel::toCollection(new UsersImport, 'users.xlsx');

 

posted on 2019-10-19 17:00  小V_chen  阅读(2573)  评论(0编辑  收藏  举报

导航