今天周六,开启新的摸鱼的一天。今天分享的内容是thinkPHP5使用PHPExcel导入表格数据,如果您开发使用的是波波的开发框架tp-admin,那么很高兴的告诉你不用看这篇文章了。波波已经在tp-admin开发框架中集成了PHPOffice组件,并专门开发了OfficeService,比如我们要导入数据只需要一行代码就可以搞定。如下所示:
- 第一步:引入服务组件
- use service\OfficeService;
- 第二步:直接使用
- //读取Excel文件内容为Array
- OfficeService::getArray(“文件路径”,”字段”);
除了读取成Array数组,还可以一行代码将Excel存入数据库或者导出数据成Excel。
当然了很多人开发可能并没有使用波波的tp-admin后台开发框架,那么下面的内容将帮助大家学习如何从Excel文件导入数据。
第一步:首先下载PHPExcel类库,类库地址:https://github.com/PHPOffice/PHPExcel
类库中有很多文件,我们只需要把Classes文件夹下载下来,放在tp5的vendor目录即可。当然了会composer的用composer安装也是极好的。
第二步:前端上传文件页面。
HTML部分:
- <form action="{:url('daoru')}" enctype="multipart/form-data" method="post">
- <div class="layui-upload">
- <button type="button" class="layui-btn layui-btn-normal" id="test8">选择文件</button>
- <button type="button" class="layui-btn" id="test9">开始导入到数据库</button>
- </div>
- </form>
JS部分:
- <script>
- layui.use('upload', function(){
- var $ = layui.jquery
- ,upload = layui.upload;
- //选完文件后不自动上传
- upload.render({
- elem: '#test8'
- ,exts: 'xlsx' //只允许上传压缩文件
- ,url: '{:url('admin/chengji/daoru')}'
- ,auto: false
- //,multiple: true
- ,bindAction: '#test9'
- ,done: function(res){
- console.log(res)
- if(res.code == 1) {
- layer.msg(res.msg, {'icon': 1});
- setTimeout(function () {
- parent.window.location.reload();
- }, 1000);
- } else {
- layer.msg(res.msg);
- }
- }
- });
- });
- </script>
第三步:写后端文件处理逻辑。
- //批量导入
- public function daoru(){
- if($this->request->isPost()){
- $file = $this->request->file('file');
- // 移动到框架应用根目录/public/uploads/ 目录下
- $info = $file->move(ROOT_PATH . 'public' .DS.'upload'. DS . 'excel');
- if($info){
- //获取文件所在目录名
- $path=ROOT_PATH . 'public' . DS.'upload'.DS .'excel/'.$info->getSaveName();
- //加载PHPExcel类
- vendor('PHPExcel.PHPExcel');
- //实例化PHPExcel类(注意:实例化的时候前面需要加'\')
- $extension = $info->getExtension();
- if( $extension =='xlsx' )
- {
- $objReader = new \PHPExcel_Reader_Excel2007();
- }else
- {
- $objReader = new \PHPExcel_Reader_Excel5();
- }
- $objPHPExcel = $objReader->load($path,$encode='utf-8');//获取excel文件
- $sheet = $objPHPExcel->getSheet(0); //激活当前的表
- $highestRow = $sheet->getHighestRow(); // 取得总行数
- $highestColumn = $sheet->getHighestColumn(); // 取得总列数
- $a=0;
- //将表格里面的数据循环到数组中
- for($i=2;$i<=$highestRow;$i++)
- {
- //*为什么$i=2? (因为Excel表格第一行应该是姓名,年龄,班级,从第二行开始,才是我们要的数据。)
- $data[$a]['cj_munuid'] = $objPHPExcel->getActiveSheet()->getCell("A".$i)->getValue();//届数id
- $data[$a]['zhunkaozheng'] = $objPHPExcel->getActiveSheet()->getCell("B".$i)->getValue();//准考证号码
- $data[$a]['sfz'] = $objPHPExcel->getActiveSheet()->getCell("C".$i)->getValue();//身份证号码
- $data[$a]['xueyuanname'] = $objPHPExcel->getActiveSheet()->getCell("D".$i)->getValue();//姓名
- $data[$a]['zhiye'] = $objPHPExcel->getActiveSheet()->getCell("E".$i)->getValue();//鉴定职业
- $data[$a]['jiebie'] = $objPHPExcel->getActiveSheet()->getCell("F".$i)->getValue();//级别
- $data[$a]['kemu'] = $objPHPExcel->getActiveSheet()->getCell("G".$i)->getValue();//科目
- $data[$a]['lilun'] = $objPHPExcel->getActiveSheet()->getCell("H".$i)->getValue();//理论成绩
- $data[$a]['lilunzhuang'] = $objPHPExcel->getActiveSheet()->getCell("I".$i)->getValue();
- $data[$a]['shicao'] = $objPHPExcel->getActiveSheet()->getCell("J".$i)->getValue();
- $data[$a]['shicaozhuang'] = $objPHPExcel->getActiveSheet()->getCell("K".$i)->getValue();
- $data[$a]['pingding'] = $objPHPExcel->getActiveSheet()->getCell("L".$i)->getValue();
- $data[$a]['baomingjigou'] = $objPHPExcel->getActiveSheet()->getCell("M".$i)->getValue();
- // 这里的数据根据自己表格里面有多少个字段自行决定
- $a++;
- }
- //往数据库添加数据
- //dump($data);
- $aa = Db('chengji')->insertAll($data);
- if($aa){
- $res['code']=1;
- $res['msg'] = '导入成功!';
- }else{
- $res['code']=0;
- $res['msg'] = '导入失败!';
- }
- return $res;
- }
- }
- return $this->fetch();
- }
以上分享只是一个简单的示例,实际项目中根据自己需求简单修改行列数据即可。