Подтвердить что ты не робот

Автоматическая высота размера для строк в Apache POI

Я вводил значения в электронную таблицу с использованием Apache POI. Эти значения имеют новые строки, и я смог успешно использовать этот код:

CellStyle style = cell.getCellStyle()
style.setWrapText(true)
cell.setCellStyle(style)

К сожалению, в то время как текст обертывается правильно, строки не всегда растут по высоте, чтобы показать контент. Как я могу гарантировать, что мои строки всегда имеют правильную высоту?

4b9b3361

Ответ 1

currentRow.setHeight((short)-1)

Работает для XSSFCell и Excel 2013

Ответ 2

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);

Приведенный выше код будет генерировать динамическую высоту строк.

Ответ 3

Единственный способ, которым я работал, - написать собственную реализацию для вычисления высоты строки. Код теперь выпущен как проект Taro, поэтому вы можете его использовать. Он имеет множество удобных методов, позволяющих вам писать файл Excel в гораздо меньшем количестве строк кода.

Если вы предпочитаете внедрять реализацию в свой собственный код, вы можете найти ее в классе SpreadsheetTab. Существует метод autoSizeRow (int rowIndex) на полпути вниз. Он в основном выполняет итерацию по строке и для каждой ячейки находит количество строк текста, а затем использует размер шрифта для вычисления оптимальной высоты ячейки. Затем он устанавливает высоту строки в высоту самой высокой ячейки.

Ответ 4

Посмотрите все эту ссылку, в которой содержится некоторый код, который вручную вычисляет правильную высоту для строки на основе ширины столбца и содержимого ячейки. Я лично не проверял его. Также для удобства: далее

// 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.

Ответ 5

Вы не можете настроить высоту ячейки напрямую. Но вы можете изменить высоту строки

final HSSFSheet fs = wb.createSheet("sheet1");
final HSSFRow row0 = fs.createRow(0);
final HSSFCell cellA1 = row0.createCell(0);
row0.setHeight((short)700);

Ответ 6

cell.getRow().setHeight((short) -1);

Работал для HSSFCell в apache poi 3.9 или выше

Ответ 7

Мне нужно сделать aitosize:

cell.getRow().setHeight((short)0);

Здесь 0 для вычисления autoheight.

Ответ 8

Он работает в 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);
    }

Ответ 9

//мы можем использовать ширину столбца для листа

Ex: sheet.setColumnWidth(0, 2000);