使用公式的值时,我很难让列正确地自动调整大小。
我通过将具有最大值的隐藏行作为常量字符串值来“解决”这一点,但这远非优雅,并且通常需要评估每个单元格中的公式以获取生成的最大字符串。虽然这种小型电子表格适用于此类工作,但对于大约16列x~6000行的工作表来说,它变得非常不切实际。
以下代码在OpenOffice中呈现。
package com.shagie.poipoc;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import java.io.FileOutputStream;
public class SimpleBug {
public static void main(String[] args) {
try {
Workbook wb = new HSSFWorkbook();
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
Sheet sheet = wb.createSheet("new sheet");
Row row = sheet.createRow(0);
CellStyle style = wb.createCellStyle();
style.setDataFormat(wb.createDataFormat().getFormat("[h]:mm"));
Cell cell = row.createCell(0);
cell.setCellValue(123.12);
cell.setCellStyle(style);
row.createCell(1).setCellFormula("A1");
row.createCell(2)
.setCellFormula("TRUNC(A1) & \"d \" & TRUNC(24 * MOD(A1,1))" +
" & \"h \" & TRUNC(MOD(60 * 24 * MOD(A1,1),60)) & \"m\"");
row.createCell(3).setCellValue("foo");
for(int i = 0; i < 4; i++) {
sheet.autoSizeColumn(i);
}
wb.write(fileOut);
fileOut.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
相关并尝试过:
Apache POI autoSizeColumn Resizes Incorrectly我尝试了风格中的字体。我得到了一个Java知道的所有字体列表
GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment();
for(String font:e.getAvailableFontFamilyNames()) {
System.out.println(font);
}
我尝试了使用该循环列出的几种字体,而OpenOffice更改了字体,但仍然不正确的列。
答案 0 :(得分:9)
假设您希望根据公式结果获得正确的列大小,只需在执行autoSizeColumn
之前插入以下行,在这种情况下, for
循环:
HSSFFormulaEvaluator.evaluateAllFormulaCells(wb);
原因是autoSizeColumn
根据缓存的公式评估结果调整单元格的大小,如果从未评估公式,则不知道要为其设置的大小。
<强>代码:强>
...
row.createCell(3).setCellValue("foo");
HSSFFormulaEvaluator.evaluateAllFormulaCells(wb);
for (int i = 0; i < 4; i++) {
sheet.autoSizeColumn(i);
}
...