java学习记录(5)- poi jar包作用及文字解析
链接模块:
1 poi 准备
2 poi 翻译
3 poi 图片解析
提要:
- poi下载及文档查看(文档学习与查看的过程)
- poi对于单元格的解析
- 实际工作的过程步骤
具体内容
一 java本身配置了很多jar包,很多包都提供了很完善的学习文档。从这些文档中获取jar包的相关知识是最快速和准确的。当然网上也会有很多关于文档实现的实例。这些是快速的获取编程途径的方式,但并不官方,在此次的代码过程中就有发现。
- 获取路径 poi3.17官方下载
- 此次是需要解析excel文档,HSSF能够解析 Excel ‘97(-2007)文档格式,XSSF能够解析2007 OOXML (.xlsx) 文档格式。
- 文档学习过程,
(1)下载文档解析之后进行内容的在目录–poi-bin-3.17-20170915/poi-3.17/docs/spreadsheet/quick-guide.html。 通过该篇文章能够快速熟悉excel的操作过程。
(2) 目录–poi-bin-3.17-20170915/poi-3.17/docs/apidocs/index.html是能够进行内容的处理,查询相关的api及记录。
二 工程所需jar包
各个解析模块跟jar包的关系
jar包依赖关系
故此:
当我们只要使用xls格式时、只要导入poi-version-yyyymmdd.jar就可以了。
当我们还要使用xlsx格式、还要导入poi-ooxml-version-yyyymmdd.jar。
至于poi-ooxml-schemas-version-yyyymmdd.jar这个jar基本不太会用到的。
当我们需要操作word、ppt、viso、outlook等时需要用到poi-scratchpad-version-yyyymmdd.jar。
三 工程代码实现
获取每个单元格的内容
public static int MY_MINIMUM_COLUMN_COUNT = 40;
public static Map<String, List<Object>> getData(String excelPath) throws EncryptedDocumentException, InvalidFormatException, IOException{
Map map = new HashMap();
Workbook wb = WorkbookFactory.create(new File(excelPath));
DataFormatter formatter = new DataFormatter();
int sheetNum = wb.getNumberOfSheets();
System.out.println("sheet nums " + sheetNum);
for(int i = 0; i < sheetNum; i++) {
Sheet sheet = wb.getSheetAt(i);
int rowStart = Math.min(0, sheet.getFirstRowNum());
int rowEnd = Math.max(14000, sheet.getLastRowNum());
for (int rowNum = rowStart; rowNum < rowEnd; rowNum++) {
Row r = sheet.getRow(rowNum);
if (r == null) {
// This whole row is empty
// Handle it as needed
continue;
}
int lastColumn = r.getLastCellNum();
List list = new ArrayList();
for (int cn = 0; cn < lastColumn; cn++) {
//Row.MissingCellPolicy.RETURN_BLANK_AS_NULL
Cell cell = r.getCell(cn);
if (cell == null) {
list.add("null");
// The spreadsheet is empty in this cell
} else {
switch (cell.getCellTypeEnum()) {
case STRING:
list.add(cell.getRichStringCellValue().getString());
break;
case NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
Date d= cell.getDateCellValue();
list.add(d);
//how to trans util.Date to sql.Date; this date is util.Date if to store in database trans to sql.Date;
} else {
list.add(cell.getNumericCellValue());
}
break;
case BOOLEAN:
list.add(cell.getBooleanCellValue());
// System.out.println(cell.getBooleanCellValue());
break;
case FORMULA:
list.add(cell.getCellFormula());
// System.out.println(cell.getCellFormula());
break;
case BLANK:
break;
default:
}
String sheet_row = String.valueOf(i) + "_" + String.valueOf(rowNum);
map.put(sheet_row, list);
}
}
}
}
return map;
}