java讀取遠程Excel文件內容,並做校驗

1.背景

測試文件地址:https://ifiletest.XXX.com/mis/temp/settlement/csv/settlement_cost/rentingexpenseitem1554975619468.xlsx

目的:讀取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.注意點

代碼中的下標、行數、列數都是根據實際需求寫的,具體應用時需要加以修改

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章