Как продолжить цикл и создать новую ячейку на основе arraylist - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть имя строкового массива в виде кода:

[a,b,c,d]

и другой строковый массив, содержащий данные, подобные этому имени в формате 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]

Что я хочу сделатьэто я хочу записать в ArrayList DWS в файл Excel следующим образом:

enter image description here

Я пробовал следующим образом:

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));
                }
            }
        }

но результат, который я получаю: enter image description here

Есть идеи, как решить эту проблему?

ОБНОВЛЕНИЕ

Я изменяю свой код, как это предложено:

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));
        }
    }

, и результат выглядит так:

enter image description here

Это только циклпервые 7 данных.Мне нужно, чтобы продолжить для остальной части arraylist.как на первом изображении.

ОБНОВЛЕНИЕ

Позвольте мне еще раз объяснить поток моего кода

1) Он зациклит массив DWS на первыйячейка, которая является ячейкой № 5 и цикл до последней строки, которая строка № 7,

2) затем, после того, как она достигнет строки № 7, затем якобы создаст новую ячейку, которая в строке Cell cell = row2.createCell(m * 3 + 4);, а затем сновапродолжить цикл из данных массивов DWS.

3) эти шаги будут продолжаться до тех пор, пока не будут получены последние данные массивов DWS

. Возможно ли это сделать?

ОБНОВЛЕНИЕ 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;
    }

enter image description here

ОБНОВЛЕНИЕ 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++;

            }
        }
    }

Результат примерно такой:

enter image description here

Но когда я пытаюсь установить 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 Ответ

0 голосов
/ 07 декабря 2018

Здесь есть 3 цикла!Однако, как я вижу, вы создаете ячейки в третьем цикле, где значение x является последним представительным значением из DWS.Если DWS является просто источником значений ячеек, то для этого у вас должен быть отдельный индекс, а не цикл для этого.

В этом случае, хотя вы не понимаете с самого конца, он создает таблицы времени DWS.size и его ячейки!Вы не понимаете это из результата, потому что вы видите последнюю выполненную таблицу, которая содержит только значение d77.И вы помещаете ТОЛЬКО одно значение во все ячейки, потому что в последнем цикле DWS.get (x) всегда постоянен, вам не нужно этого делать.

Вы должны поместить различные значения в каждую ячейку.

Решение: Вам нужно всего 2 петли.

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
    }
}
...