Создайте новый класс для сохранения информации о положении данных:
class DataPosition {
public Integer colNum;
public Integer rowNum;
public DataPosition(Integer colNum,Integer rowNum) {
this.colNum = colNum;
this.rowNum = rowNum;
}
}
Зацикливая данные, вы проверяете, включен ли deviceId в excel.Если это так, вы используете последний столбец и номер строки, соответствующий этому идентификатору устройства.Если он не включен, то используйте информацию о последнем столбце, чтобы добавить новые данные устройства и сохранить их на карте, содержащей положение этих данных
Map<String, DataPosition> excelIds = new HashMap<>();
DataPosition position;
// Start at -2 so when it comes to the first value, you add 2 to place the column number to 0
Integer currentColNum = -2;
Integer currentRowNum = 1;
HSSFRow row;
for (DataClass e: getdata) {
position = excelIds.get(e.getDeviceId());
if (position != null) {
// Add a new row
position.rowNum++;
currentRowNum = position.rowNum;
} else {
// Add a new column (increments by two because you need two columns for the representation)
currentColNum += 2;
currentRowNum = 1;
excelIds.put(e.getDeviceId(), new DataPosition(currentColNum, currentRowNum));
}
row = sheet.getRow(currentRowNum);
if (row == null) {
row = sheet.createRow(currentRowNum);
}
row.createCell(currentColNum).setCellValue(e.getValue());
row.createCell(currentColNum + 1).setCellValue(e.getDate());
}