拿来即用的thinkphp5 + phpspreadsheet 导入excel功能

view层

<form action="{:url('system/exceladd1/daoru')}" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" /> 
<br />
<input type="submit" name="submit" value="Submit" />
</form>

controller层

<?php
namespace app\system\controller;

use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use think\Controller;

class Exceladd1 extends Controller
{
     
	public function daoru()
    {
     
        header("content-type:text/html;charset=utf-8");
       
        $file = $this->request->file('file');		
       			
		// 移动到框架应用根目录/public/uploads/ 目录下 存
		$info = $file->move(ROOT_PATH . 'public' .DS.'uploads'. DS . 'excel');

        if ($info) {
     
            //获取上传到后台的文件名
            $fileName = $info->getSaveName();
            //获取文件路径.
            $filePath =ROOT_PATH . 'public' .DS.'uploads'. DS . 'excel'. DS .$fileName;
           
            //获取文件后缀
            $suffix = $info->getExtension();
            // 有Xls和Xlsx和Cvs格式三种
            if ($suffix=="xls")
            {
     
                $reader = IOFactory::createReader('Xls');
            }elseif ($suffix=="xlsx")
            {
     
                $reader = IOFactory::createReader('Xlsx');
            }elseif ($suffix=="csv")
            {
     
                $reader = IOFactory::createReader('Csv');
            }

             //载入excel文件
            $excel = $reader->load($filePath);
            //读取第一张表
            $sheet = $excel->getSheet(0);
            //var_dump($sheet);die();
            //获取总行数
            $row_num = $sheet->getHighestRow();
            //获取总列数
            $col_num = $sheet->getHighestColumn();
            $a=0;
            //将表格里面的数据循环到数组中
            for($i=2;$i<=$row_num;$i++)
            {
     
            	// 如果A列(题目内容)就将数据存到数据库中
            	if($excel->getActiveSheet()->getCell("A".$i)->getValue()){
     
                    //*为什么$i=2? (因为Excel表格第一行应该是题目,选项,班级,从第二行开始,才是我们要的数据。)
                    $data[$a]['single_title'] = $excel->getActiveSheet()->getCell("A".$i)->getValue();//单选题目
                    $data[$a]['opt_A'] = $excel->getActiveSheet()->getCell("B".$i)->getValue();//选项A
                    $data[$a]['opt_B'] = $excel->getActiveSheet()->getCell("C".$i)->getValue();//选项B
					$data[$a]['opt_C'] = $excel->getActiveSheet()->getCell("D".$i)->getValue();//选项C
					$data[$a]['opt_D'] = $excel->getActiveSheet()->getCell("E".$i)->getValue();//选项D
					$data[$a]['opt_E'] = $excel->getActiveSheet()->getCell("F".$i)->getValue();//选项E
					$data[$a]['createtime'] = time();//创建时间
					$data[$a]['right'] = $excel->getActiveSheet()->getCell("H".$i)->getValue();//正确答案
					$data[$a]['knowledge'] = $excel->getActiveSheet()->getCell("I".$i)->getValue();//知识点
					$data[$a]['picture'] = $excel->getActiveSheet()->getCell("J".$i)->getValue();
					$data[$a]['music'] = $excel->getActiveSheet()->getCell("K".$i)->getValue();
					$data[$a]['analysis'] = $excel->getActiveSheet()->getCell("L".$i)->getValue();
                     // 这里的数据根据自己表格里面有多少个字段自行决定
                     }
                $a++;
                }
                  //往数据库添加数据
				// dump($data);
                $aa = Db('single')->insertAll($data);
				if($aa){
     
					$res['code']=1;
					$res['msg'] = '导入成功!';

				}else{
     
					$res['code']=0;
					$res['msg'] = '导入失败!';
				}
               return json($res);
            } 

        else {
     
            return "";
        }
       return $this->fetch();
           
     }
}

你可能感兴趣的:(thinkphp5,php)