thinkphp导入Excel去重
/*导入Excel有两种可能
1.导入的Excel本身就有重复项
2.导入的Excel数据和已有的数据库信息有重复项
解决思路:
1.先不管是否有重复项,直接导入到一张临时表,然后经过去重处理插入到一张新表(比较麻烦,数据处理过程多)
2.先获取Excel的数据,然后循环读取数据,在循环里把每条数据和数据库里的数据进行对比,如果没有就插入,
如果有就更新这条数据(导入过程中就处理数据,过程简单)
*/
//导入Excel
public function importExecl()
{
import('ORG.Net.UploadFile');
$upload=new UploadFile();// 实例化上传类
$upload->allowExts=array('xls','xlsx');// 设置附件上传类型
$upload->savePath='./Uploads/';// 设置附件上传目录
$upload->saveRule=date('Ymdhis');//设置附件上传名称
if(!$upload->upload()){// 上传错误提示错误信息
$this->error($upload->getErrorMsg());
}else{//上传成功 获取上传文件信息
$info=$upload->getUploadFileInfo();
}
$filetmpname='./Uploads/'.$info[0]['savename'];//获取上传的Excel的文件名
import('ORG.Util.PHPExcel');
$objPHPExcel = PHPExcel_IOFactory::load($filetmpname);
$sheetCount = $objPHPExcel->getSheetCount();
$excelarr=array();
$excelarr= $objPHPExcel->getSheet(0)->toArray();
$line_list=M("line_list");
for($i=1;$i<=count($excelarr);$i++) {
$data['type'] = $excelarr[$i][0];
$data['account_name'] = $excelarr[$i]1;
$data['clerk'] = $excelarr[$i][2];
$data['checkin_time'] = $excelarr[$i][3];
$data['client_name'] = $excelarr[$i][4];
$data['project'] = $excelarr[$i][5];
$data['capacity'] = $excelarr[$i][6];
$data['line_number'] = $excelarr[$i][7];
$data['monthly_amount'] = $excelarr[$i][8];
$data['open_time'] = $excelarr[$i][9];
$data['billing_time'] = $excelarr[$i][10];
$data['down_time'] = $excelarr[$i][11];
$data['invoice'] = $excelarr[$i][12];
$data['status'] = $excelarr[$i][13];
$data['remarks'] = $excelarr[$i][14];//上面的$date是读取Excel的每条数据
$result = $line_list->where ("line_number='{$data['line_number']}'")->field('id,line_number')->find();
if (empty($result['line_number'])) {
$rs = $line_list->add ($data);//如果线路编号为空就添加这条数据
}else{
$rs=$line_list->where("id='{$result['id']}'")->save($data);//如果已有这条数据就更新这条数据
}
}
if($rs){
unlink($filetmpname);//这里是删除上传后的文件
$this->success("上传成功","__URL__/index");
}else{
$this->error("上传失败","__URL__/index");
}
}
北京星诚视野网络科技有限公司 © 2008-2022 京ICP备09003513-1号 技术支持:北京网站建设公司 北京APP开发