/*** 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. lisp语言cond和if套用_在'if'语句中设置多行条件的样式?
  2. PacBio Sequel概述
  3. 用无序列表做的网站公告牌(Billboard)
  4. 1.11 神经网络的权重初始化-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  5. 脑洞大开,如何生成 2018 年度代码报告
  6. Linux ubuntu终端sh、bash、shell的联系与区别
  7. _欧冠F组第1轮,拉齐奥3-1大胜多特蒙德
  8. Oracle EBS R12.1.1 应用克隆 - 3
  9. 华为表示年内没有推出搭载鸿蒙操作系统手机的计划;OpenStack或被抛弃?iPhone至少还要三年可苹果自研5G调制解调器……...
  10. RabbitMq学习笔记001---RabbitMq在Windows下安装配置
  11. 扫描二维码,下载Android安装包
  12. 对比学习(Contrastive Learning) (1)
  13. 单纯形法的代码实现与退化算例
  14. ywq_app后台分析
  15. 德赛西威2311a汽车导航仪不能更新屏保时间的解决方案
  16. 在线客服技术详解(理论)
  17. svchost.exe占网速的解决办法
  18. 立创eda学习笔记三十:布局传递
  19. 下班之后,回个毛线的工作消息!
  20. 工商银行总行营业厅管理软件设置视频教程

热门文章

  1. 在Android Studio运行的代码,不能在真机ViVO X21A进行调试的常见的错误和 解决的方法
  2. 信息安全等级保护等级划分
  3. Freeswitch Event Socket IVR外呼方案
  4. 素数(质数)判断的五种方法
  5. 中国第一届EOS柚子节|EOS王团长中国行北京见面会圆满收官
  6. Linux复制文件夹
  7. windows系统下的kms服务器_搭建 Windows KMS服务器
  8. 一年中的第几天与一周中的第几天
  9. 显卡3d渲染测试软件,测评荟 篇二:3D建模和3D渲染是吃CPU还是显卡?以及专业图形显卡和游戏显卡的区别...
  10. STM32的USART串口通信小程序