耗费两天时间,各种百度谷歌,终于把phpexcel这块攻克下来!!!
1.phpexcel的下载与安装
其实一开始我是被这里绊住了,不知道为什么composer一直下载不下来。翻墙也没有用。 其实我手头是有phpexcel类库的,但是引入不到tp51.框架内:
tp5.1废弃了import和vendor!!!
于是只剩下最后一种办法:
PHP的引入基础:require_once 通过这个方法引入类库: 路径如下:
最重要的一步完成了,接下来便是如何引用了。
1.phpexcel的使用
我们首先来讨论:前端上传Excel文件,控制器读取并输入
首先给出tp51文档: https://www.kancloud.cn/manual/thinkphp5_1/354121
最中重要的是后端file文件的接受:requert()->file()
然后使用phpexcel加载上传的Excel
1
$phpExcelObj = \PHPExcel_IOFactory::load($fileName); 注意此处的filename为文件路径,`$fileName = '/public/upload/excel/'.$info->getSaveName();`
我的文件路径:
上完整代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
public function doUpload()
{
$data = input();
$file = request()->file('excel');
//dump($data);
//考试批次
$batch = $data['batch'];
//班级
$class = $data['class'];
//科目
$subject = $data['subject'];
$info = $file->validate(['size'=>1048576,'ext'=>'xlsx,xls'])->move('/public/upload/excel');
if($info){
//再batch表创建对应批次
$db = Db::table('batch')->insert(['batch'=>$batch]);
//加载指定文件
$fileName = '/public/upload/excel/'.$info->getSaveName();
$phpExcelObj = \PHPExcel_IOFactory::load($fileName);
$sheet = array();
$sheet[] = $phpExcelObj->getSheet(0)->toArray();
$name = '';
//dump($sheet[0]);
//把表格数据遍历为数组
foreach($sheet[0] as $key=>$value){
if($key!=0){
foreach($value as $k=>$val){
if($k == 0){
$name = $val;
}
if($k == 1){
$score = $val;
}
}
GradeModel::create(['name'=>$name,'score'=>$score,'batch'=>$batch,'class'=>$class,'subject'=>$subject]);
//echo $name.$score.$batch.$class.'<br>';
}
}
$this->view->assign('class',$class);
$this->view->assign('batch',$batch);
$this->view->assign('subject',$subject);
return $this->view->fetch();
}else{
// 上传失败获取错误信息
//echo $file->getError();
return ['status'=>0,'msg'=>'上传失败'];
}
}
OK,phpexcel到此为止!
总结:
- 不要拘泥于既定,勇于尝试新思路新方法
- 注重php基础,此处用到便是require_once。要记住,任何框架都是基础基础之上!
- 多与他人交流
这里感谢 小小博客 的指点迷津!
教程:http://edu.51cto.com/center/course/lesson/index?id=259283
2019.1.12