Второй цикл for не работает

Я использую Apache POI для чтения и записи файлов Excel. Однако при попытке записи на два разных листа в одной книге мой второй цикл for не выполняется. Таким образом, выполняется запись только на первый лист, а на второй - нет.

for (int r = 4; r < outTotalRows1; r++) {
    row2 = outSheet1.getRow(r);
    if (row2.getCell(3) == null) {
        for (int t = 3; t <= 47; t++) {
            outCell = row2.createCell(t);
            outCell.setCellValue(BSMeanArray[t - 3]);
            FileOutputStream outWrite = new FileOutputStream(new File(outputFileName));
            outWorkbook.write(outWrite);
            outWrite.close();
        }
    }
    if (row2.getCell(50) == null) { // if the velocity cell is == null, then set cell value to array established and then break
        for (int u = 50; u < 94; u++) {
            outCell = row2.createCell(u); // maybe this line wrong?
            outCell.setCellValue(BFMeanArray[u - 50]);
            FileOutputStream outWrite = new FileOutputStream(new File(outputFileName));
            outWorkbook.write(outWrite);
            outWrite.close();
        }
    }
}

// THIS LOOP NOT EXECUTING
for(int r = 4; r < outTotalRows2; r++){
    System.out.println("executed");
    row3 = outSheet2.getRow(r);
    if (row3.getCell(3) == null) {
        for (int u = 3; u <= 47; u++) {
            outCell = row3.createCell(u);
            outCell.setCellValue(FFSMeanArray[u - 3]);
            FileOutputStream outWrite = new FileOutputStream(new File(outputFileName));
            outWorkbook.write(outWrite);
            outWrite.close();
        }
    }
    if (row3.getCell(50) == null) {
        for (int u = 50; u <= 94; u++) {
            outCell = row3.createCell(u);
            outCell.setCellValue(FFFMeanArray[u - 50]);
            FileOutputStream outWrite = new FileOutputStream(new File(outputFileName));
            outWorkbook.write(outWrite);
            outWrite.close();
        }
    }
}

Вы пробовали отлаживать свой код? В чем ценность outTotalRows2?

user2004685 21.08.2018 22:27

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

Mike Kng 21.08.2018 22:35

Вставьте это прямо над вторым циклом, если вы не знаете, как отлаживать. System.out.println(outTotalRows2)

Sam Orozco 21.08.2018 22:35

может случиться так, что ваш outputFileName никогда не меняется, поэтому он пытается перезаписать первый и обнаруживает, что это не разрешено. Таким образом, цикл будет выполняться, и только шаг вывода завершится с ошибкой.

Davis Broda 22.08.2018 17:55

Я уверен, что мой outTotalRows2 верен. int outTotalRows1 = outSheet1.getPhysicalNumberOfRows(); int outTotalRows2 = outSheet2.getPhysicalNumberOfRows();, где Sheet outSheet1 = outWorkbook.getSheetAt(0); Sheet outSheet2 = outWorkbook.getSheetAt(1);

PotatoMan 22.08.2018 23:01

@DavisBroda Я думал об этом, но System.out.println("executed"); во втором цикле никогда не запускается

PotatoMan 22.08.2018 23:05

Прежде всего, одно предложение состоит в том, что ... попробуйте выполнить запись excel в самом конце вашего кода ... самый конец означает, что он должен вызываться ТОЛЬКО один раз ... не более одного раза ... Как при выполнении outwrite.close. он освобождает весь этот ресурс. Попробуйте это один раз и поделитесь своими результатами.

Sankumarsingh 23.08.2018 09:29
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
7
61
0

Другие вопросы по теме