导入Excel文件,首先需要创建一个bean类,对应Excel文件的数据头,然后在maven的 导入以下包
<!-- 导入导出excel2003和2007使用的jar包 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.14</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.14</version> </dependency>再创建一个工具类
package com.ecp.oten.until; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.InputStream; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; /** * Excel文件获取 */ public class ImportExcelUtil { private final static String excel2003L =".xls"; //2003- 版本的excel private final static String excel2007U =".xlsx"; //2007+ 版本的excel /** * 描述:获取IO流中的数据,组装成List<List<Object>>对象 * @param in,fileName * @return */ public List<List<Object>> getBankListByExcel(InputStream in, String fileName) throws Exception{ List<List<Object>> list = null; //创建Excel工作薄 Workbook work = this.getWorkbook(in,fileName); if(null == work){ throw new Exception("创建Excel工作薄为空!"); } Sheet sheet = null; Row row = null; Cell cell = null; list = new ArrayList<List<Object>>(); //遍历Excel中所有的sheet int s=work.getNumberOfSheets(); for (int i = 0; i < work.getNumberOfSheets(); i++) { sheet = work.getSheetAt(i); if(sheet==null){continue;} int s2=sheet.getLastRowNum(); //遍历当前sheet中的所有行 for (int j = sheet.getFirstRowNum(); j <= sheet.getLastRowNum(); j++) { row = sheet.getRow(j); if(row==null||row.getFirstCellNum()==j){continue;} //遍历所有的列 List<Object> li = new ArrayList<Object>(); for (int y = row.getFirstCellNum(); y < row.getLastCellNum(); y++) { cell = row.getCell(y); if(cell!=null){ li.add(this.getCellValue(cell)); }else{ li.add(null); } } list.add(li); } } return list; } /** * 描述:根据文件后缀,自适应上传文件的版本 * @param inStr,fileName * @return * @throws Exception */ public Workbook getWorkbook(InputStream inStr,String fileName) throws Exception{ Workbook wb = null; String fileType = fileName.substring(fileName.lastIndexOf(".")); if(excel2003L.equals(fileType)){ wb = new HSSFWorkbook(inStr); //2003- }else if(excel2007U.equals(fileType)){ wb = new XSSFWorkbook(inStr); //2007+ }else{ throw new Exception("解析的文件格式有误!"); } return wb; } /** * 描述:对表格中数值进行格式化 * @param cell * @return */ public Object getCellValue(Cell cell){ Object value = null; DecimalFormat df = new DecimalFormat("0"); //格式化number String字符 SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd"); //日期格式化 DecimalFormat df2 = new DecimalFormat("0.00"); //格式化数字 switch (cell.getCellType()) { case Cell.CELL_TYPE_STRING: value = cell.getRichStringCellValue().getString(); break; case Cell.CELL_TYPE_NUMERIC: if("General".equals(cell.getCellStyle().getDataFormatString())){ value = df.format(cell.getNumericCellValue()); }else if("m/d/yy".equals(cell.getCellStyle().getDataFormatString())){ value = sdf.format(cell.getDateCellValue()); }else{ value = df2.format(cell.getNumericCellValue()); } break; case Cell.CELL_TYPE_BOOLEAN: value = cell.getBooleanCellValue(); break; case Cell.CELL_TYPE_BLANK: value = ""; break; default: break; } return value; } }接下来给一个简单的例子
@RequestMapping(value = "/uploadyr.do") @ResponseBody public String uploadyr(HttpServletRequest request) { try { //创建一个通用的多部分解析器 CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext()); //判断request是否有文件需要上传 if(multipartResolver.isMultipart(request)){ //转换成多部分request MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request; InputStream in =null; List<MultipartFile> fileList = multiRequest.getFiles("file"); for (MultipartFile file : fileList) { if(file.isEmpty()){ //文件不存在! return "1"; }else { in = file.getInputStream(); Workbook workbook = new ImportExcelUtil().getWorkbook(in,file.getOriginalFilename()); in.close(); int rst = 0; Sheet sheetgmt = workbook.getSheetAt(0); for (int j = sheetgmt.getFirstRowNum()+1; j <= sheetgmt.getLastRowNum(); j++) { Row rowgmt = sheetgmt.getRow(j); Bdbasicscheck bdbasicscheck = new Bdbasicscheck(); bdbasicscheck.setHeight(this.getCellValue(rowgmt.getCell(1)) == null ? null : this.getCellValue(rowgmt.getCell(1)).toString()); bdbasicscheck.setWeight(this.getCellValue(rowgmt.getCell(2)) == null ? null : this.getCellValue(rowgmt.getCell(2)).toString()); bdbasicscheck.setBalancebeam(this.getCellValue(rowgmt.getCell(3)) == null ? null : this.getCellValue(rowgmt.getCell(3)).toString()); long temp = bdbasicscheckService.insert(bdbasicscheck); if(temp==0){ rst++; } } if(rst==0){ //全部导入成功 return "3"; }else { //导入完成,存在导入失败的数据 return "4"; } } } }else{ //没有文件需要上传! return "0"; } }catch (Exception e) { log.error(e.getMessage(), e); } return null; }