我有一个字符串arraylist名称,代码如下:
[a,b,c,d]
以及另一个字符串arraylist,其中包含类似以下名称的数据作为dws:
[a11,a22,a33,a44,a55,a66,a77,b11,b22,b33,b44,b55,b66,b77,c11,c22,c33,c44,c55,c66,c77,d11,d22,d33,d44,d55,d66,d77]
我要做的是将dws arraylist写入excel文件,如下所示:
我试过这样做:
FileInputStream file1 = new FileInputStream(new File(namefile));
XSSFWorkbook wb1 = new XSSFWorkbook(file1);
XSSFSheet sheet1 = wb1.getSheetAt(0);
int limit = 7;
for (int m = 0; m < code.size(); m++) {
for (int x = 0; x < DWS.size(); x++) {
for (int i = 0; i < limit; i++) {
Row row2 = sheet1.getRow(i + 2);
Cell cell = row2.createCell(m * 3 + 4);
cell.setCellValue(DWS.get(x));
}
}
}
但我得到的结果是:
你知道如何克服这个问题吗?
更新
我按照以下建议更改代码:
int limit = 7;
for (int i = 0; i < limit; i++) {
Row row2 = sheet1.getRow(i + 2);
for (int m = 0; m < code.size(); m++) {
Cell cell = row2.createCell(m * 3 + 4);
cell.setCellValue(DWS.get(i));
}
}
结果是这样的:
它只循环前7个数据。我需要它在arraylist的其余部分继续。就像第一张照片。
更新
让我再解释一下我的代码流程
1) 它将dws arraylist循环到第一个单元格,即第5单元格,并循环到最后一行,即第7行,
2) 然后,在它到达第7行之后,它应该会创建一个新的单元格,该单元格与 Cell cell = row2.createCell(m * 3 + 4);
然后再次从dws arraylist数据继续循环。
3) 此步骤将继续,直到到达dws的最后一个arraylist数据
有可能吗?
更新2.0
我改为:
int cellValueIndex = 0;
for (int i = 0; i < limit; i++) {
Row row2 = sheet1.getRow(i + 2);
for (int m = 0; m < code.size(); m++) {
Cell cell = row2.createCell(m * 3 + 4);
cell.setCellValue(DWS.get(cellValueIndex));
cellValueIndex++;
}
}
但我犯了这样的错误:
java.lang.IndexOutOfBoundsException
更新3.0
我改成这个,但结果还是错的
int cellValueIndex = 0;
for (int i = 0; i < limit; i++) {
Row row2 = sheet1.getRow(i + 2);
for (int m = 0; m < code.size(); m++) {
Cell cell = row2.createCell(m * 3 + 4);
cell.setCellValue(DWS.get(cellValueIndex));
}
cellValueIndex = cellValueIndex + 1;
}
更新4.0
我有零钱:
int cellValueIndex = 0;
int counter = 0;
for (int i = 0; i < limit; i++) {
Row row2 = sheet1.getRow(i + 2);
Cell cell = row2.createCell(4);
cell.setCellValue(DWS.get(cellValueIndex));
cellValueIndex++;
int x = row2.getRowNum();
if (x == limit) {
for (int m = 1; m < code.size(); m++) {
Cell cell1 = row2.createCell(m * 3 + 4);
cell1.setCellValue(DWS.get(cellValueIndex + 1));
cellValueIndex++;
}
}
}
结果如下:
但是当我试图设置i=0;,这样地:
int cellValueIndex = 0;
for (int i = 0; i < total1; i++) {
Row row2 = sheet1.getRow(i + 2);
Cell cell = row2.createCell(4);
cell.setCellValue(DWS.get(cellValueIndex));
cellValueIndex++;
int x = row2.getRowNum();
if (x == total1) {
i = 0;
for (int m = 1; m < shiftcode.size(); m++) {
Cell cell1 = row2.createCell(m * 3 + 4);
cell1.setCellValue(DWS.get(cellValueIndex));
cellValueIndex++;
i++;
}
}
}
我犯了这样的错误:
java.lang.IndexOutOfBoundsException
1条答案
按热度按时间ndh0cuux1#
这里有3个for循环!但是,正如我看到的,您正在第三个循环中创建单元格,其中x的值是dws中最后一个表示值。若dws只是单元格值的一个来源,那个么应该有一个单独的索引,而不是保持一个循环。
在本例中,尽管您没有从最终结果中意识到,它正在创建dws.size times表及其单元格!您不能从结果中认识到这一点,因为您看到的是最后一个执行的表,它只包含值d77。你只给所有单元格加一个值,因为在最后一个循环中dws.get(x)总是常量,你不必这样做。
你必须给每个单元格加上不同的值。
解决方案:您只需要两个循环。