如何使用Apache-POI获取Excel工作表的默认列宽?

需求

我需要从XSSFSheet获取默认的列宽

途径

XSSFSheet有一个名为getDefaultColumnWidth()的方法:

 public int getDefaultColumnWidth() { CTSheetFormatPr pr = worksheet.getSheetFormatPr(); return pr == null ? 8 : (int)pr.getBaseColWidth(); } 

问题

该方法每次都返回相同的值,即使我更改Excel中的默认列宽。

显然这个方法应该返回默认的列宽,但我认为它实际上不会返回正确的值。

原因

我用Excel自己检查到底发生了什么:

  1. 我改变了Excel中的默认列宽并保存了表格。
  2. 然后,我查找在相应的xml文件中所做的更改Excel:
    • defaultColWidth属性被改变了。
    • baseColWidth属性保持不变。

所以“真正的”和正确的默认列宽存储在defaultColWidth属性中。 因此,该方法应该返回该属性,而是返回基本列的宽度 (正如你在上面的实现中看到的那样)。

在我看来,从上面的方法应该返回pr.getDefaultColWidth()而不是pr.getBaseColWidth()

我认为这个方法是错误的实现,或者我太愚蠢,找不到正确的方法返回正确的值。

如何从包含POI Apache的Excel XSSFSheet获取正确的 默认列宽

问候winklerrr

 getDefaultColumnWidth public int getDefaultColumnWidth() Get the default column width for the sheet (if the columns do not define their own width) in characters. Note, this value is different from getColumnWidth(int). The latter is always greater and includes 4 pixels of margin padding (two on each side), plus 1 pixel padding for the gridlines. Specified by: getDefaultColumnWidth in interface Sheet Returns: column width, default value is 8 

上面清楚地表明,如果列没有自己定义,则默认值为8。 可能是你正在使用错误的API。