1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > java使用POI实现excel文件的读取 兼容后缀名xls和xlsx

java使用POI实现excel文件的读取 兼容后缀名xls和xlsx

时间:2018-11-19 22:09:20

相关推荐

java使用POI实现excel文件的读取 兼容后缀名xls和xlsx

首先,引入所需的jar包:

如果是maven管理项目的jar包,只需在pom.xml中加上:

[html]view plaincopy<!--/artifact/org.apache.poi/poi--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.14</version></dependency><!--/artifact/org.apache.poi/poi-ooxml--><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.14</version></dependency>

POIUtil工具类的代码:

[java]view .util;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.io.InputStream;importjava.util.ArrayList;importjava.util.List;importorg.apache.log4j.Logger;importorg.apache.poi.hssf.usermodel.HSSFWorkbook;importorg.apache.poi.ss.usermodel.Cell;importorg.apache.poi.ss.usermodel.Row;importorg.apache.poi.ss.usermodel.Sheet;importorg.apache.poi.ss.usermodel.Workbook;importorg.apache.poi.xssf.usermodel.XSSFWorkbook;importorg.springframework.web.multipart.MultipartFile;/***excel读写工具类*@authorsun.kai*8月21日*/publicclassPOIUtil{privatestaticLoggerlogger=Logger.getLogger(POIUtil.class);privatefinalstaticStringxls="xls";privatefinalstaticStringxlsx="xlsx";/***读入excel文件,解析后返回*@paramfile*@throwsIOException*/publicstaticList<String[]>readExcel(MultipartFilefile)throwsIOException{//检查文件checkFile(file);//获得Workbook工作薄对象Workbookworkbook=getWorkBook(file);//创建返回对象,把每行中的值作为一个数组,所有行作为一个集合返回List<String[]>list=newArrayList<String[]>();if(workbook!=null){for(intsheetNum=0;sheetNum<workbook.getNumberOfSheets();sheetNum++){//获得当前sheet工作表Sheetsheet=workbook.getSheetAt(sheetNum);if(sheet==null){continue;}//获得当前sheet的开始行intfirstRowNum=sheet.getFirstRowNum();//获得当前sheet的结束行intlastRowNum=sheet.getLastRowNum();//循环除了第一行的所有行for(introwNum=firstRowNum+1;rowNum<=lastRowNum;rowNum++){//获得当前行Rowrow=sheet.getRow(rowNum);if(row==null){continue;}//获得当前行的开始列intfirstCellNum=row.getFirstCellNum();//获得当前行的列数intlastCellNum=row.getPhysicalNumberOfCells();String[]cells=newString[row.getPhysicalNumberOfCells()];//循环当前行for(intcellNum=firstCellNum;cellNum<lastCellNum;cellNum++){Cellcell=row.getCell(cellNum);cells[cellNum]=getCellValue(cell);}list.add(cells);}}workbook.close();}returnlist;}publicstaticvoidcheckFile(MultipartFilefile)throwsIOException{//判断文件是否存在if(null==file){logger.error("文件不存在!");thrownewFileNotFoundException("文件不存在!");}//获得文件名StringfileName=file.getOriginalFilename();//判断文件是否是excel文件if(!fileName.endsWith(xls)&&!fileName.endsWith(xlsx)){logger.error(fileName+"不是excel文件");thrownewIOException(fileName+"不是excel文件");}}publicstaticWorkbookgetWorkBook(MultipartFilefile){//获得文件名StringfileName=file.getOriginalFilename();//创建Workbook工作薄对象,表示整个excelWorkbookworkbook=null;try{//获取excel文件的io流InputStreamis=file.getInputStream();//根据文件后缀名不同(xls和xlsx)获得不同的Workbook实现类对象if(fileName.endsWith(xls)){//workbook=newHSSFWorkbook(is);}elseif(fileName.endsWith(xlsx)){//workbook=newXSSFWorkbook(is);}}catch(IOExceptione){logger.info(e.getMessage());}returnworkbook;}publicstaticStringgetCellValue(Cellcell){StringcellValue="";if(cell==null){returncellValue;}//把数字当成String来读,避免出现1读成1.0的情况if(cell.getCellType()==Cell.CELL_TYPE_NUMERIC){cell.setCellType(Cell.CELL_TYPE_STRING);}//判断数据的类型switch(cell.getCellType()){caseCell.CELL_TYPE_NUMERIC://数字cellValue=String.valueOf(cell.getNumericCellValue());break;caseCell.CELL_TYPE_STRING://字符串cellValue=String.valueOf(cell.getStringCellValue());break;caseCell.CELL_TYPE_BOOLEAN://BooleancellValue=String.valueOf(cell.getBooleanCellValue());break;caseCell.CELL_TYPE_FORMULA://公式cellValue=String.valueOf(cell.getCellFormula());break;caseCell.CELL_TYPE_BLANK://空值cellValue="";break;caseCell.CELL_TYPE_ERROR://故障cellValue="非法字符";break;default:cellValue="未知类型";break;}returncellValue;}}

POIUtil.readExcel方法读取excel文件后,把一行中的值按先后顺序组成一个数组,所有的行作为一个集合返回。我们可以在代码中循环这个集合,把数组赋值到实体类对象中。

我在前台用form表单提交file文件,因为用的SpringMVC框架,后台用MultipartFile接收,代码如下:

[java]view plaincopy/***读取excel文件中的用户信息,保存在数据库中*@paramexcelFile*/@RequestMapping("/readExcel")publicvoidreadExcel(@RequestParam(value="excelFile")MultipartFileexcelFile,HttpServletRequestreq,HttpServletResponseresp){Map<String,Object>param=newHashMap<String,Object>();List<User>allUsers=newArrayList<User>();try{List<String[]>userList=POIUtil.readExcel(excelFile);for(inti=0;i<userList.size();i++){String[]users=userList.get(i);Useruser=newUser();user.setUserName(users[0]);user.setPassword(users[1]);user.setAge(Integer.parseInt(users[2]));allUsers.add(user);}}catch(IOExceptione){logger.info("读取excel文件失败",e);}param.put("allUsers",allUsers);this.userService.insertUsers(param);}

调用的service层方法就不贴代码了,下面就是往数据库插入数据了。

excel文件内容:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。