java—如何继续循环并基于arraylist创建新单元格

ldioqlga  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(466)

我有一个字符串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
ndh0cuux

ndh0cuux1#

这里有3个for循环!但是,正如我看到的,您正在第三个循环中创建单元格,其中x的值是dws中最后一个表示值。若dws只是单元格值的一个来源,那个么应该有一个单独的索引,而不是保持一个循环。
在本例中,尽管您没有从最终结果中意识到,它正在创建dws.size times表及其单元格!您不能从结果中认识到这一点,因为您看到的是最后一个执行的表,它只包含值d77。你只给所有单元格加一个值,因为在最后一个循环中dws.get(x)总是常量,你不必这样做。
你必须给每个单元格加上不同的值。
解决方案:您只需要两个循环。

int cellValueIndex = 0;
for (int m = 0; m < limit; m++) {
    // create a row here
    for (int n = 0; n < code.length; n++) {
       // take the value from DWS like DWS.get(cellValueIndex) and 
       // keep increamenting cellValueIndex by one always
    }
}

相关问题