使用POI讀取Excel表格中數據
已經在 使用POI讀取Excel表格中數據2優化。(https://blog.csdn.net/qq_36570464/article/details/107053355)
https://blog.csdn.net/qq_36570464/article/details/107053355
背景
自己最近在研究自動換測試,在進行參數化時候,會對把用例寫在Excel表格中,然後通過Java來取表格中數據,進而進行參數化。
問題
那麼,我們的表格可能回事這麼一個情況:
表格中的單元格里出現沒有輸入的情況(圖片中紅色部分),如何通過POI進行讀取,或者如何處理?預期結果不用考慮。
代碼
只貼了獲取表格中數據代碼,其他不是本文內容。
@DataProvider
public Object[][] getParamExcel() throws IOException {
File file = new File("/param.xlsx");
XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(file));
//獲得表格中的第0個Sheet
XSSFSheet sheet = workbook.getSheetAt(0);
//得到有多少行
int numberRows = sheet.getPhysicalNumberOfRows();
//獲得第一行有多少列
int numberCells=sheet.getRow(0).getPhysicalNumberOfCells();
//獲得第一行第一列所在的位置
int numberFirst = sheet.getRow(0).getFirstCellNum();
//創建一個Object二維數組,用來作爲參數返回。
//因爲第一行是說明,則跳過第一行,所以行數減一
Object[][] data = new Object[numberRows - 1][];
//創建一個保存列的對象
XSSFRow row = null;
// 因爲第一行是說明,則跳過第一行,所以行數減一
//sheet.getFirstRowNum() 獲得第一行開始的位子,可能不從第一行開始(i=0)
//numberRows - 1 表示除去第一行說明,實際數據有多少行
for (int i = sheet.getFirstRowNum(); i < numberRows - 1; i++) {
//得到第i+1行,即第二行的實際數據
row = sheet.getRow(i + 1);
// 創建一個字符數組,用來保存一行中,每一列的數據
String[] strings = new String[numberCells];
//row.getFirstCellNum() 獲得一行中實際數據所在列,不一爲第一列,如圖第4行
for (int j = numberFirst; j < numberCells; j++) {
// 數據是通過key-value方式保存,遍歷是會出現空指針異常(圖中紅色部分)。
//出現的多餘沒有輸入的單元格會出現異常,並對沒有數據輸入的單元格(紅色部分)是進行空字符處理
try {
//設置爲字符類型,這裏主要是因爲在獲取Excel數據時,
//數字出現小數點,主要用於不加小數點,可以簡單這麼理解。大家可以看一下源碼就知道什麼原因了
row.getCell(j).setCellType(CellType.STRING);
} catch (NullPointerException e) {
//出現空指針異常,說明數據沒有輸入,即空數據,做空字符串處理
strings[j] = "";
//跳過當前循環
continue;
}
// 保存數據
strings[j] = row.getCell(j).getStringCellValue();
}
//把獲得數據添加到data
data[i] = strings;
}
return data;
}
後言
當然,該方法不是一個很好的方法,有些還有些特殊情況處理不了。
如果你有什麼改進或者更好的方法,歡迎留言。