这几天在作项目时,遇到了须要批量导入数据的状况,用户将excel表格提交后,须要咱们后台这边将excel表格信息中的内容所有插入到数据表中。固然,前提是用户给咱们的excel表格中的信息必须和咱们表中的字段信息时对应的才行,下面是我这边后台进行批量导入数据的实现步骤。php
首先咱们须要下载phpExcel数据库
phpExcel是用来操做Office Excel 文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言。可使用它来读取、写入不一样格式的电子表格.json
有须要这个类库的童鞋能够找我要,本人邮箱823410261@qq.com。函数
下载好phpExcel后,下面就是编码实现部分了,首先说下本人处理的总体思路。ui
首先是须要获得excel表格中的数据,其次是须要将这些数据作成符合SQL规范的格式,其中的细节处理将在下面的代码中展现,最后是将获取的数据连同SQL语句,一块儿在程序中执行,将全部结果插入到数据表中。编码
<?php require_once '../Classes/PHPExcel.php';
function getFileExcle($value){ $cgsdiseasesinterface = new Cgs_diseases_interface(); $filePath = $value;//$value为须要导入数据的excel文件 $PHPExcel = new PHPExcel(); /**默认用excel2007读取excel,若格式不对,则用以前的版本进行读取*/ $PHPReader = new PHPExcel_Reader_Excel2007(); if(!$PHPReader->canRead($filePath)){ $PHPReader = new PHPExcel_Reader_Excel5(); if(!$PHPReader->canRead($filePath)){ echo 'no Excel'; return ; } } $PHPExcel = $PHPReader->load($filePath); /**读取excel文件中的第一个工做表*/ $currentSheet = $PHPExcel->getSheet(0); /**取得最大的列号*/ $allColumn = $currentSheet->getHighestColumn(); /**取得一共有多少行*/ $allRow = $currentSheet->getHighestRow(); $row = array(); /**从第二行开始输出,由于excel表中第一行为列名*/ for($currentRow = 2;$currentRow <= $allRow;$currentRow++){ /**从第A列开始输出*/ $col = array(); for($currentColumn= 'A';$currentColumn<= $allColumn; $currentColumn++){ $val = $currentSheet->getCellByColumnAndRow(ord($currentColumn) - 65,$currentRow)->getValue();/**ord()将字符转为十进制数*/ array_push($col,$val); } array_push($row,$col); } foreach($row as $key=>$value){ $row[$key][1] = '\''.$value[1].'\''; } foreach($row as $key=>$value){ $row[$key] = implode(",",$value); } $row = implode("),(",$row); $row = '('.$row.')'; $res = $cgsdiseasesinterface->insertDiseasesInformation($row);//该函数将数据插入到数据库中 if($res){ echo json_encode(['code' => CODE_SUCCESS, 'result' => '批量导入成功']); }else{ echo json_encode(['code' => CODE_ERROR, 'result' => '批量导入失败']); } }
这里有一个点须要主要的是由于$currentRow是从2开始的,因此第一行应该是对应的字段的解释,从第二行开始才是咱们所须要的数据,你们能够根据本身程序的实际须要进行更改。excel
这里我是将因此的数据都作了字符串的拼接,好处是在数据库是短链接时,能够只须要链接一次数据库,这样节约了时间和系统资源,若是数据库的设置是长链接,则用字符串拼接的优点不明显。固然,你们其实也能够用循环来实现将数据插入到表中,这种方式的优点是不须要对数据进行复杂的拼接处理,但坏处就是我刚才说的,增长了运行的时间,并相对来讲更消耗系统资源。code