首页 > 代码库 > java的poi技术读,写Excel[2003-2007,2010]

java的poi技术读,写Excel[2003-2007,2010]

在上一篇blog:java的poi技术读取Excel[2003-2007,2010] 中介绍了关于java中的poi技术读取excel的相关操作

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

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

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

本文主要讲的是java中poi读和写excel(版本是2003-2007,2010)

项目结构:

所用到的excel

运行效果:

Processing...lib/student_info.xls
No. : 201401, name : Hongten, age : 22.0, score : 98.0
No. : 201402, name : Hanyuan, age : 21.0, score : 96.0
No. : 201403, name : Tom, age : 20.0, score : 94.0
No. : 201404, name : HanKet, age : 21.0, score : 90.0
No. : 201405, name : Jone, age : 22.0, score : 42.0
No. : 201406, name : Kite, age : 23.0, score : 59.0
No. : 201407, name : Lucy, age : 25.0, score : 60.0
No. : 201408, name : Mark, age : 23.0, score : 89.0
No. : 201409, name : Jeson, age : 24.0, score : 79.0
No. : 201410, name : Steven, age : 23.0, score : 59.0
No. : 201411, name : Tide, age : 22.0, score : 88.0
No. : 201412, name : Deli, age : 22.0, score : 89.0
No. : 201413, name : Goerme, age : 21.0, score : 98.0
No. : 201414, name : Som, age : 23.0, score : 95.0
======================================
Processing...lib/student_info.xlsx
No. : 201401, name : Hongten, age : 22.0, score : 98.0
No. : 201402, name : Hanyuan, age : 21.0, score : 96.0
No. : 201403, name : Tom, age : 20.0, score : 94.0
No. : 201404, name : HanKet, age : 21.0, score : 90.0
No. : 201405, name : Jone, age : 22.0, score : 42.0
No. : 201406, name : Kite, age : 23.0, score : 59.0
No. : 201407, name : Lucy, age : 25.0, score : 60.0
No. : 201408, name : Mark, age : 23.0, score : 89.0
No. : 201409, name : Jeson, age : 24.0, score : 79.0
No. : 201410, name : Steven, age : 23.0, score : 59.0
No. : 201411, name : Tide, age : 22.0, score : 88.0
No. : 201412, name : Deli, age : 22.0, score : 89.0
No. : 201413, name : Goerme, age : 21.0, score : 98.0
No. : 201414, name : Som, age : 23.0, score : 95.0
======================================
write data to file : lib/student_info_2003-2007.xls
write data to file : lib/student_info_2010.xlsx
======================================
Processing...lib/student_info_2003-2007.xls
No. : 201401, name : Hongten, age : 22.0, score : 98.0
No. : 201402, name : Hanyuan, age : 21.0, score : 96.0
No. : 201403, name : Tom, age : 20.0, score : 94.0
No. : 201404, name : HanKet, age : 21.0, score : 90.0
No. : 201405, name : Jone, age : 22.0, score : 42.0
No. : 201406, name : Kite, age : 23.0, score : 59.0
No. : 201407, name : Lucy, age : 25.0, score : 60.0
No. : 201408, name : Mark, age : 23.0, score : 89.0
No. : 201409, name : Jeson, age : 24.0, score : 79.0
No. : 201410, name : Steven, age : 23.0, score : 59.0
No. : 201411, name : Tide, age : 22.0, score : 88.0
No. : 201412, name : Deli, age : 22.0, score : 89.0
No. : 201413, name : Goerme, age : 21.0, score : 98.0
No. : 201414, name : Som, age : 23.0, score : 95.0
======================================
Processing...lib/student_info_2010.xlsx
No. : 201401, name : Hongten, age : 22.0, score : 98.0
No. : 201402, name : Hanyuan, age : 21.0, score : 96.0
No. : 201403, name : Tom, age : 20.0, score : 94.0
No. : 201404, name : HanKet, age : 21.0, score : 90.0
No. : 201405, name : Jone, age : 22.0, score : 42.0
No. : 201406, name : Kite, age : 23.0, score : 59.0
No. : 201407, name : Lucy, age : 25.0, score : 60.0
No. : 201408, name : Mark, age : 23.0, score : 89.0
No. : 201409, name : Jeson, age : 24.0, score : 79.0
No. : 201410, name : Steven, age : 23.0, score : 59.0
No. : 201411, name : Tide, age : 22.0, score : 88.0
No. : 201412, name : Deli, age : 22.0, score : 89.0
No. : 201413, name : Goerme, age : 21.0, score : 98.0
No. : 201414, name : Som, age : 23.0, score : 95.0

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

