Java的poi技术遍历Excel时进行空Cell,空row,判断
- /**
- * 导入信息
- */
- @Override
- public List<Object> add(HttpServletRequest request) {
- // TODO Auto-generated method stub
- List<Object> num=new ArrayList<Object>();
- MultipartHttpServletRequest multipartRequest =(MultipartHttpServletRequest) request;
- CommonsMultipartFile file = (CommonsMultipartFile)multipartRequest.getFile("zlUpload");
- if(file!=null){
- try {
- num = save(file.getInputStream());
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- returnnum;
- }
- /**
- * 保存上传的Excel信息
- */
- private List<Object> save(InputStream inputStream) throwsIOException {
- // TODO Auto-generated method stub
- List<Object> error_num = new ArrayList<Object>();
- List<Object> temp =(List<Object>)readXls(inputStream,error_num);
- System.out.println(temp.get(0).getClass().getName());
- if(temp.get(0).getClass().getName().equals("org.apache.poi.hssf.usermodel.HSSFCell")){
- return error_num;
- }else{
- TStudentNo student = null;
- List<TStudentNo> studentList = newArrayList<TStudentNo>();
- for(int i=0;i<temp.size();i++){
- student = (TStudentNo)temp.get(i);
- studentList.add(student);
- }
- try {
- //在插入数据前进行判断,看数据库中是否有不允许重复的字段出现,以打断保存进度
- int repeat = 0;
- for(int j = 0;j<studentList.size();j++){
- TStudentNo Studenttemp =studentMapper.findByStudentNo(studentList.get(j).getStudent_no());
- //如果查到了,重复数加一,然后跳过不保存
- if(Studenttemp!=null){
- repeat++;
- }
- }
- if(repeat==0){
- for(int z=0;z<studentList.size();z++){
- studentMapper.saveStudent(studentList.get(z));
- }
- }else{
- error_num.add("数据库中有相同的数据,请检查学号等不允许重复的部分!");
- return error_num;
- }
- } catch (Exception e) {
- //判断Excel中是否有重复数据,如果有重复跳过保存异常
- error_num.add("数据库中有相同的数据,请检查学号等不允许重复的部分!");
- return error_num;
- }
- return temp;
- }
- }
- /**
- * 逐行遍历其Excel
- */
- private Object readXls(InputStream inputStream,List<Object>error_num) throws IOException {
- InputStream is = new BufferedInputStream(inputStream);
- HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
- TStudentNo student = null;
- List<TStudentNo> list = new ArrayList<TStudentNo>();
- //循环工作表Sheet
- for(int numSheet =0;numSheet<hssfWorkbook.getNumberOfSheets();numSheet++){
- HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
- if(hssfSheet == null){
- continue;
- }
- for(int rowNum =2;rowNum<=hssfSheet.getLastRowNum();rowNum++){
- System.out.println(hssfSheet.getLastRowNum());
- HSSFRow hssfRow = hssfSheet.getRow(rowNum);
- //检查每行的空格数,如果小于4证明有一个或多个空格,但不是整行
- if(CheckRowNull(hssfRow)<4){
- student = new TStudentNo();
- HSSFCell name = hssfRow.getCell(0);
- HSSFCell student_no = hssfRow.getCell(1);
- HSSFCell phone = hssfRow.getCell(2);
- HSSFCell class_no = hssfRow.getCell(3);
- HSSFCell subject_category = hssfRow.getCell(4);
- List<HSSFCell> temp = new ArrayList<HSSFCell>();
- temp.add(0, name);
- temp.add(1, student_no);
- temp.add(2, phone);
- temp.add(3, class_no);
- temp.add(4, subject_category);
- int temp1 = 0;//用于跳出双层for循环
- for(int i=0;i<5;i++){
- //为记录前台进行提示某行某列出错
- temp1 = CheckRowError(temp.get(i),error_num,rowNum,i);
- if(temp1==-1){
- break;
- }
- }
- if(temp1==-1){
- return temp;
- }
- student.setName(getCellValue(name));
- student.setPhone(getCellValue(phone));
- student.setStudent_no(getCellValue(student_no));
- student.setClass_no(getCellValue(class_no));
- student.setSubject_category(Integer.parseInt(getCellValue(subject_category)));
- list.add(student);
- }else{
- continue;
- }
- }
- }
- return list;
- }
- /**
- * 对Excel的各个单元格的格式进行判断并转换
- */
- private String getCellValue(HSSFCell cell) {
- String cellValue = "";
- DecimalFormat df = newDecimalFormat("#");
- switch (cell.getCellType()) {
- case HSSFCell.CELL_TYPE_STRING:
- cellValue =cell.getRichStringCellValue().getString().trim();
- break;
- case HSSFCell.CELL_TYPE_NUMERIC:
- cellValue =df.format(cell.getNumericCellValue()).toString();
- break;
- case HSSFCell.CELL_TYPE_BOOLEAN:
- cellValue =String.valueOf(cell.getBooleanCellValue()).trim();
- break;
- case HSSFCell.CELL_TYPE_FORMULA:
- cellValue =cell.getCellFormula();
- break;
- default:
- cellValue = "";
- }
- return cellValue;
- }
- //判断某行某列有问题
- private int CheckRowError(HSSFCell cell,List<Object>error_num,int rowNum,int cell_num){
- //判断各个单元格是否为空
- if(cell==null||cell.equals("")||cell.getCellType() ==HSSFCell.CELL_TYPE_BLANK){
- error_num.add("出错啦!请检查第"+(rowNum+1)+"行第"+(cell_num+1)+"列。"+"如果您在该行没有数据,建议您选择删除该行,重试!");
- return -1;
- }
- return 0;
- }
- //判断行为空
- private int CheckRowNull(HSSFRow hssfRow){
- int num = 0;
- Iterator<Cell> cellItr =hssfRow.iterator();
- while(cellItr.hasNext()){
- Cell c =cellItr.next();
- if(c.getCellType() ==HSSFCell.CELL_TYPE_BLANK){
- num++;
- }
- }
- return num;
- }
Java的poi技术遍历Excel时进行空Cell,空row,判断的更多相关文章
- java的poi技术写Excel的Sheet
在这之前写过关于java读,写Excel的blog如下: Excel转Html java的poi技术读,写Excel[2003-2007,2010] java的poi技术读取Excel[2003-20 ...
- java的poi技术读取Excel[2003-2007,2010]
这篇blog主要是讲述java中poi读取excel,而excel的版本包括:2003-2007和2010两个版本, 即excel的后缀名为:xls和xlsx. 读取excel和MySQL相关: ja ...
- java的poi技术读取Excel数据
这篇blog主要是讲述java中poi读取excel,而excel的版本包括:2003-2007和2010两个版本, 即excel的后缀名为:xls和xlsx. 读取excel和MySQL相关: ja ...
- java的poi技术读取Excel[2003-2007,2010]
这篇blog主要是讲述java中poi读取excel,而excel的版本包括:2003-2007和2010两个版本, 即excel的后缀名为:xls和xlsx. 读取excel和MySQL相关: ja ...
- java的poi技术读取Excel数据到MySQL
这篇blog是介绍java中的poi技术读取Excel数据,然后保存到MySQL数据中. 你也可以在 : java的poi技术读取和导入Excel了解到写入Excel的方法信息 使用JXL技术可以在 ...
- java的poi技术下载Excel模板上传Excel读取Excel中内容(SSM框架)
使用到的jar包 JSP: client.jsp <%@ page language="java" contentType="text/html; charset= ...
- java的poi技术读,写Excel[2003-2007,2010]
在上一篇blog:java的poi技术读取Excel[2003-2007,2010] 中介绍了关于java中的poi技术读取excel的相关操作 读取excel和MySQL相关: java的poi技术 ...
- java的poi技术读取和导入Excel实例
本篇文章主要介绍了java的poi技术读取和导入Excel实例,报表输出是Java应用开发中经常涉及的内容,有需要的可以了解一下. 报表输出是Java应用开发中经常涉及的内容,而一般的报表往往缺乏通用 ...
- Java利用POI导入导出Excel中的数据
首先谈一下今天发生的一件开心的事,本着一颗android的心我被分配到了PB组,身在曹营心在汉啊!好吧,今天要记录和分享的是Java利用POI导入导出Excel中的数据.下面POI包的下载地 ...
随机推荐
- BZOJ 4032: [HEOI2015]最短不公共子串(后缀自动机+记忆化搜索)
传送门 解题思路 首先需要预处理两个串\(nxt(i)(j)\)表示i位置之后最近的\(j\). 第一问直接对\(b\)建后缀自动机,枚举\(a\)的起点暴力匹配. 第二问枚举\(a\)的起点,\(b ...
- 探索Redis设计与实现10:Redis的事件驱动模型与命令执行过程
本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial ...
- System.IO.Path 文件名、路径、扩展名处理
string filePath =@"E:/Randy0528/中文目录/JustTest.rar"; 更改路径字符串的扩展名.System.IO.Path.ChangeExten ...
- Canal( 增量数据订阅与消费 )的理解及应用
canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB). 起源:早期,阿里巴巴B2B公司因为存 ...
- spring 数据库字段映射
当有复杂名称字段时: 在repository中写代码字段名 List<Grid> findByLocIsWithin(GeoJsonPolygon boundary); 可以添加field ...
- windows 配置msys2环境
msys2是一个在windows下模拟类unix的环境,之所以叫环境,是用为他提供了部分unix shell类似的功能,这个环境使你像在unix上使用shell一样.看到msys2你可能想到是不是还有 ...
- Win10 打开MSDTC
标签:log com http it sp src c bs io 1,Win+R 打开运行窗口,输入 dcomcnfg,打开组件服务窗口 2,在组件服务 catalo ...
- python作业/练习/实战:下载QQ群所有人的头像
步骤与提示:1.在腾讯群网页中进入任意一个群,获取相关信息,可以用postman是试一下,可以看到我们要的是mems里面的数据,需要获取到QQ号和群名片,如果没有群名片的话取昵称2.根据QQ号下载头像 ...
- log4j日志格式化
Apache log4j 提供了各种布局对象,每一个对象都可以根据各种布局格式记录数据.另外,也可以创建一个布局对象格式化测井数据中的特定应用的方法. 所有的布局对象 - Appender对象收到 L ...
- shell编程:函数的返回值
函数的返回值两种形式 return 0-255 0表示成功,1-255表示失败-------通常用于判断 echo 返回一个字符串------------通常用于返回一个执行的结果 return.sh ...