2016-07-01 19 views
1

Ich versuche, den Inhalt der xlsx-Datei mit POI zu schreiben, aber habe eine IllegalArgumentException.XSSFSheet: Blatt-Index liegt außerhalb des Bereichs

Im Anschluss ist mein Code:

public static void ConvertToCSVOrgtoOrg(String Scenario) throws Exception { 

    String IntermediateXLSXPath=GetFileDetailsSIF(Scenario,"ExcelPath"); 
    String IntermediateCSVPath=GetFileDetailsSIF(Scenario,"CSVPathOrgtoOrg"); 

    File inputFile = new File(IntermediateXLSXPath); 
    File outputFile = new File(IntermediateCSVPath); 
    // For storing data into CSV files 
    StringBuffer data = new StringBuffer(); 

    try { 
     FileOutputStream fos = new FileOutputStream(outputFile); 
     // Get the workbook object for XLSX file 
     XSSFWorkbook wBook = new XSSFWorkbook(new FileInputStream(inputFile)); 
     XSSFFormulaEvaluator.evaluateAllFormulaCells(wBook); 
     // Get first sheet from the workbook 
     XSSFSheet sheet = wBook.getSheetAt(18); 
     XSSFFormulaEvaluator.evaluateAllFormulaCells(wBook); 

     Row row; 
     Cell cell; 
     // Iterate through each rows from first sheet 
     Iterator<Row> rowIterator = sheet.iterator(); 

     while (rowIterator.hasNext()) { 
      row = rowIterator.next(); 
      data.append("\n"); 

      // For each row, iterate through each columns 
      Iterator<Cell> cellIterator = row.cellIterator(); 
      while (cellIterator.hasNext()) { 
       cell = cellIterator.next(); 

       switch (cell.getCellType()) { 
        case Cell.CELL_TYPE_BOOLEAN: 
         data.append(cell.getBooleanCellValue()); 
         break; 

        case Cell.CELL_TYPE_NUMERIC: 
         data.append(cell.getNumericCellValue()); 
         break; 

        case Cell.CELL_TYPE_STRING: 
         data.append(cell.getStringCellValue()); 
         break; 

        case Cell.CELL_TYPE_FORMULA: 
         data.append(cell.getStringCellValue()); 

        case Cell.CELL_TYPE_BLANK: 
         break; 
        default: 
       } 
      } 
     } 

     fos.write(data.toString().getBytes()); 
     Thread.sleep(1000); 
     fos.close(); 

    } catch (Exception ioe) { 
     ioe.printStackTrace(); 
    } 

} 

Die Ausnahme Ich erhalte ist:

java.lang.IllegalArgumentException: Sheet index (18) is out of range (0..17) 
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.validateSheetIndex(XSSFWorkbook.java:1205) 
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.getSheetAt(XSSFWorkbook.java:960) 
    at BasicCoreFramework.ObjectUtilities.ConvertToCSVOrgtoOrg(ObjectUtilities.java:1625) 
    at TestUtilities.FileManipulation.PostAggregationScenario1Functionality(FileManipulation.java:40) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85) 
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:639) 
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:816) 
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1124) 
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125) 
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108) 
    at org.testng.TestRunner.privateRun(TestRunner.java:774) 
    at org.testng.TestRunner.run(TestRunner.java:624) 
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:359) 
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:354) 
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:312) 
    at org.testng.SuiteRunner.run(SuiteRunner.java:261) 
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) 
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) 
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1215) 
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1140) 
    at org.testng.TestNG.run(TestNG.java:1048) 
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:126) 
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:137) 
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:58) 

Ich habe ein 18.es Blatt. Jede Hilfe würde sehr geschätzt werden.

+0

Der Index beginnt mit "0" anstelle von "1". Wenn Sie das 18. Blatt bekommen, müssen Sie minus 1 von 18 nehmen. – mob41

+0

Ich denke, der Fehler ist sehr klar: "IllegalArgumentException: Blatt-Index (18) ist außerhalb des Bereichs (0..17)" – Seelenvirtuose

Antwort

1
... 
// Get first sheet from the workbook 
//XSSFSheet sheet = wBook.getSheetAt(18); Instead, 
XSSFSheet sheet = wBook.getSheetAt(17); 
... 

Wie Sie sagten, Sie haben nur 18 Excel-Tabellen in dieser Datei, wenn Sie das 18. Blatt in der Excel-Datei erhalten gehen, müssen Sie sich auf minus 1 von 18 Geben 17.

Index ist Start von 0 anstelle von 1.