使用poi自动调整列宽

时间:2014-02-25 04:19:29

标签: java excel apache-poi

我使用POI将数据附加到现有的Excel。但是在附加数据时,编辑前已经存在的excel标头会被压缩到较小的区域。有人可以建议我如何避免这种情况吗?我在追加数据后申请了autoSize,但没有用。

FileInputStream inputStream = new FileInputStream(new File("dataexcel.xlsx"));

    XSSFWorkbook workbook = new XSSFWorkbook(intputStream);
    XSSFSheet sheet = workbook.getSheetAt(0);
    int rowNum = sheet.getPhysicalNumberOfRows();

                    int cellNum = 1;
                    Row lastRow = sheet.createRow(rowNum);

    for(int i =0 ; i<7; i++)
    {
                    Cell cell = lastRow.createCell(cellNum++);
                    cell.setCellValue(value);
                    cell.setCellStyle(generalStyle);
    }

假设标题有一个长文本,如"This is very long text",并将7个值(2,3,1,7,4,6​​,5)附加到每个单元格中的现有Excel,如上所述。然后enitre列的宽度缩小到这些单个数字的值,并且标题的文本几乎不可见,直到它被手动扩展。

3 个答案:

答案 0 :(得分:2)

使用autoSizeColumn()方法?

您的工作表示例如下

+----------+----------+----------+-------------+
| Column A | Column B | Column C | Column D    |
+----------+----------+----------+-------------+
|   xxx    |    xxx   |This is very long text  |
|          |          |          |             |
+----------+----------+----------+-------------+

如果是,请为Column csheet.autoSizeColumn(2);制作自动列大小。结果将是

+----------+----------+------------------------+-------------+
| Column A | Column B | Column C               | Column D    |
+----------+----------+------------------------+-------------+
|   xxx    |    xxx   |This is very long text                |
|          |          |                        |             |
+----------+----------+------------------------+-------------+

答案 1 :(得分:1)

POI 4.0:尝试在调用所有sheet.autoSizeColumn(*)方法之后调用createCell

答案 2 :(得分:0)

我认为这是Apache POI 3.9及更早版本中的一个已知问题。问题是POI将列宽设置为0.尝试更新到POI 3.10并查看是否能解决您的问题。

https://issues.apache.org/bugzilla/show_bug.cgi?id=55644

的更多信息