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);
Apache poi 3.9以上でHSSFCellで働いた
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);
}
私のための行aitosize作業:
cell.getRow().setHeight((short)0);
ここに 0
自動高さを計算します。