Apache POI自动调整百分比格式的单元格

时间:2014-04-16 15:55:34

标签: java excel apache-poi

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

编辑:

enter image description here

所以这就是发生的事情,左边的VAR已经因任何原因而被正确地自动调整,但是右边的VAR没有。

EDIT2:

我注意到,仅当单元格值为0.00%时才会发生这种情况。因此,具有####的VAR列中的所有值均为0,而VAR列左侧列中的某些值为非零。

2 个答案:

答案 0 :(得分:1)

虽然这可能不是一个理想的解决方案,但有一种可能性是抓住你插入单元格的字符串的大小(即" 50.00%" = 6的大小),然后设置单元格宽度基于该手动。

答案 1 :(得分:1)

我担心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);