如何实现批量上传----------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 }

错误结果:

原文地址:https://www.cnblogs.com/xiaonantianmen/p/9685809.html