源码部分:

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

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

 1 /**
 2  * 
 3  */
 4 package com.b510.excel.client;
 5 
 6 import java.util.List;
 7 
 8 import com.b510.excel.common.Common;
 9 import com.b510.excel.util.ExcelUtil;
10 import com.b510.excel.vo.Student;
11 
12 /**
13  * @author Hongten
14  * @created 2014-5-21
15  */
16 public class Client {
17 
18     public static void main(String[] args) throws Exception {
19         String read_excel2003_2007_path = Common.STUDENT_INFO_XLS_PATH;
20         String read_excel2010_path = Common.STUDENT_INFO_XLSX_PATH;
21         // read the 2003-2007 excel
22         List<Student> list = new ExcelUtil().readExcel(read_excel2003_2007_path);
23         if (list != null) {
24             for (Student student : list) {
25                 System.out.println("No. : " + student.getNo() + ", name : " + student.getName() + ", age : " + student.getAge() + ", score : " + student.getScore());
26             }
27         }
28         System.out.println("======================================");
29         // read the 2010 excel
30         List<Student> list1 = new ExcelUtil().readExcel(read_excel2010_path);
31         if (list1 != null) {
32             for (Student student : list1) {
33                 System.out.println("No. : " + student.getNo() + ", name : " + student.getName() + ", age : " + student.getAge() + ", score : " + student.getScore());
34             }
35         }
36         System.out.println("======================================");
37         String write_excel2003_2007_path = Common.STUDENT_INFO_XLS_OUT_PATH;
38         String write_excel2010_path = Common.STUDENT_INFO_XLSX_OUT_PATH;
39         new ExcelUtil().writeExcel(list, write_excel2003_2007_path);
40         new ExcelUtil().writeExcel(list, write_excel2010_path);
41         System.out.println("======================================");
42         
43         // read the 2003-2007 excel
44         List<Student> list2 = new ExcelUtil().readExcel(write_excel2003_2007_path);
45         if (list != null) {
46             for (Student student : list2) {
47                 System.out.println("No. : " + student.getNo() + ", name : " + student.getName() + ", age : " + student.getAge() + ", score : " + student.getScore());
48             }
49         }
50         System.out.println("======================================");
51         // read the 2010 excel
52         List<Student> list3 = new ExcelUtil().readExcel(write_excel2010_path);
53         if (list1 != null) {
54             for (Student student : list3) {
55                 System.out.println("No. : " + student.getNo() + ", name : " + student.getName() + ", age : " + student.getAge() + ", score : " + student.getScore());
56             }
57         }
58     }
59 }

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

 1 /**
 2  * 
 3  */
 4 package com.b510.excel.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 STUDENT_INFO_XLS_OUT_PATH = "lib/student_info_2003-2007.xls";
