写入数据库
public function lessons_excel(Request $request)
{
$time_star = time();//得到当前时间戳,用来在最后计算文件导入完毕后的用时
//set_time_limit — 设置脚本最大执行时间。默认值为30秒,或者是在php.ini的max_execution_time被定义的值,如果此值存在。如果设置为0(零),没有时间方面的限制。
$rlt = $this->upload_data($request);//调用上面的方法,上传文件得到文件名
if ($rlt["success"] == false) {
return response()->json($rlt);
} else {
try {
$data = [];
$error= [];
$data1 = array();
$err_count='0';
$success_count='0';
$table = $this->load_excel($rlt["message"]);//调用load_excel方法导入文件
foreach ($table as $key =>$v) {
if($key != '0'){
foreach ($table[0] as $key1 =>$v1) {
$row[$v1] = trim($v[$key1]);//姓名
}array_push($data, $row);
}
}array_push($data1, $data);
foreach($data as $d){
if(!$d)continue;
try{
$insert_id = DB::table("school_lessons")->insertGetId($d);
//一些数据库操作
$success_count++;
}catch (\Exception $e){
$err_count++;
array_push($error,$d);//失败数据存起来后面将把失败数据导出
continue;
}
}
if($error){
array_unshift($error,$table[0]);//将标题插入失败数据的第一行,后面导出
session(['error'=>$error]);//将要导出的内容存入session 键值为error
$download = true;//向前台返回一个标识,true说明有失败数据
}else{
$download = false;
}
$time_end = time();
return response()->json(["success" => true, "message" => "本次共导入 ".($success_count+$err_count).' 条数据, 其中成功 '.$success_count.' 条 , 其中失败 '.$err_count.' 条 。 ','download'=>$download,'time'=>($time_end-$time_star)]);
} catch (\Exception $e) {
return response()->json(["success" => false, "message" => "数据导入失败"]);
}
}
调用上面的方法,上传文件得到文件名
//上传文件调用的方法
private function upload_data(Request $request)//导入的时候 上传文件
{
if (!$request->hasFile('file')) {
return [
'success' => false,
'message' => '上传文件为空'
];
}//判断文件是否上传成功
$file = $request->file('file');
if (!$file->isValid()) {
return [
'success' => false,
'message' => '文件上传出错'
];
}
//获取原文件名
$originalName = $file->getClientOriginalName();
//扩展名
$ext = $file->getClientOriginalExtension();
//文件类型
$type = $file->getClientMimeType();
//临时绝对路径
$realPath = $file->getRealPath();
$filename =date('Y-m-d H_i_s').uniqid().'.'.$ext;
$storage_path = 'storage/excel';
$bool = $file->move($storage_path, $filename);
if($bool){
return [//上传成功返回文件名称
'success' => true,
'message' => $filename
];
}else{
return [
'success' => false,
'message' => '文件保存失败'
];
}
}
调用load_excel方法导入文件
private function load_excel($filename)
{
$filePath = 'storage/excel/' . $filename;
$reader = Excel::load($filePath);//要开始导入文件,可以使用->load($filename)。回调是可选的。
$reader = $reader->getSheet(0);//得到Excel的第一页内容,如下图3
return $reader->toArray();
}
网友评论