簡體   English   中英

從Excel提取數據的問題(使用Java)

[英]Issue with fetching data from excel (Using Java)

當我兩次調用該函數時,我無法從該函數獲取數據。 該函數返回從Excel工作表獲取的所有行的arrayList。 當我第一次調用該函數時,我得到了正確的行數(除標題行和帶出口的行以外的所有行)。 第二次調用該函數時,我得到0。

似乎文件或第二次創建的工作表發生了某些事情,這是代碼:

private static List<String[]> getDataFromXLS(String excelPath) {

    FileInputStream fis;
    Workbook workbook; Sheet sheet; XSSFRow row;
    Iterator<Row> rows; 
    XSSFCell cell; 
    List<String[]> allExcelRows = new ArrayList<String[]>();
    String[] xlsRow;
    columnNames = new LinkedHashMap<Integer, String>();
    paramNames = new LinkedHashMap<String, Integer>();
    int totalColumnCount = 0;
    int rowNumber = 1;

    try {
        fis = new FileInputStream(new File(excelPath));
        workbook = WorkbookFactory.create(fis);
        sheet = workbook.getSheet("TestData");
        rows = sheet.rowIterator();

        while (rows.hasNext()) {        

            row = ((XSSFRow) rows.next());
            if (rowNumber == 1) {
                //based on amount of parameters on first xls row
                totalColumnCount = row.getLastCellNum();
            }

            xlsRow = new String[totalColumnCount];

            //check which column is TestType
            //iterate through all the columns
            for (int columnNumber=0; columnNumber<totalColumnCount; columnNumber++) {

                cell = row.getCell(columnNumber, Row.CREATE_NULL_AS_BLANK); 
                if (getCellValue(cell).trim().toLowerCase().trim().equals("testtype") ){
                    testTypeColumnIndex = columnNumber; //this is Testtype index
                    break;
                }
            }

            if (rowNumber != 1) {                   
                for(int columnNumber=0; columnNumber<totalColumnCount; columnNumber++) {
                    cell = row.getCell(columnNumber, Row.CREATE_NULL_AS_BLANK);                    

                    //read only rows before exit
                    if (columnNumber == testTypeColumnIndex && getCellValue(cell).trim().toLowerCase().trim().equals("exit") ){
                        reachedExit = true;
                        break;
                    }
                    xlsRow[columnNumber] = getCellValue(cell).trim();
                }

                //reached exit?
                if (reachedExit) {
                    break; 
                }
                allExcelRows.add(xlsRow);
            } else {
                //save column names into map
                for(int columnNumber=0; columnNumber<totalColumnCount; columnNumber++) {
                    cell = row.getCell(columnNumber, Row.CREATE_NULL_AS_BLANK);                                                                     
                    columnNames.put(columnNumber, getCellValue(cell).trim());
                    paramNames.put(getCellValue(cell).trim(), columnNumber);
                }
            }
            rowNumber++;
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    fis.close();
    return allExcelRows;
}

我在這里有點猜測,但是我認為問題在於方法開始時未重置reachedExit類級別的布爾值。 因此,當您第二次調用它時,此代碼塊將執行:

//reached exit?
if (reachedExit) {
    break; 
}

....意味着沒有任何東西添加到所有allExcelRows

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM