1.背景
目的:讀取Excel文件內容,對單元格的值做校驗
針對不同的Excel版本,要採用不同的工具類
HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,擴展名是.xls;
XSSFWorkbook:是操作Excel2007後的版本,擴展名是.xlsx;
SXSSFWorkbook:是操作Excel2007後的版本,擴展名是.xlsx;
2.具體實現
URL url = new URL(testUrl);//把遠程文件地址轉換成URL格式
InputStream fin = url.openStream();
XSSFWorkbook work = new XSSFWorkbook(fin);//我的測試文件後綴爲xlsx,所以用XSSF
fin.close();
XSSFSheet sheet = work.getSheetAt(0);//獲取第一個表
int columnNum = 0;
int rowNum=sheet.getLastRowNum()-sheet.getFirstRowNum();//如果要取表中所有行,rowNum需要+1
if (sheet.getRow(1) != null) {//測試文件的第一行爲標題,所以下標取了1
columnNum = sheet.getRow(1).getLastCellNum()
- sheet.getRow(1).getFirstCellNum();
}
if (columnNum > 0) {
String[][] singleRow = new String[rowNum][columnNum];//用二維數組存儲需要的所有行和列
for (int row=0;row<rowNum;row++) {
for (int i = 0; i < columnNum; i++) {
Cell cell = sheet.getRow(row+1).getCell(i, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);//獲取某行某列的單元格數據
switch (cell.getCellType()) {
case Cell.CELL_TYPE_BLANK:
singleRow[row][i] = "";
if (cell == null || cell.equals("") || cell.getCellType() == XSSFCell.CELL_TYPE_BLANK) {System.out.print("<Null>|");
}
break;
case Cell.CELL_TYPE_BOOLEAN:
singleRow[row][i]= Boolean.toString(cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_STRING:
singleRow[row][i] = cell.getStringCellValue().trim();
break;
default:
singleRow[row][i]= "";
break;
}
}
}
Assert.assertEquals(singleRow[1][0],"1","編號不一致");//校驗表中字段值是否符合預期
Assert.assertEquals(singleRow[1][1],"固定租金","字段不一致");
Assert.assertEquals(singleRow[1][2],"合同獲取","字段不一致");
}
測試文件內容:
3.注意點
代碼中的下標、行數、列數都是根據實際需求寫的,具體應用時需要加以修改