PHP的laravel框架后台实现数据导出excel的功能


要想在PHP后台实现excel导入导出功能,一种简单有效的方法就是使用phpexcel插件。  

要使用phpexcel插件,首先需要下载composer,这个工具是专门用来管理项目中库之间的依赖关系的。使用composer下载的phpexcel组件中的类,在项目中的其他文件中都是可以访问phpexcel的而无需其他use和namespace之类的语句。

$objExcel = new \PHPExcel();注意在调用这个类,新建的时候要加上\,系统会自动定位到phpexcel.php这个文件中去拿到这个类。

 在下载composer.phar这个文件的时候,最好翻墙,不翻墙下载十次失败十次,翻墙后1秒1M,一秒下好。

composer下载地址:https://getcomposer.org/download/

强烈推荐翻墙后再下载。如果没有能力翻墙可以联系我,看到后邮箱发给你。

下载好composer.phar后,我们对它进行全局配置。我用的是win8系统,所以这里只讲Windows系统下的全局配置。我使用的是xampp工具包,wamp也一样。将composer.phar放入与php.exe相同的文件夹里。我的是C:\xampp\php。同时在这个文件夹下新建一个名为composer的文本文档,里面写进:@php "%~dp0composer.phar" %*

之后将这个文本文件的扩展名txt改为bat。

添加完成上述步骤后,再将该路径添加到系统的环境变量中。win8操作方法如下:我的电脑->右击->属性->高级系统设置->环境变量->双击path->在变量值中添加;C:\xampp\php

这是我的composer所在的路径,你注意添加的路径是你自己的路径,而不是这里的示例。

进行到这里,composer全局配置便完成了。为了验证我们真的完成了composer的全局配置,可在命令行里的任意路径下输入composer,若命令行里打印出了composer大字,便说明我们全局配置成功了。

之后,我们需要composer从中国镜像网下载资源,而不是原本的外网。我也试图使用composer从外网下载所需的资源,结果不管翻不翻墙都下载失败,所以对composer进行配置使它从国内镜像网下载资源是很有必要的一件事情。

方法可参考这里:https://pkg.phpcomposer.com/

我简单讲解一下使用国内镜像配置。在命令行使用cd C:\xampp\htdocs\laravelDemo     你注意这里改成你自己的项目根目录。

 然后在命令行的根目录下输入 

composer config repo.packagist composer https://packagist.phpcomposer.com

 回车后,配置便完成了。此时打开项目跟目录下的composer.json文件会发现里面增加了这部分内容:

当然你也可以手动在这个文件中添加这些内容。

 到此我们便完成了composer的配置可以使用它来下载phpexcel组件了。可以参考这里的内容:http://www.tuicool.com/articles/ziY7Vv

使用Composer安装依赖

首先在Laravel项目根目录下使用Composer安装依赖:在命令行项目的根目录下操作

composer require maatwebsite/excel ~2.0.0

安装后在项目中的设置:

在 config/app.php 中注册服务提供者到 providers 数组:

Maatwebsite\Excel\ExcelServiceProvider::class,

同样在 config/app.php 中注册门面到 aliases 数组:

'Excel' => Maatwebsite\Excel\Facades\Excel::class,
至此便可以在项目中使用phpexcel组件了。
附上使用例程。

导出Excel文件

为了演示Laravel Excel相关功能,我们为本测试创建一个干净的控制器 ExcelController.php

php artisan make:controller ExcelController --plain

然后在 routes.php 中定义相关路由:

Route::get('excel/export','ExcelController@export'); Route::get('excel/import','ExcelController@import');

接下来我们先在 ExcelController.php 中定义 export 方法实现导出功能:

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; use Excel; class ExcelController extends Controller { //Excel文件导出功能 By Laravel学院 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); }); })->export('xls'); } } 

我们在浏览器中访问 http://laravel.app:8000/excel/export ,会导出一个名为 学生成绩.xls 的Excel文件:

如果你要导出csv或者xlsx文件,只需将 export 方法中的参数改成csv或xlsx即可。

如果还要将该Excel文件保存到服务器上,可以使用 store 方法:

Excel::create('学生成绩',function($excel) use ($cellData){ $excel->sheet('score', function($sheet) use ($cellData){ $sheet->rows($cellData); }); })->store('xls')->export('xls');

文件默认保存到 storage/exports 目录下,如果出现文件名中文乱码,将上述代码文件名做如下修改即可:

iconv('UTF-8', 'GBK', '学生成绩')

导入Excel文件

我们将刚才保存到服务器上的Excel文件导入进来,导入很简单,使用 Excel 门面上的 load方法即可:

//Excel文件导入功能 By Laravel学院
public function import(){ $filePath = 'storage/exports/'.iconv('UTF-8', 'GBK', '学生成绩').'.xls'; Excel::load($filePath, function($reader) { $data = $reader->all(); dd($data); }); }

load 方法基于项目根路径作为根目录,同样我们对中文进行了转码,否则会提示文件不存在。

在浏览器中访问 http://laravel.app:8000/excel/import ,页面显示如下:

当然,Laravel Excel还有很多其它功能,比如将Blade视图导出为Excel或CSV,以及对导入/导出更加细粒度的控制,具体可参考其官方文档: http://www.maatwebsite.nl/laravel-excel/docs

例程中的路由控制器注意要用自己的url路径。
 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM