1. 安装Laravel框架导入导出Excel表扩展:
方法一 : 网速给力,没有发生意外的话使用:composer require maatwebsite/excel
方法二:我是用的方式: composer.json 里面的require中添加拓展包:"maatwebsite/excel": "~2.1" 然后运行composer update命令。
不推荐使用 方法一 进行安装,因为2.1以后的扩展版本 都不支持 laravel框架的 Excel的导入导出,执行方法一的命令是默认安装最新版本(3.1)的扩展插件。 所以推荐使用方法二来手动设置一下版本。
2.安装后的设置
在config/app.php
中注册服务提供者到providers
数组:
Maatwebsite\Excel\ExcelServiceProvider::class,
同样在config/app.php
中注册门面到aliases
数组:
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
如果想要对Laravel Excel进行更多的自定义配置,执行如下Artisan命令:
php artisan vendor:publish
执行成功后会在config
目录下生成一个配置文件excel.php
。
routes.php
中定义相关路由:Route::get('excel/export','ExcelController@export');
Route::get('excel/import','ExcelController@import');
public function export(){
$cellData = [
['学号','姓名','成绩'],
['10001','AAAAA','99'],
['10002','BBBBB','92'],
['10003','CCCCC','95'],
['10004','DDDDD','89'],
['10005','EEEEE','96'],
];
/*怎么将自己的数据整理成上边的形式:
$students = Student::where($array)->paginate(10); //分页的形式获取数据。
$cellData = [
['学号','姓名','成绩'],
];
foreach ($students as $student) {
array_push($cellData, [ $student->studentid , $student->name , $student->grade ]);
}
*/
Excel::create('学生成绩',function($excel) use ($cellData){
$excel->sheet('score', function($sheet) use ($cellData){
$sheet->rows($cellData);
});
})->export('xls');
}
}
/*如果还要将该Excel文件保存到服务器上,可以使用store
方法:
Excel::create('学生成绩',function($excel) use ($cellData){
$excel->sheet('score', function($sheet) use ($cellData){
$sheet->rows($cellData);
});
})->store('xls')->export('xls'); //文件默认保存到storage/exports目录下.
*/
(1)首先配置一下: 无法读取excel中中文表头列数据:修改config目录excel.php
的配置文件 : 'to_ascii' => false,
(2)这种方法是:先将本地的Excel表格 保存到 laravel项目下的storage目录下的import.xls文件中,然后再通过Eloquent来操作MySQL数据库:
use Excel ;
public function upload(Request $request){
$url = $request->file("file")->storeAs('public','import.xls');
if($url){
$filePath = "storage/import.xls";
Excel::load($filePath, function($reader) {
$data = $reader->all();
foreach ($data as $item){
Eloquent表达式 操作 数据库。
}
});
}
}
(3)要创建这个软链,可以使用 Artisan 命令 storage:link
:
php artisan storage:link
collageName ;
$progress = $request->progress ;
$array = array(); //where 查询语句的 条件 数组 。
if ($collageName != "学院名称" && $collageName !=null) { //如果collageName 不为 "学院名称" 而且不为 空。
array_push($array, ['yb_collegename',$collageName]);
}
if ($progress !="闯关状态" && $progress != null) {
if ($progress == 6) {
array_push($array, ['progress','=',$progress]);
} else {
array_push($array, ['progress','<',6]);
}
}
$students = Student::where($array)->paginate(10);
/*获取数据end*/
$cellData = [
['学号','姓名','学院','班级','状态'],
];
foreach ($students as $student) {
$progress = $student->progress == 6 ? "成功" : "未成功" ;
array_push($cellData, [$student->yb_studentid,$student->yb_realname,$student->yb_collegename,$student->yb_classname,$progress]);
}
//打印成 Excel表的形式
Excel::create('各学院学生闯关统计', function ($excel) use ($cellData) {
$excel->sheet('score', function ($sheet) use ($cellData) {
$sheet->rows($cellData);
});
})->export('xls');
}
//导入Excel表。
public function upload(Request $request)
{
if($request->file("file")==null){
session()->flash("importNoSuccess", "请添加Excel表格......");
return redirect()->back();
}else{
/**
这个方法是 自定义文件名 文件上传方法 。 将获取到的Excel文件 保存到storage/app/public/import.xls文件中。
*/
$url = $request->file("file")->storeAs('public', 'import.xls');
if ($url) {
$filePath = "storage/import.xls";
Excel::load($filePath, function ($reader) {
$datas = $reader->all();
/**
第一行 列名 为 键值对的 键,也就是数组的 索引。
*/
foreach ($datas as $data) {
$title = $data["title"];
$a = $data["a"];
$b = $data["b"];
$c = $data["c"];
$d = $data["d"];
$right_answer = $data["right_answer"];
$type = $data["type"];
$newQuestion = Test_questions::create(
["title"=>$title,
"A"=>$a,
"B"=>$b,
"C"=>$c,
"D"=>$d,
"right_answer"=>$right_answer,
"type"=>$type
]
);
}
});
}
session()->flash("importSuccess", "导入题库成功......");
return redirect()->back();
}
}
}
参照博客: https://blog.csdn.net/Bepthslowly/article/details/88615572
官方文档:https://laravelacademy.org/post/2024.html/page/5#comments