Я реализую приведенный ниже фрагмент кода для экспорта файла xls в браузере в приложении Spring:

@RequestMapping(method = RequestMethod.POST, value = ResourcesPath.EXCEL,
        consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
@ResponseStatus(HttpStatus.OK)
public void loadExcel(ReportFilter filter, HttpServletResponse response) throws
        IOException {

    List<ReportItemVO> result = // list of ReportItemVO ...
    Date today = new Date();
    response.addHeader("Content-Disposition", "attachment; filename=today.getTime() + ".xls");

    BufferedOutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
    xlsExportService.saveSpreadsheetRecords(ReportItemVO.class, result, outputStream);

    outputStream.flush();
    outputStream.close();
}

public interface XlsExportService extends SpreadsheetService {
}
@Autowired
private XlsExportService xlsExportService;

Здесь все работает хорошо при экспорте данных result.size () <65535. В противном случае выдается "java.lang.IllegalArgumentException: недопустимый номер строки (65536) вне допустимого диапазона (0..65535)".

Я обнаружил, что saveSpreadsheetRecords использует HSSFSheet, который ограничен 65535 строками, и что мне нужно использовать XSSHSheet, но я не нашел никаких подсказок, чтобы использовать это таким образом, чтобы (ReportItemVO.class, result, outputStream) в качестве ввод.

Есть идеи, пожалуйста?

0
Belham 13 Мар 2018 в 18:46

2 ответа

Лучший ответ

Вы должны реализовать SpreedsheetService, а не расширять его

@Component
public class XlsExportService implements SpreedsheetService {

}

Затем вы можете указать методы использования XSSFSheet вместо HSSFSheets.

1
locus2k 13 Мар 2018 в 16:16

В старом формате XLS для Excel максимальное количество строк составляет 65535: см. .

Попробуйте сохранить в формате XLSX, в котором до 1 048 576 строк.

1
steenbergh 13 Мар 2018 в 15:59