NPOI 是 Java POI 项目的 .NET 移植版,可以读写 Microsoft Excel 文档(以及其他 Office 格式)。NPOI 1.2.2 版本引入了自适应列宽功能,可以将列设置为该列中最宽单元格条目的宽度。然而,有很多报告称这不起作用。那么,有可能吗?
(注:原文中的“autosizing”翻译为“自适应”,也可以翻译为“自动调整”或“自动调整大小”,具体根据上下文和需求而定)
我发表这篇文章只是为了回答这个问题,以提供一个记录。使用NPOI可以使列自动调整大小,但您必须将所有数据添加到列中,而不是行中。一旦向列@ columnIndex添加了所有单元格,然后调用
mySheet.AutoSizeColumn(columnIndex)
并移动到下一列。我没有找到其他使这个功能工作的方法。
AutoSizeColumn(columnIndex)
方法对我来说仍然完美地工作。 - JohnBAutoSizeColumn()
。生成Excel文件。打开它。数字中有'E' - 这意味着列不够宽。 - Just a HK developermySheet.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");
mySheet.AutoSizeColumn(columnIndex);
这种类型的使用确实有效,但并非在所有情况下都有效。如果您将列格式化为带有筛选器的表格,则通过双击在 Excel 中执行的自动调整大小会考虑到下拉筛选器的宽度。代码版本会忽略筛选器图标。它也无法很好地处理包含数据的最后一列或超过某个最大宽度的列进行自动调整大小。 - cusman