Java 在自动调整列大小时,如何强制Apache POI使用单元格格式?

Java 在自动调整列大小时,如何强制Apache POI使用单元格格式?,java,excel,apache-poi,Java,Excel,Apache Poi,我正在使用ApachePOI生成Excel电子表格.xlsx。我的许多单元格样式都包含数据格式字符串,但当包含此类样式的列自动调整大小时,列宽将基于未格式化的单元格内容 例如: DataFormat format = wb.createDataFormat(); CellStyle dollars_m = wb.createCellStyle(); dollars_m.setDataFormat(format.getFormat("_($* #,##0.0,,\"m\"_);_($* (#,##

我正在使用ApachePOI生成Excel电子表格.xlsx。我的许多单元格样式都包含数据格式字符串,但当包含此类样式的列自动调整大小时,列宽将基于未格式化的单元格内容

例如:

DataFormat format = wb.createDataFormat();
CellStyle dollars_m = wb.createCellStyle();
dollars_m.setDataFormat(format.getFormat("_($* #,##0.0,,\"m\"_);_($* (#,##0.0,,\"m\");_(@_)"));
单元格值123456789.01将调整大小,就好像该单元格包含12个字符,而不是实际包含的8个$12350万


我可以在自动调整大小之前强制公式自行解析,是否有一种方法可以强制应用格式?

从3.10开始,Apache POI现在在确定autoSizeColumn中列的宽度之前应用格式。在调用autoSizeColumn之前,必须使用DataFormatterEvaluageIncell对公式单元格进行求值,否则宽度将基于缓存的公式结果。

Apache POI已尝试根据应用于单元格的格式字符串对其进行格式化,然后再自动调整单元格大小。看见你确定你在自动调整大小的机器上安装了正确的字体,并且正在运行最新版本的Apache POI吗?该项目是在3.9上,我将其移动到了3.10。该行为在3.10中发生了变化,现在对于公式单元格来说太窄了。当我在调用autoSizeColumn之前计算所有单元格时,列的大小都正确。啊,是的,它对缓存的公式值有效。您需要先计算公式结果,然后才能知道该值的大小