如何实现批量上传----------Java解析excel
一、引子
在web平台开发中仅经常会遇到一下需要批量的问题,通常得做法是使用excel上传,下面主要介绍一下在实际开发中到的实例。
二、准备工作
1、需要导入的jar包(主要用到poi包)
(1)poi-3.14.jar
(2)poi-ooxml-3.14.jar
(3)poi-ooxml-schemas-3.14.jar
(4)xmlbeans-2.6.0.jar
2、主要的API
(1)import org.apache.poi.ss.usermodel.Workbook,对应Excel文档;
(2)import org.apache.poi.hssf.usermodel.HSSFWorkbook,对应xls格式的Excel文档;
(3)import org.apache.poi.xssf.usermodel.XSSFWorkbook,对应xlsx格式的Excel文档;
(4)import org.apache.poi.ss.usermodel.Sheet,对应Excel文档中的一个sheet;
(5)import org.apache.poi.ss.usermodel.Row,对应一个sheet中的一行;
(6)import org.apache.poi.ss.usermodel.Cell,对应一个单元格。
三、上代码
excel格式:
代码:
1 package text; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.InputStream; 6 import java.util.ArrayList; 7 import java.util.HashMap; 8 import java.util.LinkedHashMap; 9 import java.util.List; 10 import java.util.Map; 11 12 import org.apache.poi.hssf.usermodel.HSSFWorkbook; 13 import org.apache.poi.ss.usermodel.Cell; 14 import org.apache.poi.ss.usermodel.Row; 15 import org.apache.poi.ss.usermodel.Sheet; 16 import org.apache.poi.ss.usermodel.Workbook; 17 import org.apache.poi.xssf.usermodel.XSSFWorkbook; 18 19 public class ExcelSolution { 20 public static void main(String[] args) { 21 String filePath = "E:\\XXXXupload\\地点.xlsx"; 22 List<Map<String,String>> resultList =ExcelUtil(filePath); 23 for (Map map : resultList) { 24 System.out.println(map); 25 } 26 } 27 public static List<Map<String,String>> ExcelUtil(String filePath){ 28 ArrayList<Map<String,String>> reList = new ArrayList<Map<String,String>>(); 29 File file = new File(filePath); 30 Workbook wb=null; 31 if(file.exists() && file.isFile()){ 32 try { 33 if(filePath.toLowerCase().endsWith(".xls")){ 34 wb = new HSSFWorkbook(new FileInputStream(file)); 35 }else if (filePath.toLowerCase().endsWith(".xlsx")) { 36 wb = new XSSFWorkbook(new FileInputStream(file)); 37 } 38 Sheet sheet =wb.getSheetAt(0); 39 int rowNum = sheet.getPhysicalNumberOfRows(); //获取行数 40 if (rowNum >1) { 41 for (int i = 1; i < rowNum; i++) { 42 Map<String, String> map = new HashMap<String, String>(); 43 Row row = sheet.getRow(i); 44 if (row!=null) { 45 // 第一列:省份 46 Cell cell0 = sheet.getRow(i).getCell(0); 47 if(cell0 != null && !"".equals(cell0)){ 48 String Name =(String) cell0.getStringCellValue().trim(); 49 map.put("name", Name); 50 } 51 Cell cell1 = sheet.getRow(i).getCell(1); 52 if(cell1 != null && !"".equals(cell1)){ 53 String provinceName = (String)cell1.getStringCellValue().trim(); 54 map.put("provinceName", provinceName); 55 } 56 Cell cell2 = sheet.getRow(i).getCell(2); 57 if(cell0 != null && !"".equals(cell2)){ 58 String cityName = (String)cell2.getStringCellValue().trim(); 59 map.put("cityname", cityName); 60 } 61 62 reList.add(map); 63 } 64 65 } 66 67 } 68 } catch (Exception e) { 69 System.out.println("************ 解析EXCEL失败 ************"); 70 e.printStackTrace(); 71 return null; 72 } 73 } 74 return reList; 75 } 76 }
输出:
五、遇到问题及解决
1、报错:
原因: 当导包不一致时会出现问题。
2.代码错误
1 int rowNum = sheet.getPhysicalNumberOfRows(); //获取行数 2 if (rowNum >1) { 3 Map<String, String> map = new HashMap<String, String>();//出现在错误的行,一个new,存储地址是一样的 4 for (int i = 1; i < rowNum; i++) { 5 Row row = sheet.getRow(i); 6 if (row!=null) { 7 // 第一列:省份 8 Cell cell0 = sheet.getRow(i).getCell(0); 9 if(cell0 != null && !"".equals(cell0)){ 10 String Name =(String) cell0.getStringCellValue().trim(); 11 map.put("name", Name); 12 } 13 14 reList.add(map); 15 } 16 17 } 18 19 }
错误结果: