Java POI 解析Excel(xls、xlsx格式同时支持)
随手写个简单摘要:
POI大家都不陌生,经常拿来解析excel表格。
其中,xls格式的需要使用HSSFWorkbook类来解析,xlsx格式的需要使用XSSFWorkbook格式来解析。
那么如何整合二者呢。
代码目录:
1.传入文件名称,获取workbook对象;
2.使用workbook对象操作excel表格;
3.辅助代码;
一、获取workbook对象<重要代码>
/**
* xls/xlsx都使用的Workbook
*
* @param fileName
* @return
* @author 吕小布 2018年10月26日
*/
public static Workbook readExcel(String fileName){
Workbook wb = null;
if(fileName==null){
return null;
}
String extString = fileName.substring(fileName.lastIndexOf("."));
InputStream is = null;
try {
is = new FileInputStream(fileName);
if(".xls".equals(extString)){
return wb = new HSSFWorkbook(is);
}else if(".xlsx".equals(extString)){
return wb = new XSSFWorkbook(is);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return wb;
}
二、使用workbook对象操作excel表格
/**
* Description: 解析excel简单例子
*
* @param fileName
* @author 吕小布 2018年11月7日
*/
public void analyzeDemo(String fileName){
try {
Workbook wb = readExcel(fileName); // 获得excel文件对象workbook
Sheet s = wb.getSheetAt(0); // 获取指定工作表<这里获取的是第一个>
//循环行 sheet.getPhysicalNumberOfRows()是获取表格的总行数
for (int i = 0; i < s.getPhysicalNumberOfRows(); i++) {
System.out.println("第"+(i+1)+"行内容:");
Row row = s.getRow(i); // 取出第i行 getRow(index) 获取第(index+1)行
for (int j = 0;j < row.getPhysicalNumberOfCells(); j++) { // getPhysicalNumberOfCells() 获取当前行的总列数
String value1 = getCellFormatValue(row.getCell(0)); //getCell 获取单元格中的内容
System.out.print(value1+"");
}
System.out.println("");
}
} catch (IndexOutOfBoundsException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
三、辅助代码,对单元格的内容进行format<可有可无>
/**
* format表格内容
*
* @param cell
* @return
* @author 吕小布 2018年10月26日
*/
public static String getCellFormatValue(Cell cell){
String cellValue = "";
if(cell!=null){
//判断cell类型
switch(cell.getCellType()){
case Cell.CELL_TYPE_NUMERIC:{
cellValue = String.valueOf(cell.getNumericCellValue());
break;
}
case Cell.CELL_TYPE_STRING:{
cellValue = cell.getRichStringCellValue().getString();
break;
}
default:
cellValue = "";
}
}
return cellValue;
}
就此,关键代码全部结束,其余的地方得靠自己啦。
如果有书写错误的地方,请各位客官及时指出,以免误人子弟,遗臭万年。
你好,我叫吕小布
还没有评论,来说两句吧...