背景:因为公司要求,在laravel5框架上开发excel导入功能,在开发过程中发现没有安装laravel Excel相关扩展,随后在网上查找了一下教程,最后得以实现,现做个记录,以备后续。
一、安装配置laravel Excel扩展
1.在Laravel项目根目录下使用Composer安装依赖:
composer require maatwebsite/excel ~2.1
注:一定要加上~2.1!!!因为现在已经更新到3.0版本了,如果你不加的话,会安装最新的3.0版本!等运行时候会有可能报错。
2.安装后,修改设置:
在config/app.php中注册服务提供者到providers数组:Maatwebsite\Excel\ExcelServiceProvider::class,
在config/app.php中注册门面到aliases数组:'Excel' => Maatwebsite\Excel\Facades\Excel::class,
执行Artisan命令:php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"
注:执行成功后会在config目录下生成文件excel.php。
3.修改生成的excel.php文件:
将'to_ascii' => true,改为 'to_ascii' => false,
二、测试
1.创建一个控制器ExcelController.php:
php artisan make:controller ExcelController
2.然后在routes.php中定义相关路由:
Route::get('excel/export','ExcelController@export');
Route::get('excel/import','ExcelController@import');
3.然后实现导出、导入功能:
<?php
namespace App\Http\Controllers;
use App\Http\Requests;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Excel;
class ExcelController extends Controller
{
public function export()
{
$cellData = [
['id','姓名','年龄'],
['10001','张三','19'],
['10002','李四','22'],
['10003','王五','23'],
['10004','赵六','19'],
['10005','猴七','22'],
];
$name = iconv('UTF-8', 'GBK', '成员信息');
Excel::create($name,function($excel) use ($cellData){
$excel->sheet('score', function($sheet) use ($cellData){
$sheet->rows($cellData);
});
})->store('xls')->export('xls');
}
public function import(){
$filePath = 'storage/exports/'.iconv('UTF-8', 'GBK', '成员信息').'.xls';
Excel::load($filePath, function($reader) {
$data = $reader->all(); dump($data);
});
exit;
}
}
注:如果你要导出csv或者xlsx文件,只需将export方法中的参数改成csv或xlsx;store方法,将该Excel文件保存到服务器上,文件默认保存到storage/exports目录下,iconv()是为了防止文件名中文乱码。
public function extract(Request $request)
{
// 请求参数
$status = $request->status ? $request->status : 4; // status(提取状态) 4 有效-未提取 6 已提取 未提取指的是标记为有效的
$data_id = $request->data_id ? $request->data_id : [];
$all_extract = $request->all_extract ? $request->all_extract : 1; // 默认是普通选择提取
$extract_data = $this->getExtData(4, $data_id, 2);
// return Response::json($extract_data);
// dd($extract_data);
$cellData[0] = ['数据编号','拨打时间','通话时长','手机实号'];
foreach($extract_data as $k=>$v){
$cellData[$k+1] = [$v->id ? $v->id : '', $v->dial_time ? date('Y-m-d H:i:s', $v->dial_time) : '', $v->time_len ? $v->time_len : '', $v->kh_phone ? $v->kh_phone : ''];
}
if ($status == 4) {
$status_msg = '未提取';
} else if ($status == 6) {
$status_msg = '已提取';
}
Excel::create("{$status_msg}数据",function($excel) use ($cellData){
$excel->sheet('score', function($sheet) use ($cellData){
$sheet->rows($cellData);
});
})->export('xls');
}
这篇博客只是为了做个记录,大神勿喷哈@!
推荐:https://www.cnblogs.com/djwhome/p/9322112.html
参考:https://laravelacademy.org/post/2024.html