Automatyczna wysokość rozmiaru dla linii w Apache POI


Wprowadzam wartości do arkusza kalkulacyjnego przy użyciu Apache POI. Te wartości to znaki nowej linii i udało mi się pomyślnie użyć tego kodu:
CellStyle style = cell.getCellStyle()
style.setWrapText(true)
cell.setCellStyle(style)

Niestety, mimo że tekst zawija się prawidłowo, wiersze nie zawsze rosną wystarczająco wysoko, aby wyświetlić treść. Jak mogę się upewnić, że moje linki są zawsze na właściwej wysokości?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

currentRow.setHeight((short)-1)

Działa dla XSSFCell i Excel 2013
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

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

Powyższy kod wygeneruje dynamiczne wysokości linii.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jedynym sposobem, aby to zadziałało, jest napisanie własnej implementacji obliczającej wysokość linii. Kod jest teraz wydany jako projekt

Tarot
https://github.com/jbrundege/taro/wiki
więc możesz go używać. Ma wiele przydatnych technik pisania pliku Excel w znacznie mniejszej liczbie wierszy kodu.
Jeśli wolisz umieścić implementację we własnym kodzie, możesz ją znaleźć w klasie

SpreadsheetTab
https://github.com/jbrundege/t ... va... W połowie drogi istnieje metoda autoSizeRow (int rowIndex). Zasadniczo wykonuje iterację w dół wiersza i znajduje liczbę wierszy tekstu dla każdej komórki, a następnie wykorzystuje rozmiar czcionki do obliczenia optymalnej wysokości komórki. Następnie ustawia wysokość wiersza na wysokość najwyższej komórki.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Widzieć wszystko

ten link
http://mail-archives.apache.or ... %253E
który zawiera kod do ręcznego obliczania prawidłowej wysokości wiersza na podstawie szerokości kolumny i zawartości komórki. Osobiście tego nie testowałem. Wklejono również poniżej dla wygody:
// 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.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Nie można bezpośrednio dostosować wysokości komórki.
Ale możesz zmienić wysokość wiersza
final HSSFSheet fs = wb.createSheet("sheet1");
final HSSFRow row0 = fs.createRow(0);
final HSSFCell cellA1 = row0.createCell(0);
row0.setHeight((short)700);
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

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

Pracował nad HSSFCell w apache poi 3.9 lub nowszym
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Działa w programie Excel 2010.
Ustawiłem limit długości komórki na 50 znaków
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);
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Praca w rzędzie dla mnie:
cell.getRow().setHeight((short)0);

Tutaj
0
służy do automatycznego obliczania wysokości.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

// możemy użyć szerokości kolumny dla arkusza
Ex: sheet.setColumnWidth(0, 2000);

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się