2016-10-03 61 views
1

Apache的POI>無法讀取Excel工作表Apache的POI>無法讀取Excel工作表

  1. 蔭能夠成功當我使用的代碼來訪問Excel文件內的另一片材以將數據寫入到Excel片
  2. 它dosnt工作

下面的代碼工作:

 priceband = p.getProperty("priceband"); 
    if(priceband.contains("nationala")) { 
     ExcelUtils.setExcelFile(Constant.Path_TestData + Constant.File_TestData,"NationalA"); 
     ExcelUtils.setCellData("example22222", 1, 1); 
    } 

佛llowing代碼dosnt工作試圖在同一工作簿中訪問其他工作表時,我運行代碼的時候得到一個空指針異常:

if(priceband.contains("nationala")) { 
    ExcelUtils.setExcelFile(Constant.Path_TestData + Constant.File_TestData,"NationalB"); 
    ExcelUtils.setCellData("example22222", 1, 1); 
} 


public class ExcelUtils { 
private static XSSFSheet ExcelWSheet; 
private static XSSFWorkbook ExcelWBook; 
private static XSSFCell Cell; 
private static XSSFRow Row; 
public FileInputStream fis = null; 
public FileOutputStream fileOut = null; 
public static String priceband; 

// This method is to set the File path and to open the Excel file, Pass 
// Excel Path and Sheetname as Arguments to this method 
public static void setExcelFile(String Path, String SheetName) throws Exception { 
    try { 
     // Open the Excel file 
     FileInputStream ExcelFile = new FileInputStream(Path); 
     // Access the required test data sheet 
     ExcelWBook = new XSSFWorkbook(ExcelFile); 
     ExcelWSheet = ExcelWBook.getSheet(SheetName); 
    } catch (Exception e) { 
     throw (e); 
    } 
} 

// This method is to read the test data from the Excel cell, in this we are 
// passing parameters as Row num and Col num 
public static String getCellData(int RowNum, int ColNum) throws Exception { 
    try { 
     Cell = ExcelWSheet.getRow(RowNum).getCell(ColNum); 
     String CellData = Cell.getStringCellValue(); 
     return CellData; 
    } catch (Exception e) { 
     return ""; 
    } 
} 

// This method is to write in the Excel cell, Row num and Col num are the 
// parameters 
public static void setCellData(String Result, int RowNum, int ColNum) throws Exception { 
    try { 
     Row = ExcelWSheet.getRow(RowNum); 
     Cell = Row.getCell(ColNum, Row.RETURN_BLANK_AS_NULL); 
     if (Cell == null) { 
      Cell = Row.createCell(ColNum); 
      Cell.setCellValue(Result); 
     } else { 
      Cell.setCellValue(Result); 
     } 

     // Constant variables Test Data path and Test Data file name 
     FileOutputStream fileOut = new FileOutputStream(Constant.Path_TestData + Constant.File_TestData); 
     ExcelWBook.write(fileOut); 
     fileOut.flush(); 
     fileOut.close(); 

    } catch (Exception e) { 
     throw (e); 
    } 
} 

public static void setupExcelPriceband() throws Exception { 
    Properties p = new Properties(); 
    FileInputStream fi = new FileInputStream("C:\\Users\\gpb7642\\Desktop\\PhAutomationFramework\\PhFramework\\src\\main\\java\\PhFramework\\testData\\Setup.properties"); 
    p.load(fi); 
    priceband = p.getProperty("priceband"); 
    if(priceband.contains("nationala")) { 
     ExcelUtils.setExcelFile(Constant.Path_TestData + Constant.File_TestData,"NationalA"); 
     ExcelUtils.setCellData("example22222", 1, 1); 
    } 
    else if (priceband.contains("nationalb")) { 
     ExcelUtils.setExcelFile(Constant.Path_TestData + Constant.File_TestData, "NationalB"); 
     ExcelUtils.setCellData("df", 1, 1); 
    }else { 
    } 
} 

}

Excel file

+0

使用XSSFSheet ST = wb.getSheetAt(1); 1表示工作簿的第二張表 –

+0

謝謝@ Phil_P85我需要創建一個新方法嗎? – Gbru

+0

//新方法 \t \t XSSFSheet st = ExcelWBook.getSheetAt(1); \t \t \t \t ExcelUtils.setCellData(「lol」,1,1); – Gbru

回答

0

@Potnuru Ravi感謝您的幫助

下面的代碼似乎已經做特技:

public void setCellData(String sheetName, int colNum, int rowNum, String str) { 
    int index = workbook.getSheetIndex(sheetName); 
    sheet = workbook.getSheetAt(index); 
    row = sheet.getRow(rowNum); 
    cell = row.createCell(colNum); 
    cell.setCellValue(str); 
    try { 
     fileOut = new FileOutputStream(path); 

     try { 
      workbook.write(fileOut); 
      fileOut.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
}