본문 바로가기
PROGRAMMING/PHP

PHP Laravel Excel 라라벨 엑셀 maatwebsite 3.1

by itengineer 2021. 3. 19.
반응형

PHP의 프레임워크인 Laravel에서 Excel을 다루는 방법을 알아봅시다.

PHP에서 Excel 파일을 다루기 위해서는 PHPExcel이라는 패키지를 자주 사용하지만

PHP 7.x 버전부터는 PHPExcel과 호환되지 않기 때문에 사용할 수 없습니다.

하지만 Laravel의 경우 Laravel Excel이라는 패키지를 이용해 Excel을 조작할 수 있습니다.

버전 정보

php 7.4.13
larave 6.20.11
maatwebsite 3.1

 

설치

1. composer를 이용한 두 가지 방법이 있습니다.

 

  • composer.json파일의 require 항목에 다음 내용을 추가하고 update를 실행합니다.
"require": {
	"maatwebsite/excel": "^3.1"
}
composer update
  • 커맨드에서 실행할 경우 아래의 명령어를 입력합니다.
composer require maatwebsite/excel

2. config/app.php 파일에 providers와 aliases를 추가합니다.

'providers' => [
    /*
     * Package Service Providers...
     */
	Maatwebsite\Excel\ExcelServiceProvider::class, 
],
'aliases' => [
	...
	'Excel' => Maatwebsite\Excel\Facades\Excel::class,
],

3. vendor publish 명령을 실행합니다. 실행을 하면 config/excel.php라는 새 파일이 생성됩니다.

php artisan vendor:publish

Excel 가져오기

make 명령어를 실행하여 app/Imports 폴더와 UsersImport 파일을 생성합니다.

php artisan make:import UsersImport --model=User

App/Imports/UsersImport.php 파일의 소스코드입니다.

<?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]),
        ]);
    }
}

Controller에서 UsersImport 호출하기

use App\Imports\UsersImport;
use Maatwebsite\Excel\Facades\Excel;
use App\Http\Controllers\Controller;

class UsersController extends Controller 
{
    public function import() 
    {
        Excel::import(new UsersImport, 'users.xlsx');
        
        return redirect('/')->with('success', 'All good!');
    }
}

위와 같이 작성하면 users.xlsx에 작성된 name, email, password 값을 User모델에 입력할 수 있습니다.

Excel 내보내기

make 명령어를 실행하여 app/Exports 폴더와 UsersExport 파일을 생성합니다.

php artisan make:export UsersExport --model=User

app/Exports/UsersExport.php파일의 소스코드입니다.

<?php

namespace App\Exports;

use App\User;
use Maatwebsite\Excel\Concerns\FromCollection;

class UsersExport implements FromCollection
{
    public function collection()
    {
        return User::all();
    }
}

Controller에서 UsersExport 호출하기

<?php

namespace App\Http\Controllers;

use App\Exports\UsersExport;
use Maatwebsite\Excel\Facades\Excel;

class UsersController extends Controller 
{
    public function export() 
    {
        return Excel::download(new UsersExport, 'users.xlsx');
    }
}

위와 같이 작성하면 User모델에 있는 데이터 전부를 users.xlsx 파일에 출력할 수 있습니다.

반응형

댓글