自动化一个格式化百分比的单元格的Apache POI

我在自动调整单元格方面遇到了一些问题。 在我的程序填充和格式化每个相应之后,它会自动化单元格,使其看起来在视觉上可以接受。 问题是,当单元格被格式化为百分比时,它会自动调整单元格的大小,而不考虑“%”字符的事实,所以我们最终得到单元格上的####,直到展开单元格为止。 有没有办法让它自动化呢?考虑到额外的'%'字符?

编辑:

在这里输入图像说明

所以这就是发生了什么事情,左边的VAR由于某种原因被正确地自动化了,但是右边的VAR没有。

EDIT2:

我注意到这只发生在单元格值为0.00%的情况下。因此,具有####的VAR列中的所有值均为0,VAR左列中的一些值为非零。

虽然这可能不是一个理想的解决scheme,但一种可能性是获取要插入到单元格中的string的大小(例如,“50.00%”= 6的大小),并根据此值手动设置单元格宽度。

恐怕Apache POI不支持自定义单元格格式,因为它忽略了自定义单元格格式(它只考虑字体特性和旋转,但没有DataFormat)。

作为一种解决方法,您可以尝试编写自定义的autoSizeColumn方法作为当前实现方法的修改,即:

public void autoSizeColumn(Sheet sheet, int column, int plusMinusChars) { double width = SheetUtil.getColumnWidth(sheet, column, false); if (width != -1) { width += plusMinusChars; width *= 256; int maxColumnWidth = 255*256; // The maximum column width for an individual cell is 255 characters if (width > maxColumnWidth) { width = maxColumnWidth; } sheet.setColumnWidth(column, (int)(width)); } } 

然后你可以用一个额外的'%'来打印它:

 //4th column autosized + 1 character in width to accomodate for '%' autoSizeColumn(sheet, 3, 1);