21     public static final String STUDENT_INFO_XLSX_OUT_PATH = "lib/student_info_2010.xlsx";
22     public static final String NOT_EXCEL_FILE = " : Not the Excel file!";
23     public static final String PROCESSING = "Processing...";
24     public static final String WRITE_DATA = "http://www.mamicode.com/write data to file :";
25 
26 }

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

  1 /**
  2  * 
  3  */
  4 package com.b510.excel.util;
  5 
  6 import java.io.File;
  7 import java.io.FileInputStream;
  8 import java.io.FileOutputStream;
  9 import java.io.IOException;
 10 import java.io.InputStream;
 11 import java.io.OutputStream;
 12 import java.util.ArrayList;
 13 import java.util.List;
 14 
 15 import org.apache.poi.hssf.usermodel.HSSFCell;
 16 import org.apache.poi.hssf.usermodel.HSSFRichTextString;
 17 import org.apache.poi.hssf.usermodel.HSSFRow;
 18 import org.apache.poi.hssf.usermodel.HSSFSheet;
 19 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 20 import org.apache.poi.xssf.usermodel.XSSFCell;
 21 import org.apache.poi.xssf.usermodel.XSSFRichTextString;
 22 import org.apache.poi.xssf.usermodel.XSSFRow;
 23 import org.apache.poi.xssf.usermodel.XSSFSheet;
 24 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 25 
 26 import com.b510.excel.common.Common;
 27 import com.b510.excel.vo.Student;
 28 
 29 /**
 30  * @author Hongten
 31  * @created 2014-5-20
 32  */
 33 public class ExcelUtil {
 34     
 35     public void writeExcel(List<Student> list, String path) throws Exception {
 36         if (list == null) {
 37             return;
 38         } else if (path == null || Common.EMPTY.equals(path)) {
 39             return;
 40         } else {
 41             String postfix = Util.getPostfix(path);
 42             if (!Common.EMPTY.equals(postfix)) {
 43                 if (Common.OFFICE_EXCEL_2003_POSTFIX.equals(postfix)) {
 44                     writeXls(list, path);
 45                 } else if (Common.OFFICE_EXCEL_2010_POSTFIX.equals(postfix)) {
 46                     writeXlsx(list, path);
 47                 }
 48             }else{
 49                 System.out.println(path + Common.NOT_EXCEL_FILE);
 50             }
 51         }
 52     }
 53     
 54     /**
 55      * read the Excel file
 56      * @param path the path of the Excel file
 57      * @return
 58      * @throws IOException
 59      */
 60     public List<Student> readExcel(String path) throws IOException {
 61         if (path == null || Common.EMPTY.equals(path)) {
 62             return null;
 63         } else {
 64             String postfix = Util.getPostfix(path);
 65             if (!Common.EMPTY.equals(postfix)) {
 66                 if (Common.OFFICE_EXCEL_2003_POSTFIX.equals(postfix)) {
 67                     return readXls(path);
 68                 } else if (Common.OFFICE_EXCEL_2010_POSTFIX.equals(postfix)) {
 69                     return readXlsx(path);
 70                 }
 71             } else {
 72                 System.out.println(path + Common.NOT_EXCEL_FILE);
 73             }
 74         }
 75         return null;
 76     }
 77 
 78     /**
 79      * Read the Excel 2010
 80      * @param path the path of the excel file
 81      * @return
 82      * @throws IOException
 83      */
 84     public List<Student> readXlsx(String path) throws IOException {
 85         System.out.println(Common.PROCESSING + path);
 86         InputStream is = new FileInputStream(path);
 87         XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);
 88         Student student = null;
 89         List<Student> list = new ArrayList<Student>();
 90         // Read the Sheet
 91         for (int numSheet = 0; numSheet < xssfWorkbook.getNumberOfSheets(); numSheet++) {
 92             XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(numSheet);
 93             if (xssfSheet == null) {
 94                 continue;
 95             }
 96             // Read the Row
 97             for (int rowNum = 1; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {
 98                 XSSFRow xssfRow = xssfSheet.getRow(rowNum);
 99                 if (xssfRow != null) {
100                     student = new Student();
101                     XSSFCell no = xssfRow.getCell(0);
102                     XSSFCell name = xssfRow.getCell(1);
103                     XSSFCell age = xssfRow.getCell(2);
104                     XSSFCell score = xssfRow.getCell(3);
105                     student.setNo(getValue(no));
106                     student.setName(getValue(name));
107                     student.setAge(getValue(age));
108                     student.setScore(Float.valueOf(getValue(score)));
109                     list.add(student);
110                 }
111             }
112         }
113         return list;
114     }
115 
116     /**
117      * Read the Excel 2003-2007
118      * @param path the path of the Excel
119      * @return
120      * @throws IOException
121      */
122     public List<Student> readXls(String path) throws IOException {
123         System.out.println(Common.PROCESSING + path);
124         InputStream is = new FileInputStream(path);
125         HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
126         Student student = null;
127         List<Student> list = new ArrayList<Student>();
128         // Read the Sheet
129         for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {
130             HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
131             if (hssfSheet == null) {
132                 continue;
133             }
134             // Read the Row
135             for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
136                 HSSFRow hssfRow = hssfSheet.getRow(rowNum);
137                 if (hssfRow != null) {
138                     student = new Student();
139                     HSSFCell no = hssfRow.getCell(0);
140                     HSSFCell name = hssfRow.getCell(1);
141                     HSSFCell age = hssfRow.getCell(2);
142                     HSSFCell score = hssfRow.getCell(3);
143                     student.setNo(getValue(no));
144                     student.setName(getValue(name));
145                     student.setAge(getValue(age));
146                     student.setScore(Float.valueOf(getValue(score)));
147                     list.add(student);
148                 }
149             }
150         }
151         return list;
152     }
153 
154     @SuppressWarnings("static-access")
155     private String getValue(XSSFCell xssfRow) {
156         if (xssfRow.getCellType() == xssfRow.CELL_TYPE_BOOLEAN) {
157             return String.valueOf(xssfRow.getBooleanCellValue());
158         } else if (xssfRow.getCellType() == xssfRow.CELL_TYPE_NUMERIC) {
159             return String.valueOf(xssfRow.getNumericCellValue());
160         } else {
161             return String.valueOf(xssfRow.getStringCellValue());
162         }
163     }
164 
165     @SuppressWarnings("static-access")
166     private String getValue(HSSFCell hssfCell) {
167         if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) {
168             return String.valueOf(hssfCell.getBooleanCellValue());
169         } else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) {
170             return String.valueOf(hssfCell.getNumericCellValue());
171         } else {
172             return String.valueOf(hssfCell.getStringCellValue());
173         }
174     }
175     
176     public void writeXls(List<Student> list, String path) throws Exception {
177         if (list == null) {
178             return;
179         }
180         int countColumnNum = list.size();
181         HSSFWorkbook book = new HSSFWorkbook();
182         HSSFSheet sheet = book.createSheet("studentSheet");
183         // option at first row.
184         HSSFRow firstRow = sheet.createRow(0);
185         HSSFCell[] firstCells = new HSSFCell[countColumnNum];
186         String[] options = { "no", "name", "age", "score" };
187         for (int j = 0; j < options.length; j++) {
188             firstCells[j] = firstRow.createCell(j);
189             firstCells[j].setCellValue(new HSSFRichTextString(options[j]));
190         }
191         //
192         for (int i = 0; i < countColumnNum; i++) {
193             HSSFRow row = sheet.createRow(i + 1);
194             Student student = list.get(i);
195             for (int column = 0; column < options.length; column++) {
196                 HSSFCell no = row.createCell(0);
197                 HSSFCell name = row.createCell(1);
198                 HSSFCell age = row.createCell(2);
199                 HSSFCell score = row.createCell(3);
200                 no.setCellValue(student.getNo());
201                 name.setCellValue(student.getName());
202                 age.setCellValue(student.getAge());
203                 score.setCellValue(student.getScore());
204             }
205         }
206         File file = new File(path);
207         OutputStream os = new FileOutputStream(file);
208         System.out.println(Common.WRITE_DATA + path);
209         book.write(os);
210         os.close();
211     }
212     
213     public void writeXlsx(List<Student> list, String path) throws Exception {
214         if (list == null) {
215             return;
216         }
217         //XSSFWorkbook
218         int countColumnNum = list.size();
219         XSSFWorkbook book = new XSSFWorkbook();
220         XSSFSheet sheet = book.createSheet("studentSheet");
221         // option at first row.
222         XSSFRow firstRow = sheet.createRow(0);
223         XSSFCell[] firstCells = new XSSFCell[countColumnNum];
224         String[] options = { "no", "name", "age", "score" };
225         for (int j = 0; j < options.length; j++) {
226             firstCells[j] = firstRow.createCell(j);
227             firstCells[j].setCellValue(new XSSFRichTextString(options[j]));
228         }
229         //
230         for (int i = 0; i < countColumnNum; i++) {
231             XSSFRow row = sheet.createRow(i + 1);
232             Student student = list.get(i);
233             for (int column = 0; column < options.length; column++) {
234                 XSSFCell no = row.createCell(0);
235                 XSSFCell name = row.createCell(1);
236                 XSSFCell age = row.createCell(2);
237                 XSSFCell score = row.createCell(3);
238                 no.setCellValue(student.getNo());
239                 name.setCellValue(student.getName());
240                 age.setCellValue(student.getAge());
241                 score.setCellValue(student.getScore());
242             }
243         }
244         File file = new File(path);
245         OutputStream os = new FileOutputStream(file);
246         System.out.println(Common.WRITE_DATA + path);
247         book.write(os);
248         os.close();
249     }
250 }

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

 1 /**
 2  * 
 3  */
 4 package com.b510.excel.util;
 5 
 6 import com.b510.excel.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 }

源码下载:http://pan.baidu.com/s/1eQpEf0u