java读excel的方法有两种:
1、jxl.jar来读,后来发现无法读取2007的即.xlsx格式
2、poi.jar来读取,支持2007以上的版本,读取.xls时会报错,如下:
org.apache.poi.POIXMLException: org.apache.poi.openxml4j.exceptions.InvalidFormatException:Package should contain a content type part
所以两个方法可以结合使用
jxl方法只需加
jxl.jar
poi方法需加jar有:
poi-3.8-20120326.jar
poi-ooxml-3.8-20120326.jar
poi-ooxml-schemas-3.8-20120326.jar
xmlbeans-2.3.0.jar
//判断后缀
String pfix=StringUtils.substringAfterLast(saveName, ".").toLowerCase();
if(pfix!=null&&!pfix.equals("xlsx")){
//==========读取excel文件内容=====jxl方法可读取.xls格式
jlxExcel(saveName);
}else{
//==========读取excel文件内容=====poi方法可读取Excel2007即.xlsx格式
poiExcel(saveName);
}
//读取.xls格式,jlx方法
private void jlxExcel(String saveName){
//===============jlx方法=================
try{
String realPath = getPath() + "\\" + saveName;
File fileDes = new File(realPath);
InputStream str = new FileInputStream(fileDes);
// 构造Workbook(工作薄)对象
Workbook rwb=Workbook.getWorkbook(str);
Sheet rs=rwb.getSheet(0);//获取第一张工作表
int rsRows=rs.getRows();//获取Sheet表中所包含的总行数
int rsCols=rs.getColumns();//获取Sheet表中所包含的总列数
log.info("========行========"+rsRows+"=====列========"+rsCols);
for(int i=1;i<rsRows;i++){//读取行
log.info("========执行第========"+i+"行");
for(int j=0;j<rsCols;j++){
log.info("========执行第========"+j+"列");
Cell coo=rs.getCell(j, i);//单元格定位列,再定位行
log.info("========coo========"+coo);
String strc=coo.getContents();//读取内容
log.info("========读取内容strc========"+strc);
System.out.println("文件"+saveName+"的内容为:"+strc);
}
}
rwb.close();
}catch (FileNotFoundException e) {
e.printStackTrace();
} catch (BiffException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//==========读取excel文件内容=结束=====================
}
//poi读取.xlsx方法
private void poiExcel(String saveName){
try{
String realPath = getPath() + "\\" + saveName;
File fileDes = new File(realPath);
InputStream str = new FileInputStream(fileDes);
XSSFWorkbook xwb = new XSSFWorkbook(str); //利用poi读取excel文件流
XSSFSheet st = xwb.getSheetAt(0); //读取sheet的第一个工作表
int rows=st.getLastRowNum();//总行数
int cols;//总列数
log.info("========行========"+rows);
for(int i=0;i<rows;i++){
XSSFRow row=st.getRow(i);//读取某一行数据
if(row!=null){
//获取行中所有列数据
cols=row.getLastCellNum();
log.info("========行========"+rows+"=====列========"+cols);
for(int j=0;j<cols;j++){
XSSFCell cell=row.getCell(j);
if(cell==null){
System.out.print(" ");
}else{
//判断单元格的数据类型
switch (cell.getCellType()) {
case XSSFCell.CELL_TYPE_NUMERIC: // 数字
System.out.print(cell.getNumericCellValue() + " ");
break;
case XSSFCell.CELL_TYPE_STRING: // 字符串
System.out.print(cell.getStringCellValue() + " ");
break;
case XSSFCell.CELL_TYPE_BOOLEAN: // Boolean
System.out.println(cell.getBooleanCellValue() + " ");
break;
case XSSFCell.CELL_TYPE_FORMULA: // 公式
System.out.print(cell.getCellFormula() + " ");
break;
case XSSFCell.CELL_TYPE_BLANK: // 空值
System.out.println("");
break;
case XSSFCell.CELL_TYPE_ERROR: // 故障
System.out.println("故障");
break;
default:
System.out.print("未知类型 ");
break;
}
}
}
}
}
}catch(IOException e){
e.printStackTrace();
}
}