Насколько я понял, ваша проблема в том, что последнее значение в исходной таблице печатается в каждой ячейке таблицы Excel.
Кусок кода, который записывается в электронную таблицу, выглядит следующим образом:
cell.setCellValue(Avg.toString());
Вы не добавили этот фрагмент кода в цикл, который создает ячейки для каждой записи в вашем источнике данных. Вы должны заполнять строки по мере их создания. Используя пример Apache POI:
public byte[] export(List<String> exportList) throws Exception{
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Export");
for(int i=0; i< exportList.size(); i++) {
Row row = sheet.createRow(i);
row.createCell(0)
.setCellValue(exportList.get(i));
}
ByteArrayOutputStream bos = new ByteArrayOutputStream();
workbook.write(bos);
bos.close();
return bos.toByteArray();
}
Для редактирования существующих таблиц Excel вы должны использовать цикл, который проходит по всем существующим строкам, заполняя его требуемым значением. Пример:
for(int i=0; i< sheet.getLastRowNum(); i++) {
Row row = sheet.getRow(i);
row.getCell(0)
.setCellValue(exportList.get(i)); // Insert the number of the cell herer (column)
}