轉自:https://www.jb51.net/article/95526.htm
介紹
Jakarta POI 是一套用於訪問微軟格式文檔的Java API。Jakarta POI有很多組件組成,其中有用於操作Excel格式文件的HSSF和用於操作Word的HWPF,在各種組件中目前只有用於操作Excel的HSSF相對成熟。官方主頁http://poi.apache.org/index.html,API文檔http://poi.apache.org/apidocs/index.html
實現
已經在代碼中加入了完整的注釋。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
import
java.io.FileInputStream;
import
java.io.FileOutputStream;
import
java.io.InputStream;
import
java.io.OutputStream;
import
java.util.ArrayList;
import
java.util.List;
import
org.apache.poi.hssf.usermodel.HSSFCell;
import
org.apache.poi.hssf.usermodel.HSSFCellStyle;
import
org.apache.poi.hssf.usermodel.HSSFRow;
import
org.apache.poi.hssf.usermodel.HSSFSheet;
import
org.apache.poi.hssf.usermodel.HSSFWorkbook;
public
class
ExcelOperate {
public
static
void
main(String[] args) {
// 創建Excel表格
createExcel(getStudent());
// 讀取Excel表格
List<Student> list = readExcel();
System.out.println(list.toString());
}
/**
* 初始化數據
*
* @return 數據
*/
private
static
List<Student> getStudent() {
List<Student> list =
new
ArrayList<Student>();
Student student1 =
new
Student(
"小明"
,
8
,
"二年級"
);
Student student2 =
new
Student(
"小光"
,
9
,
"三年級"
);
Student student3 =
new
Student(
"小花"
,
10
,
"四年級"
);
list.add(student1);
list.add(student2);
list.add(student3);
return
list;
}
/**
* 創建Excel
*
* @param list
* 數據
*/
private
static
void
createExcel(List<Student> list) {
// 創建一個Excel文件
HSSFWorkbook workbook =
new
HSSFWorkbook();
// 創建一個工作表
HSSFSheet sheet = workbook.createSheet(
"學生表一"
);
// 添加表頭行
HSSFRow hssfRow = sheet.createRow(
0
);
// 設置單元格格式居中
HSSFCellStyle cellStyle = workbook.createCellStyle();
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 添加表頭內容
HSSFCell headCell = hssfRow.createCell(
0
);
headCell.setCellValue(
"姓名"
);
headCell.setCellStyle(cellStyle);
headCell = hssfRow.createCell(
1
);
headCell.setCellValue(
"年齡"
);
headCell.setCellStyle(cellStyle);
headCell = hssfRow.createCell(
2
);
headCell.setCellValue(
"年級"
);
headCell.setCellStyle(cellStyle);
// 添加數據內容
for
(
int
i =
0
; i < list.size(); i++) {
hssfRow = sheet.createRow((
int
) i +
1
);
Student student = list.get(i);
// 創建單元格,並設置值
HSSFCell cell = hssfRow.createCell(
0
);
cell.setCellValue(student.getName());
cell.setCellStyle(cellStyle);
cell = hssfRow.createCell(
1
);
cell.setCellValue(student.getAge());
cell.setCellStyle(cellStyle);
cell = hssfRow.createCell(
2
);
cell.setCellValue(student.getGrade());
cell.setCellStyle(cellStyle);
}
// 保存Excel文件
try
{
OutputStream outputStream =
new
FileOutputStream(
"D:/students.xls"
);
workbook.write(outputStream);
outputStream.close();
}
catch
(Exception e) {
e.printStackTrace();
}
}
/**
* 讀取Excel
*
* @return 數據集合
*/
private
static
List<Student> readExcel() {
List<Student> list =
new
ArrayList<Student>();
HSSFWorkbook workbook =
null
;
try
{
// 讀取Excel文件
InputStream inputStream =
new
FileInputStream(
"D:/students.xls"
);
workbook =
new
HSSFWorkbook(inputStream);
inputStream.close();
}
catch
(Exception e) {
e.printStackTrace();
}
// 循環工作表
for
(
int
numSheet =
0
; numSheet < workbook.getNumberOfSheets(); numSheet++) {
HSSFSheet hssfSheet = workbook.getSheetAt(numSheet);
if
(hssfSheet ==
null
) {
continue
;
}
// 循環行
for
(
int
rowNum =
1
; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
HSSFRow hssfRow = hssfSheet.getRow(rowNum);
if
(hssfRow ==
null
) {
continue
;
}
// 將單元格中的內容存入集合
Student student =
new
Student();
HSSFCell cell = hssfRow.getCell(
0
);
if
(cell ==
null
) {
continue
;
}
student.setName(cell.getStringCellValue());
cell = hssfRow.getCell(
1
);
if
(cell ==
null
) {
continue
;
}
student.setAge((
int
) cell.getNumericCellValue());
cell = hssfRow.getCell(
2
);
if
(cell ==
null
) {
continue
;
}
student.setGrade(cell.getStringCellValue());
list.add(student);
}
}
return
list;
}
}
|
附上Student類的代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
public
class
Student {
private
String name;
private
int
age;
private
String grade;
public
Student() {
}
public
Student(String name,
int
age, String grade) {
super
();
this
.name = name;
this
.age = age;
this
.grade = grade;
}
public
String getName() {
return
name;
}
public
void
setName(String name) {
this
.name = name;
}
public
int
getAge() {
return
age;
}
public
void
setAge(
int
age) {
this
.age = age;
}
public
String getGrade() {
return
grade;
}
public
void
setGrade(String grade) {
this
.grade = grade;
}
@Override
public
String toString() {
return
"Student [name="
+ name +
", age="
+ age +
", grade="
+ grade
+
"]"
;
}
}
|
測試結果
導出的Excel表格
students
打印讀取的Excel數據
1
|
[Student [name=小明, age=
8
, grade=二年級], Student [name=小光, age=
9
, grade=三年級], Stu
|