Java 解析Excel(xls、xlsx两种格式)
一、环境
JDK 1.8
二、JAR
1.commons-collections4-4.1.jar
2.poi-3.9-20121203.jar
3.poi-examples-3.9-20121203.jar
4.poi-excelant-3.9-20121203.jar
5.poi-ooxml-3.9-20121203.jar
6.poi-ooxml-schemas-3.9-20121203.jar
7.poi-scratchpad-3.9-20121203.jar
8.xmlbeans-2.3.0.jar
注意:jar版本为3.9
三、主要API
1.import org.apache.poi.ss.usermodel.Workbook,对应Excel文档;
2.import org.apache.poi.hssf.usermodel.HSSFWorkbook,对应xls格式的Excel文档;
3.import org.apache.poi.xssf.usermodel.XSSFWorkbook,对应xlsx格式的Excel文档;
4.import org.apache.poi.ss.usermodel.Sheet,对应Excel文档中的一个sheet;
5.import org.apache.poi.ss.usermodel.Row,对应一个sheet中的一行;
6.import org.apache.poi.ss.usermodel.Cell,对应一个单元格。
四、示例
packagepoi;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.io.InputStream;importjava.util.ArrayList;importjava.util.LinkedHashMap;importjava.util.List;importjava.util.Map;importjava.util.Map.Entry;importorg.apache.poi.hssf.usermodel.HSSFWorkbook;importorg.apache.poi.ss.usermodel.Cell;importorg.apache.poi.ss.usermodel.DateUtil;importorg.apache.poi.ss.usermodel.Row;importorg.apache.poi.ss.usermodel.Sheet;importorg.apache.poi.ss.usermodel.Workbook;importorg.apache.poi.xssf.usermodel.XSSFWorkbook;public classTestpoi {public static voidmain(String[] args) {
Workbook wb=null;
Sheet sheet= null;
Row row= null;
List> list = null;
String cellData= null;
String filePath= "D:\\test.xlsx";
String columns[]= {"name","age","score"};
wb=readExcel(filePath);if(wb != null){//用来存放表中数据
list = new ArrayList>();//获取第一个sheet
sheet = wb.getSheetAt(0);//获取最大行数
int rownum =sheet.getPhysicalNumberOfRows();//获取第一行
row = sheet.getRow(0);//获取最大列数
int colnum =row.getPhysicalNumberOfCells();for (int i = 1; i
Map map = new LinkedHashMap();
row=sheet.getRow(i);if(row !=null){for (int j=0;j
cellData=(String) getCellFormatValue(row.getCell(j));
map.put(columns[j], cellData);
}
}else{break;
}
list.add(map);
}
}//遍历解析出来的list
for (Mapmap : list) {for (Entryentry : map.entrySet()) {
System.out.print(entry.getKey()+":"+entry.getValue()+",");
}
System.out.println();
}
}//读取excel
public staticWorkbook readExcel(String filePath){
Workbook wb= null;if(filePath==null){return null;
}
String extString= filePath.substring(filePath.lastIndexOf("."));
InputStream is= null;try{
is= newFileInputStream(filePath);if(".xls".equals(extString)){return wb = newHSSFWorkbook(is);
}else if(".xlsx".equals(extString)){return wb = newXSSFWorkbook(is);
}else{return wb = null;
}
}catch(FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}returnwb;
}public staticObject getCellFormatValue(Cell cell){
Object cellValue= null;if(cell!=null){//判断cell类型
switch(cell.getCellType()){caseCell.CELL_TYPE_NUMERIC:{
cellValue=String.valueOf(cell.getNumericCellValue());break;
}caseCell.CELL_TYPE_FORMULA:{//判断cell是否为日期格式
if(DateUtil.isCellDateFormatted(cell)){//转换为日期格式YYYY-mm-dd
cellValue =cell.getDateCellValue();
}else{//数字
cellValue =String.valueOf(cell.getNumericCellValue());
}break;
}caseCell.CELL_TYPE_STRING:{
cellValue=cell.getRichStringCellValue().getString();break;
}default:
cellValue= "";
}
}else{
cellValue= "";
}returncellValue;
}
}