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.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路径。
 
posted @ 2017-04-20 15:23  _逍遥  阅读(12447)  评论(1)    收藏  举报