Я хочу написать многострочный текст в одной ячейке, но без их переноса.
Ожидание:
Я начинаю с простого:
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("First text line. \r\nNew line.");
Это не работает, но я обнаружил (1 , 2 , 3 , 4), что мне нужно setWrapText(true), чтобы показать новые строки и установить высоту строки:
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("First text line. \r\nNew line.");
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setWrapText(true);
cell.setCellStyle(cellStyle);
row.setHeightInPoints(2 * sheet.getDefaultRowHeightInPoints());
Работает (видны новые строки, высота в две строки), но текст переносится.
Если я setWrapText(false), я возвращаюсь к тому, с чего начал (новые строки не видны):
Как показать новые строки, но не переносить текст?
Apache POI 5.2.4, Libre Office.
В MS Excel вы правы. Даже если я вставляю многострочный текст и снимаю флажок Wrap text, новые строки скрываются. Но в LibreOffice Calc это работает по-другому. Если я вставляю многострочный текст, он не переносится. Я могу Format Cells -> Wrap text устанавливать и снимать отметки, и новые строки сохраняются. Вы можете увидеть это на первом экране (я сделал это вручную в Libre). Вот почему я предположил, что это возможно в Apache POI. Возможно, библиотека делает именно то, что возможно в MS Excel.
Хорошие наблюдения! Я не уверен, почему существует разница. Удачи!




Apache POI создает формат файла Office Open XML, и этот формат файла не может хранить то, что показывает ваш первый снимок экрана — одна ячейка с несколькими текстовыми строками, где текст, тем не менее, выходит за правую границу ячейки.
Libreoffice использует формат файлов Open Document, который может хранить то, что показывает ваш первый снимок экрана.
Создайте то, что показывает ваш первый снимок экрана, с помощью Libreoffice Calc. Затем сохраните это как *.xlsx (в Libreoffice это формат Excel 2007-365). Теперь закройте и снова откройте файл. Вы увидите переполнение: правая граница ячейки исчезла.
Теперь снова создайте то, что показано на вашем первом снимке экрана, с помощью Libreoffice Calc. Затем сохраните это как *.ods (формат ODF). Теперь закройте и снова откройте файл. Вы получите его в точности таким, каким получили спасение.
Итак, проблема заключается в формате файла Office Open XML *.xlsx и формате файла Open Document *.ods. А Apache POI предназначен только для создания формата файлов Office Open XML.
Примечание к последнему предложению: Apache POI может создавать *xlsx (XSSFWorkbook), но также может создавать *.xls (HSSFWorkbook). Но в целом вы, конечно, правы (он не может создать *.ods, поэтому невозможно то, что я хотел).
Если вы откроете Excel и щелкните правой кнопкой мыши пустую ячейку, а затем выберите
format cell, вы увидите, чтоWrap textподAlignmentне выбрано. Если вы скопируете строку с новой строкой и повторите те же действия еще раз, вы увидите, чтоWrap textбыл автоматически проверен. Для меня это означает, что новая линия не будет работать, еслиWrap textне будет правдой.