欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Laravel5.5安装使用Excel扩展

程序员文章站 2022-05-19 18:17:10
...

背景:自己在家学习laravel框架,需要使用excel导入导出功能,在安装laravel Excel相关扩展过程中出现很多问题,在此记录一下。
框架版本:laravel5.5,PHP:7.3,集成环境:xampp,系统:Windows10.

一、 composer镜像

在框架根目录下的 composer.json 文件底部可以看到当前 composer 使用的镜像来源:Laravel5.5安装使用Excel扩展
但是https://packagist.phpcomposer.com这个镜像凉了一半了,部分扩展程序没法通过composer下载,官方也不负责任也不通知下。我们改成阿里云镜像:https://mirrors.aliyun.com/composer/
Laravel5.5安装使用Excel扩展

二、 安装配置laravel Excel扩展

1.在Laravel项目根目录下使用Composer安装依赖:
composer require maatwebsite/excel ~2.1
Laravel5.5安装使用Excel扩展
注:因为现在官方版本已经更新到3.X版本了,而2.X跟3.X版本不兼容!如果你不限制版本号的话,composer会安装最新的3.X版本!可能会不能正常运行,所以记得加上~2.1。

2.安装后,修改设置:
在config/app.php中注册服务提供者到providers数组:
Maatwebsite\Excel\ExcelServiceProvider::class,
Laravel5.5安装使用Excel扩展
在config/app.php中注册门面到aliases数组:‘Excel’ => Maatwebsite\Excel\Facades\Excel::class,
Laravel5.5安装使用Excel扩展
执行Artisan命令:
php artisan vendor:publish --provider=“Maatwebsite\Excel\ExcelServiceProvider”
Laravel5.5安装使用Excel扩展
注:执行成功后会在config目录下生成文件excel.php。
Laravel5.5安装使用Excel扩展
3.修改生成的excel.php文件:
将’to_ascii’ => true,改为 ‘to_ascii’ => false,
Laravel5.5安装使用Excel扩展

三、 测试

到了学习Excel这一步的人都会创建控制器和定义路由了的,这里我不重复了,直接演示怎么使用。

(一)导出

1. 首先引入Excel
在 config/app.php 文件的 alias 数组里已经定义过 Excel 的别名,所以在控制器里直接引入Excel即可:
Laravel5.5安装使用Excel扩展
2. 然后实现导出功能

<?php
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
// 引入 Excel
use Excel;

class QuestionController extends Controller
{
	// 导出方法
    public function export(){
    	$cellData = [
            ['学号','姓名','成绩'],
            ['10001','AAAAA','99'],
            ['10002','BBBBB','92'],
            ['10003','CCCCC','95'],
            ['10004','DDDDD','89'],
            ['10005','EEEEE','96'],
        ];
        Excel::create('学生成绩', function($excel) use ($cellData){
            $excel->sheet('score', function($sheet) use ($cellData){
                $sheet->rows($cellData);
            });
        })->store('csv')->export('csv');
}
?>

Laravel5.5安装使用Excel扩展
一般情况下到了这一步就可以顺利导出Excel文件了,但我这个项目有有一点比较特别,那就是PHP版本过高,项目里用的是PHP7.3版本,此时访问export()方法会报错:
Laravel5.5安装使用Excel扩展
原因是在PHP7.3的 switch 里面使用 continue 会出现警告,可以换成 break 或者 continue2 。只需要修改对应位置的代码就可以了。
Laravel5.5安装使用Excel扩展
此时执行导出功能就会直接下载Excel文件,如果你要导出csv或者xlsx文件,只需将export方法中的参数改成csv或xlsx。
store()方法,将该文件保存到服务器上,默认保存到storage/exports 目录下,iconv()是为了防止文件名中文乱码。
Laravel5.5安装使用Excel扩展
Laravel5.5安装使用Excel扩展

(二)导入

在 export函数里的store()方法可以保存Excel文件在服务器,此处我们直接使用这个文件演示导入功能。
文件路径:根目录/storage/exports/

public function import(){
        $filePath = 'storage/exports/'.iconv('UTF-8', 'GBK', '学生成绩').'.xls';
        Excel::load($filePath, function($reader) {
            $data = $reader->all(); 
            $data = json_decode($data);
            dump($data);
        });
        exit;
    }

Laravel5.5安装使用Excel扩展
load方法基于项目根路径作为根目录,同样我们对中文进行了转码,否则会提示文件不存在。当然,实际使用过程中导入功能一般是跟上传功能关联的,本教程不演示上传了,只需把 $filePath 替换成真实的文件路径就可以了,实际效果如下图所示:
Laravel5.5安装使用Excel扩展

相关标签: laravel php excel