上一篇文章里面只是仅仅分享两个Thinkphp使用PHPExcel导入Excel数据到mysql的源码,实际上有了实例源码之后,把实例源码整合到自己的项目中是很简单的一件事情了,下面夏日博客再来分享一下自己使用 PHPExcel 批量导入 Excel 的数据到 Mysql 吧,只是分享的代码有点凌乱,因为我的项目涉及到了几个 Thinkphp 的表,要查询余额以及扣款,还有风险等级,风险比例的计算。
- function impUser(){
- if (!emptyempty($_FILES)) {
- import('ORG.Net.UploadFile');
- $config=array(
- 'allowExts'=>array('xlsx','xls'),
- 'savePath'=>'Uploads/',
- 'saveRule'=>'time',
- );
- $upload = new UploadFile($config);
- if (!$upload->upload()) {
- $this->error($upload->getErrorMsg());
- } else {
- $info = $upload->getUploadFileInfo();
- }
- vendor("PHPExcel.PHPExcel");
- $objPHPExcel = new PHPExcel();
- $file_name=$info[0]['savepath'].$info[0]['savename'];
- $objReader = PHPExcel_IOFactory::createReader('Excel5');
- $objPHPExcel = $objReader->load($file_name,$encode='utf-8');
- $sheet = $objPHPExcel->getSheet(0);
- $highestRow = $sheet->getHighestRow(); // 取得总行数
- $highestColumn = $sheet->getHighestColumn(); // 取得总列数
- if (!$_POST[xyb]){
- $objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);
- $objWriteHTML = new PHPExcel_Writer_HTML($objPHPExcel); //输出网页格式的对象
- $objWriteHTML->save("php://output");
- }else{
- for($i=2;$i<=$highestRow;$i++)
- {
- $data['realname'] = $objPHPExcel->getActiveSheet()->getCell("A".$i)->getValue(); //真实姓名
- $data['cardno'] = $objPHPExcel->getActiveSheet()->getCell("B".$i)->getValue(); //身份证号
- if ($objPHPExcel->getActiveSheet()->getCell("C".$i)->getValue() == '男'){
- $data['sex'] = 1;//性别
- }else{
- $data['sex'] = 2;
- }
- $data['age'] = $objPHPExcel->getActiveSheet()->getCell("D".$i)->getValue(); //年龄
- $data['phone'] = $objPHPExcel->getActiveSheet()->getCell("E".$i)->getValue(); //手机号
- $data['title'] = $objPHPExcel->getActiveSheet()->getCell("F".$i)->getValue(); //投资内容
- $data['nature'] = $objPHPExcel->getActiveSheet()->getCell("G".$i)->getValue(); //投资性质
- $data['money'] = $objPHPExcel->getActiveSheet()->getCell("H".$i)->getValue(); //投资额度
- $data['annualizedyield'] = $objPHPExcel->getActiveSheet()->getCell("I".$i)->getValue(); //年化收益率
- $data['begindate'] = $objPHPExcel->getActiveSheet()->getCell("J".$i)->getValue(); //开始时间
- $data['enddate'] = $objPHPExcel->getActiveSheet()->getCell("K".$i)->getValue(); //截止时间
- $data['approach'] = $objPHPExcel->getActiveSheet()->getCell("L".$i)->getValue(); //收益方式
- //$data['beneficiary'] = $objPHPExcel->getActiveSheet()->getCell("A".$i)->getValue(); //受益人
- $data['create_time'] = date("Y-m-d h:i:s", time()); //创建时间
- $data['tradingplatform'] = $_SESSION[C('COMPANY_AUTH_KEY')]; //交易平台
- if(M('p2p')->add($data)){ //如果添加成功发送短信
- $list_p2pid = M("p2p")->order('id desc')->find();//查询刚添加的数据
- //扣费开始
- $listc = M("company")->where("id=".$_SESSION[C('COMPANY_AUTH_KEY')])->find(); //企业名称,余额
- $amount = $listc[amount]; //余额
- //余额结束
- //投资天数
- $limitdate = (strtotime($data['enddate']) - strtotime($data['begindate']))/86400;
- //投资天数结束
- //查询ratio里面的等级天数
- $list = M("ratio")->where("gradeid=".$listc[gradeid])->order('id desc')->select();
- for($j=0;$j<count($list);$j++){
- if($limitdate>$list[$j]['upper'] and $limitdate<$list[$j]['lower']){
- $kq = $amount-$list[$j]['proportion']*$data['money']/100; //扣除剩下的钱
- if ($kq>=0){
- M('company')->where("id=".$_SESSION[C('COMPANY_AUTH_KEY')])->setField('amount',$kq); //更新余额值
- if(M('p2p')->where("id=".$list_p2pid[id])->setField('status',1)){
- //发送短信开始
- //发送短信实例化
- Vendor('Sms.CCPRestSDK');
- //主帐号
- $accountSid= '11';
- //主帐号Token
- $accountToken= '22';
- //应用Id
- $appId='33';
- //请求地址,格式如下,不需要写https://
- $serverIP='app.cloopen.com';
- //请求端口
- $serverPort='8883';
- //REST版本号
- $softVersion='2013-12-26';
- $arr=array();
- $arr['0']=$list_p2pid['realname']; //姓名
- $arr['1']=$listc['nickname']; //投资平台名称
- $arr['2']="http://www.xiariboke.com/?m=p&i=".$list_p2pid[id]; //保单链接
- $mobile = $list_p2pid[phone];
- if($mobile){
- $rest = new REST($serverIP,$serverPort,$softVersion);
- $rest->setAccount($accountSid,$accountToken);
- $rest->setAppId($appId);
- $result = $rest->sendTemplateSMS($mobile,$arr,"106439");
- if($result == NULL ) {
- echo "result error!";
- break;
- }
- if($result->statusCode!=0) {
- echo $result->statusMsg . " 错误代码:".$result->statusCode;
- //TODO 添加错误处理逻辑
- }else{
- //return 1;
- }
- }
- //发送结束发送
- }
- }
- }
- }//扣费结束
- }
- unset($data);
- }
- $highestRow = $highestRow - 1;
- $this->success('成功导入'.$highestRow.'条数据',U('Baodan/index'));
- }
- }else
- {
- $this->error("请选择上传的文件");
- }
- //$this->active=52;
- //$this->display();
- }
实际上真正批量导入的代码并不多,批量导入只是加了一个 for 的循环语句,我这里有点小小的复杂,是因为每循环一次,都要进行一次数据库的计算操作,并且要给每一个用户手机发送一条短信提示的信息,如果你不需要的话可以全部删除掉,至于 Thinkphp 的数组之类的就很好理解了。