从excel返回单元格值时出现空指针异常

时间:2015-02-13 06:45:24

标签: java excel selenium-webdriver poi-hssf hssf

我有以下代码

private void execute_TestCase()抛出异常{

    int iTotalTestCases = ExcelUtils.getRowCount(Constants.Sheet_TestCases);
    System.out.println("Total TC count" + iTotalTestCases);
    **formname=ExcelUtils.getCellData(13, 6, Constants.Sheet_TestCases);**
    System.out.println("F"+formname);

    for(int iTestcase=1;iTestcase<iTotalTestCases;iTestcase++){
        bResult = true;
        sTestCaseID = ExcelUtils.getCellData(iTestcase, Constants.Col_TestCaseID, Constants.Sheet_TestCases); 
        sRunMode = ExcelUtils.getCellData(iTestcase, Constants.Col_RunMode,Constants.Sheet_TestCases);
        if (sRunMode.equals("Yes")){
            Log.startTestCase(sTestCaseID);
            iTestStep = ExcelUtils.getRowContains(sTestCaseID, Constants.Col_TestCaseID, Constants.Sheet_TestSteps);
            iTestLastStep = ExcelUtils.getTestStepsCount(Constants.Sheet_TestSteps, sTestCaseID, iTestStep);
            bResult=true;
            System.out.println("sTestCaseID"+ sTestCaseID);
            System.out.println("iTestStep"+ iTestStep);
            System.out.println("iTestLastStep"+ iTestLastStep);
            for (;iTestStep<iTestLastStep;iTestStep++){
                sActionKeyword = ExcelUtils.getCellData(iTestStep, Constants.Col_ActionKeyword,Constants.Sheet_TestSteps);
                sPageObject = ExcelUtils.getCellData(iTestStep, Constants.Col_PageObject, Constants.Sheet_TestSteps);
                sData = ExcelUtils.getCellData(iTestStep, Constants.Col_DataSet, Constants.Sheet_TestSteps);
                execute_Actions();
                if(bResult==false){
                    ExcelUtils.setCellData(Constants.KEYWORD_FAIL,iTestcase,Constants.Col_Result,Constants.Sheet_TestCases);
                    Log.endTestCase(sTestCaseID);
                    break;
                    }                       
                }
            if(bResult==true){
            ExcelUtils.setCellData(Constants.KEYWORD_PASS,iTestcase,Constants.Col_Result,Constants.Sheet_TestCases);
            Log.endTestCase(sTestCaseID);   
                }                   
            }
        }
    }   

formname = ExcelUtils.getCellData(13,6,Constants.Sheet_TestCases)。在getcelldata中调用NullPointerException时。但是使用相同的(13,6)对它在底部工作正常。 在下面找到getCellData代码

 public static String getCellData(int RowNum, int ColNum, String SheetName ) throws Exception{
                try{
                    System.out.println("sheet"+SheetName);
                    ExcelWSheet = ExcelWBook.getSheet(SheetName);
                    System.out.println("Excelwsheet"+ExcelWSheet);
                    Cell = ExcelWSheet.getRow(RowNum).getCell(ColNum);
                    System.out.println("test here2");
                    String CellData = Cell.getStringCellValue();
                    System.out.println("Celldata"+CellData);
                    return CellData;
                 }catch (Exception e){
                     System.out.println("Exception" + e);
                     Log.error("Class Utils | Method getCellData | Exception desc : "+e.getMessage());
                     DriverScript.bResult = true;
                     return"";
                     }
                 }

1 个答案:

答案 0 :(得分:0)

来自Sheet.getRow(int) Apache POI javadocs

  

返回 - 表示rownumber的行,如果未在表单上定义,则返回null

因此,您需要更改此行而不进行空检查:

Cell = ExcelWSheet.getRow(RowNum).getCell(ColNum);

对于更像这样的东西,它检查+处理行(或单元格!)为null:

 Row row = ExcelWSheet.getRow(RowNum);
 if (row == null) {
    // Handle empty row
    return "";
 }
 Cell cell = row.getCell(ColNum, Row.RETURN_BLANK_AS_NULL);
 if (cell == null) {
    // Handle empty cell
    return "";
 }

您可能还想处理包含除字符串之外的其他内容的单元格以及其他一些常见问题...请仔细阅读Apache POI Spreadsheet docs以了解您需要做什么!