【发布时间】:2014-01-19 11:58:21
【问题描述】:
我正在尝试编写一个基本的 java 程序,该程序从 excel 电子表格中收集数据并将其存储在一个数组中。我遇到的问题是我得到了 ArrayOutOfBounds 异常,但看不到我在数组边界之外的地方。我什至故意将数组的尺寸设置为明显大于循环终止值:
import java.io.File;
import java.io.IOException;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
public class InputArray {
public static void main(String[] args) {
String[][] InputArray1;
int i = 0;
int j = 0;
InputArray1 = new String[220][220];
try{
Workbook OLE1Shots = Workbook.getWorkbook(new File("C:/Book12.xls"));
Sheet inList = OLE1Shots.getSheet(0);
for (i = 0; i < 190; i++){
Cell aCell = inList.getCell(i, 0);
Cell bCell = inList.getCell(i, 1);
String strIn = aCell.getContents();
String strOrd = bCell.getContents();
if (strIn != ""){
InputArray1[0][j] = strIn;
InputArray1[1][j] = strOrd;
j = j + 1;
}
}
}
catch (BiffException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
for (i = 0; i < 190; i++){
System.out.println(InputArray1[0][i]);
System.out.println(InputArray1[1][i]);
}
}
}
我得到的完整信息是:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at jxl.read.biff.SheetImpl.getCell(SheetImpl.java:356)
at InputArray.main(InputArray.java:29)
如果有人能弄清楚这里出了什么问题,那就太好了。希望结果只是我很愚蠢。
编辑:
我在做一些愚蠢的事情。引发错误的原因是我使用 VBA 表示法来表示单元格位置(行、列),而 jxl 使用的是(列、行)。我改变了这些行:
for (i = 0; i < 190; i++){
Cell aCell = inList.getCell(i, 0);
Cell bCell = inList.getCell(i, 1);
对这些:
c = inList.getRows();
for (i = 0; i < c; i++){
Cell aCell = inList.getCell(0, i);
Cell bCell = inList.getCell(1, i);
代码现在运行并正确打印出字符串。但是,我确实不断收到消息
InputArray as localhost contains obsolete methods. The virtual machine was unable to remove all stack frames running old code from the call stack...
【问题讨论】:
-
我认为调试你的代码会有所帮助...
-
在“for”循环之前检查列表的大小。不要试图超越这一点。
-
工作表范围是 24 x 2 单元格的数据,所以我尝试将循环限制降低到 i
标签: java excel loops multidimensional-array jxl