laravel5.7+Excel2.0使用
一:导入Excel2.0
1:composer require "maatwebsite/excel:~2.0"
2:安装完成后,修改 config/app.php 在 providers 数组内追加如下内容:
Maatwebsite\Excel\ExcelServiceProvider::class,
3:在 aliases 数组内追加如下内容:
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
4:. 接下来运行以下命令生成此扩展包的配置文件 config/excel.php:
php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"
二:定义路由
Route::get('/getAllSms_logList','Sms_logExportController@getAllSms_logList');
Route::get('/import','Sms_logImportController@reading_data');
三:使用(导出)
1:创建控制器
php artisan make:controller Sms_logCnotroller
2:控制器代码
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Sms_logModel;
use Excel;
class Sms_logExportController extends Controller
{
//1:查询数据表数据
public function getAllSms_logList(){
//(1)实例化模型
$sms = new Sms_logModel();
//(2)调用模型方法并接收返回数据
$data = $sms -> getAllData();
//(3)数据格式转换
$cellData = $this->data_conversion($data);
//(4)使用Excel插件将数组导出为excel表格
$this->excelExport($cellData);
}
//2:数据转换函数
public function data_conversion(object $data){
//(1)表头设置
$cellData = [
['id','phone','code','短信类型','姓名','status','状态','添加时间']
];
//(2)对象数据转数组
foreach ( $data as $student){
$datab = [
$student->id,
//$student->created_at->format('Y-m-d H:i:s'),
$student->id,
$student->code,
$student->is_type,
$student->name,
$student->status,
$student->is_use,
$student->add_time
];
//(3)表头压入
array_push($cellData,$datab);
}
return $cellData;
}
//3:导出处理函数
public function excelExport(Array $cellData){
Excel::create('信息管理表',function($excel) use ($cellData){
$excel->sheet('score', function($sheet) use ($cellData){
$sheet->rows($cellData);
});
})->export('xlsx');
}
}
3:输入url:http://127.0.0.1/getAllSms_logList,即可完成从数据库导出表“sms_log”的数据到exccel表格的操作。
四:使用(导入)
1:创建导入控制器:
php artisan make:controller Sms_lohImportController
2:控制器代码
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Sms_logModel;
use Excel;
use DB;
class Sms_logImportController extends Controller
{
//1:读取数据以及调用方法写入数据库
public function reading_data(){
//(1)设置文件路径这里的“\\”相当于"\"具体自己百度php转义字符
$filePath = public_path('file\\import\\').iconv('UTF-8', 'GBK', '信息管理表').'.xlsx';
//(2)读取xlsx表格数据
Excel::load($filePath, function($reader){
$data = $reader->all();
//(1)数据类型转换
$data = $this->objToArray($data);
//(2)数据持久化
$res = $this->addAll($data);
if($res!=null){
echo('表格插入失败!');
}else{
echo('表格上传成功!');
}
});
}
//2:对象转数组
function objToArray(object $data)
{
return json_decode(json_encode($data), true);
}
//3:数据持久化
public function addAll(Array $data)
{
//dd($data);
$arr=[];
foreach($data as $item)
{
$row= [
'phone'=>$item['phone'],
'code'=>$item['code'],
'is_type'=>$item['短信类型'],
'name'=>$item['姓名'],
'status'=>$item['status'],
'is_use'=>$item['状态'],
//['add_time'=>$data[6]['is_type']],
];
array_push($arr,$row);
}
DB::table('excel_import')->insert($arr);
}
}
3:输入路由http://127.0.0.1/import 即可将public/file/import文件夹下的信息管理表导入数据库中
五:声明
1:不作任何商业盈利用途,仅供个人学习交流使用。
2:具体使用请根据代码注释自行改动以符合具体项目。