java的poi技术读取Excel数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java的poi技术读取Excel数据相关的知识,希望对你有一定的参考价值。

这篇blog主要是讲述java中poi读取excel,而excel的版本包括:2003-2007和2010两个版本, 即excel的后缀名为:xls和xlsx。

读取excel和mysql相关: java的poi技术读取Excel数据到MySQL 

你也可以在 : java的poi技术读取和导入Excel 了解到写入Excel的方法信息

使用JXL技术 : java的jxl技术导入Excel 

下面是本文的项目结构:

项目中所需要的jar文件:

所用的Excel数据(2003-2007,2010都是一样的数据

运行效果:

=================================================

源码部分:

=================================================

/Excel2010/src/com/b510/common/Common.java

复制代码
 1 /**
 2  * 
 3  */
 4 package com.b510.common;
 5 
 6 /**
 7  * @author Hongten
 8  * @created 2014-5-21
 9  */
10 public class Common {
11 
12     public static final String OFFICE_EXCEL_2003_POSTFIX = "xls";
13     public static final String OFFICE_EXCEL_2010_POSTFIX = "xlsx";
14 
15     public static final String EMPTY = "";
16     public static final String POINT = ".";
17     public static final String LIB_PATH = "lib";
18     public static final String STUDENT_INFO_XLS_PATH = LIB_PATH + "/student_info" + POINT + OFFICE_EXCEL_2003_POSTFIX;
19     public static final String STUDENT_INFO_XLSX_PATH = LIB_PATH + "/student_info" + POINT + OFFICE_EXCEL_2010_POSTFIX;
20     public static final String NOT_EXCEL_FILE = " : Not the Excel file!";
21     public static final String PROCESSING = "Processing...";
22 
23 }
复制代码

/Excel2010/src/com/b510/excel/ReadExcel.java

复制代码
  1 /**
  2  * 
  3  */
  4 package com.b510.excel;
  5 
  6 import java.io.FileInputStream;
  7 import java.io.IOException;
  8 import java.io.InputStream;
  9 import java.util.ArrayList;
 10 import java.util.List;
 11 
 12 import org.apache.poi.hssf.usermodel.HSSFCell;
 13 import org.apache.poi.hssf.usermodel.HSSFRow;
 14 import org.apache.poi.hssf.usermodel.HSSFSheet;
 15 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 16 import org.apache.poi.xssf.usermodel.XSSFCell;
 17 import org.apache.poi.xssf.usermodel.XSSFRow;
 18 import org.apache.poi.xssf.usermodel.XSSFSheet;
 19 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 20 
 21 import com.b510.common.Common;
 22 import com.b510.excel.util.Util;
 23 import com.b510.excel.vo.Student;
 24 
 25 /**
 26  * @author Hongten
 27  * @created 2014-5-20
 28  */
 29 public class ReadExcel {
 30     
 31     /**
 32      * read the Excel file
 33      * @param path the path of the Excel file
 34      * @return
 35      * @throws IOException
 36      */
 37     public List<Student> readExcel(String path) throws IOException {
 38         if (path == null || Common.EMPTY.equals(path)) {
 39             return null;
 40         } else {
 41             String postfix = Util.getPostfix(path);
 42             if (!Common.EMPTY.equals(postfix)) {
 43                 if (Common.OFFICE_EXCEL_2003_POSTFIX.equals(postfix)) {
 44                     return readXls(path);
 45                 } else if (Common.OFFICE_EXCEL_2010_POSTFIX.equals(postfix)) {
 46                     return readXlsx(path);
 47                 }
 48             } else {
 49                 System.out.println(path + Common.NOT_EXCEL_FILE);
 50             }
 51         }
 52         return null;
 53     }
 54 
 55     /**
 56      * Read the Excel 2010
 57      * @param path the path of the excel file
 58      * @return
 59      * @throws IOException
 60      */
 61     public List<Student> readXlsx(String path) throws IOException {
 62         System.out.println(Common.PROCESSING + path);
 63         InputStream is = new FileInputStream(path);
 64         XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);
 65         Student student = null;
 66         List<Student> list = new ArrayList<Student>();
 67         // Read the Sheet
 68         for (int numSheet = 0; numSheet < xssfWorkbook.getNumberOfSheets(); numSheet++) {
 69             XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(numSheet);
 70             if (xssfSheet == null) {
 71                 continue;
 72             }
 73             // Read the Row
 74             for (int rowNum = 1; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {
 75                 XSSFRow xssfRow = xssfSheet.getRow(rowNum);
 76                 if (xssfRow != null) {
 77                     student = new Student();
 78                     XSSFCell no = xssfRow.getCell(0);
 79                     XSSFCell name = xssfRow.getCell(1);
 80                     XSSFCell age = xssfRow.getCell(2);
 81                     XSSFCell score = xssfRow.getCell(3);
 82                     student.setNo(getValue(no));
 83                     student.setName(getValue(name));
 84                     student.setAge(getValue(age));
 85                     student.setScore(Float.valueOf(getValue(score)));
 86                     list.add(student);
 87                 }
 88             }
 89         }
 90         return list;
 91     }
 92 
 93     /**
 94      * Read the Excel 2003-2007
 95      * @param path the path of the Excel
 96      * @return
 97      * @throws IOException
 98      */
 99     public List<Student> readXls(String path) throws IOException {
100         System.out.println(Common.PROCESSING + path);
101         InputStream is = new FileInputStream(path);
102         HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
103         Student student = null;
104         List<Student> list = new ArrayList<Student>();
105         // Read the Sheet
106         for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {
107             HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
108             if (hssfSheet == null) {
109                 continue;
110             }
111             // Read the Row
112             for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
113                 HSSFRow hssfRow = hssfSheet.getRow(rowNum);
114                 if (hssfRow != null) {
115                     student = new Student();
116                     HSSFCell no = hssfRow.getCell(0);
117                     HSSFCell name = hssfRow.getCell(1);
118                     HSSFCell age = hssfRow.getCell(2);
119                     HSSFCell score = hssfRow.getCell(3);
120                     student.setNo(getValue(no));
121                     student.setName(getValue(name));
122                     student.setAge(getValue(age));
123                     student.setScore(Float.valueOf(getValue(score)));
124                     list.add(student);
125                 }
126             }
127         }
128         return list;
129     }
130 
131     @SuppressWarnings("static-access")
132     private String getValue(XSSFCell xssfRow) {
133         if (xssfRow.getCellType() == xssfRow.CELL_TYPE_BOOLEAN) {
134             return String.valueOf(xssfRow.getBooleanCellValue());
135         } else if (xssfRow.getCellType() == xssfRow.CELL_TYPE_NUMERIC) {
136             return String.valueOf(xssfRow.getNumericCellValue());
137         } else {
138             return String.valueOf(xssfRow.getStringCellValue());
139         }
140     }
141 
142     @SuppressWarnings("static-access")
143     private String getValue(HSSFCell hssfCell) {
144         if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) {
145             return String.valueOf(hssfCell.getBooleanCellValue());
146         } else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) {
147             return String.valueOf(hssfCell.getNumericCellValue());
148         } else {
149             return String.valueOf(hssfCell.getStringCellValue());
150         }
151     }
152 }
复制代码

