Я использую 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 неверно. Вы уверены, что значение переменной сохранено правильно?
Вставьте это прямо над вторым циклом, если вы не знаете, как отлаживать. System.out.println(outTotalRows2)
может случиться так, что ваш outputFileName никогда не меняется, поэтому он пытается перезаписать первый и обнаруживает, что это не разрешено. Таким образом, цикл будет выполняться, и только шаг вывода завершится с ошибкой.
Я уверен, что мой outTotalRows2 верен. int outTotalRows1 = outSheet1.getPhysicalNumberOfRows(); int outTotalRows2 = outSheet2.getPhysicalNumberOfRows();, где Sheet outSheet1 = outWorkbook.getSheetAt(0); Sheet outSheet2 = outWorkbook.getSheetAt(1);
@DavisBroda Я думал об этом, но System.out.println("executed"); во втором цикле никогда не запускается
Прежде всего, одно предложение состоит в том, что ... попробуйте выполнить запись excel в самом конце вашего кода ... самый конец означает, что он должен вызываться ТОЛЬКО один раз ... не более одного раза ... Как при выполнении outwrite.close. он освобождает весь этот ресурс. Попробуйте это один раз и поделитесь своими результатами.




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