思想:
Excel导入之后,将文件放入输入流(InputStream),然后放入XSSFWorkbook就可以对导入的Excel文件执行相应操作,使用XSSFSheet找到数据所在的工作表,然后使用XSSFRow遍历每一行数据,用XSSFCell指定到对应的单元格,这样就可以对应到每一个单元格数据(行和列均从0开始计算),取出数据之后就可以做相应的业务操作了。
poi 依赖的 jar 包:
poi-3.9-20121203.jar
poi-ooxml-3.9-20121203.jar
poi-ooxml-schemas-3.9-20121203.jar
xmlbeans-2.3.0.jar
导入Excel后的解析过程(源码):
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
|
public
static
void
read(InputStream inputStream)
throws
IOException{
//初始整个Excel
XSSFWorkbook workbook =
new
XSSFWorkbook(inputStream);
//获取第一个Sheet表
XSSFSheet sheet = workbook.getSheetAt(
0
);
//或者 HSSFSheet sheet = workbook.getSheet("Sheet1");
for
(
int
rowIndex =
1
; rowIndex <= sheet.getLastRowNum(); rowIndex++){
XSSFRow row = sheet.getRow(rowIndex);
if
(row ==
null
){
continue
;
}
int
end =
0
;
//循环该行的每一个单元格
for
(
int
cellnum =
0
; cellnum < row.getLastCellNum(); cellnum++){
XSSFCell cell = row.getCell(cellnum);
if
(cellnum ==
0
) {
end = getCellValue(cell,rowlndex,
0
)
}
//打印出Excel中内容
System.out.prinln(getCellValue(cell, rowIndex, cellnum));
}
}
if
(
"end"
.qeuald(end)) {
//end为在Excel中最后一行数据后面的结束标志,执行到结束标记可结束循环
break
;
}
}
|
龙睿学长封装好的解析类型数据方法(源码):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
/**
* 得到某个单元格的值
* @param cell 需要传入的单元格
* @param rowIndex 传入的单元格所在的行数,默认从0开始
* @param cellnum 传入的单元格所在的列数,默认从0开始
* @return String类型的值,数字也将转换成字符串。
*/
public
static
String getCellValue(XSSFCell cell,
int
rowIndex,
int
cellnum) {
String cellValue =
""
;
if
(cell ==
null
){
return
" "
;
}
else
if
(cell.getCellType() == XSSFCell.CELL_TYPE_BLANK) {
cellValue =
" "
;
}
else
if
(cell.getCellType() == XSSFCell.CELL_TYPE_STRING) {
cellValue = cell.getRichStringCellValue().getString().trim();
}
else
if
(cell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC) {
cellValue = Double.toString(cell.getNumericCellValue());
}
else
if
(cell.getCellType() == XSSFCell.CELL_TYPE_BOOLEAN) {
cellValue = Boolean.toString(cell.getBooleanCellValue());
}
else
if
(cell.getCellType() == XSSFCell.CELL_TYPE_FORMULA) {
cellValue = Double.toString(cell.getNumericCellValue());
}
return
cellValue;
}
|
结束语:
本以为解析Excel很难,迟迟不肯动手,事实上也不是很难,只要肯动手操作,遇到问题努力去解决,什么问题终将不是问题,所有问题的存在的同时答案亦存在,只要肯去寻找。这次解决解析Excel也使用了不到一天的时间,虽然遇到了许多问题,但是最终还是圆满的完成了任务,同时收获良多,下次继续努力。