При попытке открыть файл, я получаю сообщение об ошибке «Мы обнаружили проблему с некоторым содержимым в *.xlsx. Хотите, чтобы мы попытались восстановить его, насколько это возможно». При нажатии «Да» файл открывается как в Windows, так и на Mac, и все данные присутствуют, но не в виде табличного объекта. Попытка открыть файл с помощью листов Google работает без проблем, а объект таблицы имеет границу.
Проблема сохранялась и тогда, когда я пытался сохранить его непосредственно на компьютере сервера, поэтому я не Я не думаю, что проблема на стороне клиента.
Код, генерирующий массив байтов:
Код: Выделить всё
private byte[] generateExcelBytes(List data) {
try (XSSFWorkbook workbook = new XSSFWorkbook()) {
XSSFSheet sheet = workbook.createSheet("Data");
CellStyle headerStyle = workbook.createCellStyle();
Font headerFont = workbook.createFont();
headerFont.setBold(true);
headerFont.setFontHeightInPoints((short) 14);
headerStyle.setFont(headerFont);
CellStyle dataStyle = workbook.createCellStyle();
Font dataFont = workbook.createFont();
dataFont.setFontHeightInPoints((short) 12);
dataStyle.setFont(dataFont);
createTable(sheet, 0, 0, headerStyle, dataStyle, data);
// Write the workbook content to a ByteArrayOutputStream
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
workbook.write(outputStream);
return outputStream.toByteArray();
} catch (IOException e) {
logger.error("Exception when creating xlsx file for account {} CDI status tables", account.getId(), e);
}
return null;
}
private void createTable(XSSFSheet sheet, int startRow, int startCol, CellStyle headerStyle, CellStyle dataStyle, List data) {
// Create sample data (replace with your actual data generation logic)
Row headerRow = sheet.createRow(startRow);
// for each header
createCell(headerRow, startCol + X, HEADER_NAME, headerStyle);
// Create data rows
for (int i = 0; i < data.size(); i++) {
DATA_OBJECT data_object = data.get(i);
Row dataRow = sheet.createRow(startRow + i + 1);
// for each data object
createCell(dataRow, startCol, data_object.get_relevant_value, dataStyle);
}
int endRow = startRow + baseHoldings.size();
int endCol = startCol + NUM_OF_COLUMNS;
XSSFAutoFilter autoFilter = sheet.setAutoFilter(new CellRangeAddress(startRow, endRow, startCol, endCol));
for (int i = startCol; i
Подробнее здесь: [url]https://stackoverflow.com/questions/78701282/apache-poi-xlsx-we-found-a-problem-with-some-content-in-xlsx-do-you-want-us[/url]