apache的poi jar包操作excel 分了两种方法 :操作2003 和2007的处理方式不一样
这两种操作方法我在网上找到了 参考资料
所需的jar包地址:http://download.csdn.net/detail/stamsuper1/5809125
本人觉得这种区分开来操作有点复杂
于是乎在网上搜集资料 发现可以统一处理
这是得到workBook对象
public static final Workbook createWb(String filePath) throws IOException{
InputStream inputStream=new FileInputStream(filePath);
if(filePath==null || filePath.equals("")) {
throw new IllegalArgumentException("参数错误!!!") ;
}
if(filePath.trim().toLowerCase().endsWith("xls")) {
return new HSSFWorkbook(inputStream) ;
} else if(filePath.trim().toLowerCase().endsWith("xlsx")) {
return new XSSFWorkbook(inputStream) ;
} else {
throw new IllegalArgumentException("不支持除:xls/xlsx以外的文件格式!!!") ;
}
}
读取workbook里面的数据
private List readXlsx() throws IOException {
String fileName="F:\\report.xlsx";
List<Map<String, String>> res=new ArrayList<Map<String, String>>();
Map<String, String> rowMap=null;
Workbook workBook=createWb(fileName);
String []headers=null;
//循环工作表sheet
for(int numSheet=0;numSheet<workBook.getNumberOfSheets();numSheet++){
Sheet sheet=workBook.getSheetAt(numSheet);
if (sheet==null) {
continue;
}
//循环行row
for (int rowNum = 0; rowNum <= sheet.getPhysicalNumberOfRows(); rowNum++) {
Row row=sheet.getRow(rowNum);
if (row==null) {
continue;
}
if(rowNum==0){
headers=new String [row.getLastCellNum()];
for (int cellNum = 0; cellNum < row.getLastCellNum(); cellNum++) {
Cell cell=row.getCell(cellNum);
if(cell==null){headers[cellNum]="";}
else{headers[cellNum]=getValueFromCell(cell);}
}
continue;
}
rowMap=new HashMap<String, String>();
//循环列cell
for (int cellNum =0; cellNum < row.getLastCellNum(); cellNum++) {
Cell cell=row.getCell(cellNum);
rowMap.put(headers[cellNum], getValueFromCell(cell));
}
res.add(rowMap);
}
}
return res;
}
private String getValueFromCell(Cell cell) {
if(cell == null) {
// printf("Cell is null !!!") ;
return null ;
}
String value = null ;
switch(cell.getCellType()) {
case Cell.CELL_TYPE_NUMERIC : // 数字
if(HSSFDateUtil.isCellDateFormatted(cell)) { // 如果是日期类型
value = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(cell.getDateCellValue()) ;
} else value = String.valueOf(cell.getNumericCellValue()) ;
break ;
case Cell.CELL_TYPE_STRING: // 字符串
value = cell.getStringCellValue() ;
break ;
case Cell.CELL_TYPE_FORMULA: // 公式
// 用数字方式获取公式结果,根据值判断是否为日期类型
double numericValue = cell.getNumericCellValue() ;
if(HSSFDateUtil.isValidExcelDate(numericValue)) { // 如果是日期类型
value = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(cell.getDateCellValue()) ;
} else value = String.valueOf(numericValue) ;
break ;
case Cell.CELL_TYPE_BLANK: // 空白
value ="內容為空白";
break ;
case Cell.CELL_TYPE_BOOLEAN: // Boolean
value = String.valueOf(cell.getBooleanCellValue()) ;
break ;
case Cell.CELL_TYPE_ERROR: // Error,返回错误码
value = String.valueOf(cell.getErrorCellValue()) ;
break ;
default:value = "" ;break ;
}
// 使用[]记录坐标
return value + "["+cell.getRowIndex()+","+cell.getColumnIndex()+"]" ;
}