问题记录
前言
记录遇到的一些问题,供参考回顾
分类暂时不会很多
`提示:问题集仅供参考,具体问题需要结合使用的框架、引入的jar包、jdk版本具体分析
一、EXCEL 【POI】问题
简介:开发中经常会设计到excel的处理,如导出Excel,导入Excel到数据库中,操作Excel目前有两个框架,一个是apache 的poi, 另一个是 Java Excel
Apache POI 简介是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office(Excel、WORD、PowerPoint、Visio等)格式档案读和写的功能。POI为“Poor Obfuscation Implementation”的首字母缩写,意为“可怜的模糊实现”。
官方主页: http://poi.apache.org/index.html
API文档: http://poi.apache.org/apidocs/index.html
使用问题:
1.过时的方法,项目需求导入excel时,需要获取excel里的行数,再取每一行,进而获取每行的每个单元格的内容。
获取最后一行:sheet.getLastRowNum();
当excel文件里存在空行时,该方法也会获取空行,例excel有6行有内容,删除第6行的内容,该方法依然会获取空行(第6行)作为最后一行
此处需要在获取最后一行方法处做处理,例如:
private int getLastRowNum(Sheet sheet){
int lastRowNum = sheet.getLastRowNum();
Row row = sheet.getRow(lastRowNum);
while(isRowEmpty(row)){
lastRowNum--;
row = sheet.getRow(lastRowNum);
}
return lastRowNum;
}
private boolean isRowEmpty(Row row){
if(row==null){
return true;
}
for(int i =row.getFirstCellNum();i<row.getLastCellNum();i++){
Cell cell = row.getCell(i);
if(cell==null){
break;
}else{
cell.setCellType(CellType.STRING);
String cellStr = cell.toString();
if(StringUtils.isNotEmpty(cellStr)){
return false;
}
}
}
return true;
}
在后续获取excel实体后还需进行null判空处理;
2.cell单元格的处理:需要对cell单元格进行判空处理,一般见到的如此处理:
Cell cell = row.getCell(c);
if(cell!=null && cell.~~getCellType~~ ()!=Cell.~~CELL_TYPE_BLANK~~ ){
.....
.....
}
}
这里目前用cell==null 和cell!=null做处理;
Cell cell = row.getCell(c);
if(cell==null){
break;
}else{
cell.setCellType(CellType.STRING);
String cellStr = cell.toString();
if(StringUtils.isNotEmpty(cellStr)){
return false;
}
}
}
注意需要对单元格做null和“”(空)处理,警惕空指针异常
3.导入优化点:导入的excel获取到首行导入说明可以先拼接定义一个string字符串,在获取excel文件后再获取首行拼接成字符串,亮字符串进行对比,不一致即导入模板不正确:
二、XXX
1.XXX
代码如下(示例):
XXXXX
2.XX
代码如下(示例):
XXX
XXX。
总结
提示:这里对文章进行总结:
例如:XXXX。