/Excel2010/src/com/b510/excel/client/Client.java

复制代码
 1 /**
 2  * 
 3  */
 4 package com.b510.excel.client;
 5 
 6 import java.io.IOException;
 7 import java.util.List;
 8 
 9 import com.b510.common.Common;
10 import com.b510.excel.ReadExcel;
11 import com.b510.excel.vo.Student;
12 
13 /**
14  * @author Hongten
15  * @created 2014-5-21
16  */
17 public class Client {
18 
19     public static void main(String[] args) throws IOException {
20         String excel2003_2007 = Common.STUDENT_INFO_XLS_PATH;
21         String excel2010 = Common.STUDENT_INFO_XLSX_PATH;
22         // read the 2003-2007 excel
23         List<Student> list = new ReadExcel().readExcel(excel2003_2007);
24         if (list != null) {
25             for (Student student : list) {
26                 System.out.println("No. : " + student.getNo() + ", name : " + student.getName() + ", age : " + student.getAge() + ", score : " + student.getScore());
27             }
28         }
29         System.out.println("======================================");
30         // read the 2010 excel
31         List<Student> list1 = new ReadExcel().readExcel(excel2010);
32         if (list1 != null) {
33             for (Student student : list1) {
34                 System.out.println("No. : " + student.getNo() + ", name : " + student.getName() + ", age : " + student.getAge() + ", score : " + student.getScore());
35             }
36         }
37     }
38 }
复制代码

/Excel2010/src/com/b510/excel/util/Util.java

复制代码
 1 /**
 2  * 
 3  */
 4 package com.b510.excel.util;
 5 
 6 import com.b510.common.Common;
 7 
 8 /**
 9  * @author Hongten
10  * @created 2014-5-21
11  */
12 public class Util {
13 
14     /**
15      * get postfix of the path
16      * @param path
17      * @return
18      */
19     public static String getPostfix(String path) {
20         if (path == null || Common.EMPTY.equals(path.trim())) {
21             return Common.EMPTY;
22         }
23         if (path.contains(Common.POINT)) {
24             return path.substring(path.lastIndexOf(Common.POINT) + 1, path.length());
25         }
26         return Common.EMPTY;
27     }
28 }
复制代码

/Excel2010/src/com/b510/excel/vo/Student.java

复制代码
 1 /**
 2  * 
 3  */
 4 package com.b510.excel.vo;
 5 
 6 /**
 7  * Student
 8  * 
 9  * @author Hongten
10  * @created 2014-5-18
11  */
12 public class Student {
13     /**
14      * id   
15      */
16     private Integer id;
17     /**
18      * 学号
19      */
20     private String no;
21     /**
22      * 姓名
23      */
24     private String name;
25     /**
26      * 学院
27      */
28     private String age;
29     /**
30      * 成绩
31      */
32     private float score;
33 
34     public Integer getId() {
35         return id;
36     }
37 
38     public void setId(Integer id) {
39         this.id = id;
40     }
41 
42     public String getNo() {
43         return no;
44     }
45 
46     public void setNo(String no) {
47         this.no = no;
48     }
49 
50     public String getName() {
51         return name;
52     }
53 
54     public void setName(String name) {
55         this.name = name;
56     }
57 
58     public String getAge() {
59         return age;
60     }
61 
62     public void setAge(String age) {
63         this.age = age;
64     }
65 
66     public float getScore() {
67         return score;
68     }
69 
70     public void setScore(float score) {
71         this.score = score;
72     }
73 
74 }

以上是关于java的poi技术读取Excel数据的主要内容,如果未能解决你的问题,请参考以下文章

java的poi技术读取Excel数据

java poi 读取excel 数字类型

java poi技术读取到数据库

java poi读取excel日期格式数据

java使用poi读取excel时,电话号码变成了科学计数法,整数变成double,怎么改过来

java利用poi技术导入批量excel数据,并且分段存入数据库怎么解决