Ответ 1
currentRow.setHeight((short)-1)
Работает для XSSFCell и Excel 2013
Я вводил значения в электронную таблицу с использованием Apache POI. Эти значения имеют новые строки, и я смог успешно использовать этот код:
CellStyle style = cell.getCellStyle()
style.setWrapText(true)
cell.setCellStyle(style)
К сожалению, в то время как текст обертывается правильно, строки не всегда растут по высоте, чтобы показать контент. Как я могу гарантировать, что мои строки всегда имеют правильную высоту?
currentRow.setHeight((short)-1)
Работает для XSSFCell и Excel 2013
HSSFWorkbook workbook=new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("FirstSheet");
HSSFRow rowhead= sheet.createRow((short)0);
HSSFCellStyle style = workbook.createCellStyle();
style.setWrapText(true);
row.setRowStyle(style);
row.getCell(0).setCellStyle(style);
Приведенный выше код будет генерировать динамическую высоту строк.
Единственный способ, которым я работал, - написать собственную реализацию для вычисления высоты строки. Код теперь выпущен как проект Taro, поэтому вы можете его использовать. Он имеет множество удобных методов, позволяющих вам писать файл Excel в гораздо меньшем количестве строк кода.
Если вы предпочитаете внедрять реализацию в свой собственный код, вы можете найти ее в классе SpreadsheetTab. Существует метод autoSizeRow (int rowIndex) на полпути вниз. Он в основном выполняет итерацию по строке и для каждой ячейки находит количество строк текста, а затем использует размер шрифта для вычисления оптимальной высоты ячейки. Затем он устанавливает высоту строки в высоту самой высокой ячейки.
Посмотрите все эту ссылку, в которой содержится некоторый код, который вручную вычисляет правильную высоту для строки на основе ширины столбца и содержимого ячейки. Я лично не проверял его. Также для удобства: далее
// Create Font object with Font attribute (e.g. Font family, Font size, etc) for calculation
java.awt.Font currFont = new java.awt.Font(fontName, 0, fontSize);
AttributedString attrStr = new AttributedString(cellValue);
attrStr.addAttribute(TextAttribute.FONT, currFont);
// Use LineBreakMeasurer to count number of lines needed for the text
FontRenderContext frc = new FontRenderContext(null, true, true);
LineBreakMeasurer measurer = new LineBreakMeasurer(attrStr.getIterator(), frc);
int nextPos = 0;
int lineCnt = 0;
while (measurer.getPosition() < cellValue.length())
{
nextPos = measurer.nextOffset(mergedCellWidth); // mergedCellWidth is the max width of each line
lineCnt++;
measurer.setPosition(nextPos);
}
Row currRow = currSht.getRow(rowNum);
currRow.setHeight((short)(currRow.getHeight() * lineCnt));
// The above solution doesn't handle the newline character, i.e. "\n", and only
// tested under horizontal merged cells.
Вы не можете настроить высоту ячейки напрямую. Но вы можете изменить высоту строки
final HSSFSheet fs = wb.createSheet("sheet1");
final HSSFRow row0 = fs.createRow(0);
final HSSFCell cellA1 = row0.createCell(0);
row0.setHeight((short)700);
cell.getRow().setHeight((short) -1);
Работал для HSSFCell в apache poi 3.9 или выше
Мне нужно сделать aitosize:
cell.getRow().setHeight((short)0);
Здесь 0
для вычисления autoheight.
Он работает в Excel 2010. Я установил ограничение длины ячейки в 50 символов.
Row row = sheet.createRow(0);
CellStyle style = workbook.createCellStyle();
style.setWrapText(true);
if (data.length() > 50) {
for (int i = 1; i <= Math.abs(data.length() / 50); i++) {
data = data.substring(0, i * 50) + "\n" + data.substring(i * 50);
}
Cell cell = row.createCell(0);
row.setRowStyle(style);
cell.setCellStyle(style);
cell.setCellValue(data);
sheet.autoSizeColumn(0);
}
//мы можем использовать ширину столбца для листа
Ex: sheet.setColumnWidth(0, 2000);