使用phpexcel解析Excel数据表并存储到数据库中全过程

    xiaoxiao2021-03-26  25

    第一步:ThinkPHP中实例化上传类获取form表单提交的文件(非ThinkPHP可以直接忽略第一步,直接看第二步)

    HTML文件核心代码

    <form action="{:U('Question/add_excel_post')}" enctype="multipart/form-data" method="post"> <input type="file" name="excel_file" class="input"> <button class="btn btn-primary" type="submit">上传</button> </form>

    PHP文件接收上传的核心代码

    $upload = new \Think\Upload();// 实例化上传类 $upload->maxSize = 3145728 ;// 设置附件上传大小 $upload->exts = array('xls', 'xlsx');// 设置附件上传类型 $upload->rootPath = './'; // 设置附件上传根目录 $upload->savePath = 'Uploads/ExamPaper/'; // 设置附件上传(子)目录 $upload->autoSub = false;//不自动生成子文件夹 // 上传单个文件 $info = $upload->uploadOne($_FILES['excel_file']);

    $info生成上传信息,并进行判断,如果上传成功,则拼接上传到服务器的文件路径及名称

    if(!$info){ $this->error($upload->getError()); }else{ $file_puth = './'.$info['savepath'].$info['savename']; }

    第二步:导入ExcelPHP类库,并对Excel表格进行查询解析

    ThinkPHP种,第三方类库的存放文件路径是:ThinkPHP\Extend\Vendor内置类库路径常量为VENDOR_PATH .xls文件与.xlax文件的区别: 版本问题 ,XLSX是高版本。 07版以后的扩展名都是.xlsx ,是用新的基于XML的压缩文件格式取代了其目前专有的默认文件格式,在传统的文件名扩展名后面添加了字母x(即.docx取代.doc、.xlsx取代.xls,等等),使其占用空间更小,可以向下兼容xls。

    在PHP文件中导入PHPExcel类库,并对Excel表格进行解析:

    require_once VENDOR_PATH.'PHPExcel_1/PHPExcel/IOFactory.php'; require_once VENDOR_PATH.'PHPExcel_1/PHPExcel.php'; //判断文件版本,选择对应的解析文件 if($info['ext']=='xlsx'){ require_once VENDOR_PATH.'PHPExcel_1/PHPExcel/Reader/Excel2007.php'; $objReader = \PHPExcel_IOFactory::createReader('Excel2007'); }else{ require_once VENDOR_PATH.'PHPExcel_1/PHPExcel/Reader/Excel5.php'; $objReader = \PHPExcel_IOFactory::createReader('Excel5'); } //解析Excel文件 $objPHPExcel = $objReader->load($file_puth); $sheet = $objPHPExcel->getSheet(0);// 读取第一个工作表(编号从 0 开始) $highestRow = $sheet->getHighestRow(); // 取得总行数 $highestColumn = $sheet->getHighestColumn(); // 取得总列数 //循环读取excel文件,读取一条,插入数组一条 for($j=2;$j<=$highestRow;$j++) { for($k='A';$k<=$highestColumn;$k++) { //读取单元格 $ExamPaper_arr[$j][$k]= $objPHPExcel->getActiveSheet()->getCell("$k$j")->getValue(); } }

    第三步:将获取到的数据存入数据库

    使用foreach函数,循环对字段数组赋值,然后存入数据库 $question_model=M('question'); $question_relationships_model = M('question_relationships'); $answer_model = M('answer'); foreach ($ExamPaper_arr as $key => $value) { $title_data['q_id'] = empty($value['A'])?0:$value['A']; $title_data['post_title'] = empty($value['B'])?0:$value['B']; $title_data['post_description'] = empty($value['D'])?0:$value['D']; $title_data['post_difficulty'] = empty($value['E'])?0:$value['E']; $title_data['post_date'] = time(); $question_model->add($title_data); }
    转载请注明原文地址: https://ju.6miu.com/read-661510.html

    最新回复(0)