XSSFSheet: Sheet 索引超出范围
XSSFSheet: Sheet index is out of range
我想用 POI
写入 xlsx 文件的内容,但得到了一个 IllegalArgumentException
.
以下是我的代码:
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();
}
}
我遇到的异常是:
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)
我确实有第 18 个 sheet。任何帮助将不胜感激。
...
// Get first sheet from the workbook
//XSSFSheet sheet = wBook.getSheetAt(18); Instead,
XSSFSheet sheet = wBook.getSheetAt(17);
...
正如你所说,你在那个文件中只有 18 个 excel sheet,如果你要在 excel 文件中获得第 18 个 sheet,你必须从 18 中减去 1。指定 17。
索引从 0
开始,而不是 1
。
我想用 POI
写入 xlsx 文件的内容,但得到了一个 IllegalArgumentException
.
以下是我的代码:
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();
}
}
我遇到的异常是:
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)
我确实有第 18 个 sheet。任何帮助将不胜感激。
...
// Get first sheet from the workbook
//XSSFSheet sheet = wBook.getSheetAt(18); Instead,
XSSFSheet sheet = wBook.getSheetAt(17);
...
正如你所说,你在那个文件中只有 18 个 excel sheet,如果你要在 excel 文件中获得第 18 个 sheet,你必须从 18 中减去 1。指定 17。
索引从 0
开始,而不是 1
。