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

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


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


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


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


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


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


下载好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从外网下载所需的资源,结果不管翻不FQ都下载失败,所以对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.1
安装后在项目中的设置:


在 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 方法基于项目根路径作为根目录,同样我们对中文进行了转码,否则会提示文件不存在。



有话要说