/*** excel导入*/public function excelimport(){$eid = I('get.eid','','htmlspecialchars');//判断是否选择了要上传的表格if (empty($_FILES['file'])) {$this->ajaxReturn(['code' => 3010,'msg' => '您未选择表格']);}//获取表格的大小,限制上传表格的大小5M$file_size = $_FILES['file']['size'];if ($file_size>5*1024*1024) {$this->ajaxReturn(['code' => 3010,'msg' => '导入失败,上传的表格不能超过5M的大小']);}//限制上传表格类型$file_type = $_FILES['file']['type'];//application/vnd.ms-excel  为xls文件类型if ($file_type!='application/vnd.ms-excel') {$this->ajaxReturn(['code' => 3010,'msg' => '导入失败,只能上传excel2003的xls格式!']);}if(is_uploaded_file($_FILES['file']['tmp_name'])){Vendor('phpexcel.PHPExcel');Vendor('phpexcel.PHPExcel.IOFactory');Vendor('phpexcel.PHPExcel.Reader.Excel5');//以上三步加载phpExcel的类$objReader = \PHPExcel_IOFactory::createReader('Excel5');//use excel2007 for 2007 format//接收存在缓存中的excel表格$filename = $_FILES['file']['tmp_name'];$objPHPExcel = $objReader->load($filename); //$filename可以是上传的表格,或者是指定的表格$sheet = $objPHPExcel->getSheet(0);$highestRow = $sheet->getHighestRow(); // 取得总行数//循环读取excel表格,读取一条,插入一条for($j=2;$j<=$highestRow;$j++){$a = $objPHPExcel->getActiveSheet()->getCell("A".$j)->getValue();//获取me_id的值M('','',DBConfig::$MYSQL_MAMI_JS_MASTER)->table('js_enterprisesales_medicinalprice')->add(['e_id' => $eid,'me_id' => $a,'medicinal_price' => 0]);}$this->ajaxReturn(['code' => 1,'msg' => '导入成功!']);}}/*** 批量导入数据*/public function medicineImport(){$tmp_name = $_FILES['file']['tmp_name'];$exts = explode('.',$_FILES['file']['name']);$url = APP_PATH."Runtime/Cache/".time().rand(10000,99999).'.'.$exts[1];if(move_uploaded_file($tmp_name,$url) ){$result = $this->dataImport($url,$exts[1]);if($result['code'] == -1){$this->ajaxError($result['msg']);}unlink($url);$this->ajaxSuccess('导入成功');}else{$this->ajaxError('上传失败');}}private function dataImport($filename, $exts = 'xls'){set_time_limit(0);ini_set('memory_limit','1024M');ini_set('max_execution_time',0);//导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入vendor('PHPExcel.PHPExcel');//创建PHPExcel对象,注意,不能少了$PHPExcel = new \PHPExcel();if ($exts == 'xls') {Vendor('phpexcel.PHPExcel.Reader.Excel5');$PHPReader = new \PHPExcel_Reader_Excel5();} else if ($exts == 'xlsx') {Vendor('phpexcel.PHPExcel.Reader.Excel2007');$PHPReader = new \PHPExcel_Reader_Excel2007();}//载入文件$PHPExcel = $PHPReader->load($filename);//获取表中的第一个工作表,如果要获取第二个,把0改为1,依次类推$currentSheet = $PHPExcel->getSheet(0);//获取总列数$allColumn = $currentSheet->getHighestColumn();//获取总行数$allRow = $currentSheet->getHighestRow();$Arr = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ'];$totalNum = array_search($allColumn,$Arr);//循环获取表中的数据,$currentRow表示当前行,从哪行开始读取数据,索引值从0开始for ($currentRow = 2; $currentRow <= $allRow; $currentRow++) {//从哪列开始,A表示第一列for ($currentColumn = 0; $currentColumn <= $totalNum; $currentColumn++) {//数据坐标$address = $Arr[$currentColumn] . $currentRow;//读取到的数据,保存到数组$data中$cell = (string)$currentSheet->getCell($address)->getValue();$data[$currentRow - 1][$Arr[$currentColumn]] = $cell;}}//验证表格中数据的完整性与格式的准确性$message = $this->checkExcelData($data);if($message['code'] == -1){return $message;}//写入数据库操作//$res = $this->insertData($data);}/*** 验证表格中数据的完整性与准确性* @param $data* @return mixed*/private function checkExcelData($data){$message['code'] = 0;$message['msg'] = "失败";//验证数据规则if(!empty($data)){foreach($data as $mk=>$mv){//验证商品名称,长度不能超过50个长度if(iconv_strlen($mv['A'],"UTF-8") >49){$message['code'] = -1;$message['msg'] = $mv['C']."的商品名称不能超过50个长度";break;}//验证拼音缩写长度,不能超过50个长度if(iconv_strlen($mv['B'],"UTF-8") > 49){$message['code'] = -1;$message['msg'] = $mv['C']."药品的商品名首字母缩写不能超过50个长度";break;}//验证药品通用名不能为空if(empty($mv['C'])){$message['code'] = -1;$message['msg'] = $mv['C']."药品的通用名不能为空";break;}//验证药品通用名长度,不能超过50个长度if(iconv_strlen($mv['C'],"UTF-8") > 49){$message['code'] = -1;$message['msg'] = $mv['C']."药品的通用名不能超过50个长度";break;}//验证药品通用名首字母缩写长度,不能超过50个长度if(iconv_strlen($mv['D'],"UTF-8") > 49){$message['code'] = -1;$message['msg'] = $mv['C']."药品的通用名首字母缩写不能超过50个长度";break;}//验证药品处方完整度if(empty($mv['E'])){$message['code'] = -1;$message['msg'] = $mv['C']."药品的处方信息不完整";break;}//验证药品类别长度if(iconv_strlen($mv['F'],"UTF-8") > 49){$message['code'] = -1;$message['msg'] = $mv['C']."药品的类别不能超过50个长度";break;}//验证药品性状长度,不能超过50个长度if(iconv_strlen($mv['H'],"UTF-8") > 49){$message['code'] = -1;$message['msg'] = $mv['C']."药品的性状不能超过50个长度";break;}//验证药品性状长度,不能超过50个长度if(iconv_strlen($mv['N'],"UTF-8") > 49){$message['code'] = -1;$message['msg'] = $mv['C']."的药品企业长度不能超过50个长度";break;}//验证药品企业简称,不能超过50个长度if(iconv_strlen($mv['O'],"UTF-8") > 49){$message['code'] = -1;$message['msg'] = $mv['C']."药品的企业简称不能超过50个长度";break;}//验证药品参考价格必须是数字类型,且不能为空if(!preg_match('/^[1-9]\d*(.\d{1,2})?$|^0(.\d{1,2})?$/', $mv['P'])){$message['code'] = -1;$message['msg'] = $mv['C']."药品的参考价格必须是数字格式";break;}//验证药品的参考活动价格,长度不能超过50个长度if(!empty($mv['Q']) && !preg_match('/^[1-9]\d*(.\d{1,2})?$|^0(.\d{1,2})?$/', $mv['Q']) ){$message['code'] = -1;$message['msg'] = $mv['C']."药品的参考活动价格必须是数字格式";break;}//验证药品的批准文号,长度不能超过50个长度if(iconv_strlen($mv['R'],"UTF-8") > 49){$message['code'] = -1;$message['msg'] = $mv['C']."药品的批准文号不能超过50个长度";break;}//验证药品条形码长度,长度不能超过50个长度if(iconv_strlen($mv['S'],"UTF-8") > 49){$message['code'] = -1;$message['msg'] = $mv['C']."药品的条形码不能超过50个长度";break;}//验证药品推荐用药天数,必须是数字格式if(!empty($mv['U']) && !preg_match('/^[1-9]\d*?$/', $mv['U'])){$message['code'] = -1;$message['msg'] = $mv['C']."药品的用药天数必须为数字格式";break;}}}else{$message['code'] = -1;$message['msg'] = "表格格式或者数据有问题,请检查表格";}return $message;}

1、在在验证字符串长度的时候,一开始使用的strlen进行计算的,后来发现所用到的都是中文字符串;所以利用icon_strlen()方法进行统计中文字符串的长度;并使用参考价格格式进行验证;

2、整个步骤的流程就是先将excel中的表格数据全部取出来,放入一个数组里面,然后将这个数据里面的数据进行格式验证;简化的话,可以在去除数组的时候,就可以验证数据的准确性;这样可以减少很大的一个循环!这个留着后面再优化!

3、将数据的信息取出来以后,然后遍历循环,一个个字段进行数据验证,这个验证是根据后台服务器字段进行规则验证的;

4、最后将数组的信息循环插入遍历数组;

转载于:https://www.cnblogs.com/wzlol/p/10413095.html

excel批量导入规则验证相关推荐

  1. excel批量导入数据

    这个功能也是我以前项目中经常用到的,感觉很实用,必须拿来分享下: excel进行批量导入数据,结合struts2+ajax 导入的视图:batchAdd.ftl(视图无关紧要的,可以换成其他任何视图, ...

  2. excel宏转txt替换强制换行符_三个步骤学会用EXCEL批量导入anki题库

    Anki真的是个好用到不想推荐给朋友的软件,本人最近准备刷个新题库,找了一上午找不到原来教我EXCEL导入anki的网页,为了防止我自己过段时间又忘了应该怎么导入,我写了这个教程,写都写了,就顺手发出 ...

  3. 订餐系统之Excel批量导入

    批量导入现在基本已经成为各类系统的标配了,当前,我们订餐系统也不例外,什么商家呀.商品呀.优惠码之类的,都少不了.毕竟嘛,对非开发人员来说,看到Excel肯定比看到很多管理系统还是要亲切很多的.这里, ...

  4. php批量添加excel数据库表,php 把excel批量导入到数据库代码

    php 把excel批量导入到数据库代码 我们是利用了ExcelFileParser这个扩展来处理的哦, Excel数据获取演示 Excel数据获取演示 /** * CopyRight (c) 200 ...

  5. 【转帖】Java实现Excel批量导入数据

    这篇文章主要为大家详细介绍了Java实现Excel批量导入数据,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 Excel的批量导入是很常见的功能,这里采用Jxl实现,数 ...

  6. SpringMVC框架通过Excel批量导入数据

    文章目录 SpringMVC框架通过Excel批量导入数据 1.导入需要的jar包 2.配置文件 3.创建Java对象类 4.解析Excel表格数据的工具类 5.前端请求 6.Controller处理 ...

  7. Excel批量导入图片并在右侧单元格备注名称

    如下图所示,小编要分享的是,Excel批量导入图片并在右侧单元格备注名称的操作 (方方格子插件) 1.先看动图演示吧 2.选中A2第一个需要添加图片的单元格 3.然后选择方方格子的图片工具 4.那我们 ...

  8. Spring Boot 实现excel 批量导入数据(模板下载 ->数据导入->导入失败表格下载)

    批量导入数据以用户为例[不贴数据库操作代码,都是简单的插入和查询操作自己写] 1 导入依赖 2 批量导入模板下载 3 批量导入数据 准备工作 实现代码 测试接口 4 下载导入失败表格 5 实体类 6 ...

  9. Springboot Excel批量导入数据

    POI处理Excel <!-- poi处理excel --><dependency><groupId>org.apache.poi</groupId>& ...

最新文章

  1. 如果再写for循环,我就锤自己!
  2. iOS10 UI教程视图的中心位置
  3. 电子书网站推荐(收藏系列)
  4. easyScholar——文献数据库插件
  5. linux环境配置与使用合集
  6. 【技术文档】Jeecg-P3开发环境搭建入门(java插件开发框架)
  7. web端功能自动化定位元素(暂不更新)
  8. 景观指数分析 - 初识FragStats4.2
  9. Identifying Encrypted Malware Traffic with Contextual Flow Data
  10. linux端口健康检查,linux – Systemd http健康检查
  11. HP Gen8 MicroServer win7 系统安装手册(usb)
  12. YBT高效进阶3.4.2 洛谷P2341 POJ2186受欢迎的牛Popular Cows
  13. 马甲包上架经验总结(珍贵)
  14. 匿名吐槽有风险,脉脉又被告了
  15. SFC游戏<战区88>,买100W战斗机的测试
  16. zend及Slim 漏洞合集
  17. 阿里,昨天被主管告知3.25了,感觉自己好失败...
  18. 头部主播批量被封,直播电商还有未来吗?
  19. 洛咕 P2465 [SDOI2008]山贼集团
  20. stack overflow常见解决方法

热门文章

  1. “十年磨一剑”酷客多智慧连锁版小程序重磅来袭
  2. 学习心得——析构函数
  3. java 不定长参数_简单介绍Java的不定长度参数
  4. LGPL 与GPL的区别
  5. 实现垂直居中的几种方式
  6. jmeter性能测试使用梯度测试的方法
  7. 圆桌对话 | 详解2022全域营销的应用趋势和机会
  8. 金蝶K3案例教程物料需求计划后台配置
  9. kubernetes的Kubectl命令的使用
  10. Java策略模式(Strategy)