如何在使用NPOI创建的Excel文档中将列设置为“自动调整大小”?

21

NPOI 是 Java POI 项目的 .NET 移植版,可以读写 Microsoft Excel 文档(以及其他 Office 格式)。NPOI 1.2.2 版本引入了自适应列宽功能,可以将列设置为该列中最宽单元格条目的宽度。然而,有很多报告称这不起作用。那么,有可能吗?


(注:原文中的“autosizing”翻译为“自适应”,也可以翻译为“自动调整”或“自动调整大小”,具体根据上下文和需求而定)

根据我的经验,mySheet.AutoSizeColumn(columnIndex); 这种类型的使用确实有效,但并非在所有情况下都有效。如果您将列格式化为带有筛选器的表格,则通过双击在 Excel 中执行的自动调整大小会考虑到下拉筛选器的宽度。代码版本会忽略筛选器图标。它也无法很好地处理包含数据的最后一列或超过某个最大宽度的列进行自动调整大小。 - cusman
2个回答

38

我发表这篇文章只是为了回答这个问题,以提供一个记录。使用NPOI可以使列自动调整大小,但您必须将所有数据添加到列中,而不是行中。一旦向列@ columnIndex添加了所有单元格,然后调用

mySheet.AutoSizeColumn(columnIndex)

并移动到下一列。我没有找到其他使这个功能工作的方法。


2
我没有按照你建议的“按列”添加数据,但是AutoSizeColumn(columnIndex)方法对我来说仍然完美地工作。 - JohnB
我认为这一定是一个错误,在后来的版本中得到了修复,因为我将所有数据添加为行,并成功使用了上述方法。 - Alexander Van Atta
抱歉,这里不起作用。只说一列。添加标题行。指定样式。添加标题文本。再创建一行。指定样式。添加数据(一个长数字)。指定 AutoSizeColumn()。生成Excel文件。打开它。数字中有'E' - 这意味着列不够宽。 - Just a HK developer
这是数字特有的吗?即。对于长数字,它是否自动调整为科学计数法?如果添加长字符串而不是长数字,您会得到相同的结果吗? - Yellowfog
我尝试首先添加列(即在输入每列时创建行)。这将使除最后一列之外的所有列变为空白。当我添加行,然后添加列(并自动调整大小)时,事情运作得很好。https://stackoverflow.com/questions/45231829/npoi-export-excel-all-columns-but-last-become-blank/45234717#45234717 - Just a HK developer
  1. 现在我将大小指定为12(保持字体为“Arial”),自动大小不完美。一些列的宽度只短了1或2个字符。一行中有长字符串的列被截断。NPOI版本:1.2.5.0。生成的Excel是XLS(HSSF)。使用C#。我认为NPOI在自动调整大小时无法考虑字体大小。你的意见是什么?
- Just a HK developer

6
正如Yellowfog所指示的,以下内容是有效的。
mySheet.AutoSizeColumn(columnIndex)

然而,在这些帖子中存在一些模糊不清的地方。看起来这只是在您完成输入数据、样式等之后才能起作用的方法。因此,只有这样才能使其起作用。

ISheet mySheet = hssfworkbook.CreateSheet("sheet1");
IRow row = mySheet.CreateRow(0);
ICell cell = row.CreateCell(0);
cell.SetCellValue("foo");
mySheet.AutoSizeColumn(0);

但以下内容将不会产生任何效果(因为它没有信息可以自动调整大小)。
ISheet mySheet = hssfworkbook.CreateSheet("sheet1");
mySheet.AutoSizeColumn(0);
IRow row = mySheet.CreateRow(0);
ICell cell = row.CreateCell(0);
cell.SetCellValue("foo");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接