思想:
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也使用了不到一天的时间,虽然遇到了许多问题,但是最终还是圆满的完成了任务,同时收获良多,下次继续努力。