使用Apache-POI隐藏所有额外的excel列

这是我的目标:

带有隐藏的额外列的excel屏幕截图

我正在使用Apache POI生成一个xlsx文件。 我想隐藏所有未使用的列在我正在使用的列的右侧。 在Excel中,这是一个相对简单的操作:我可以select所有无关列,并告诉它们全部隐藏在一个操作中。 在Apache POI中,我似乎有唯一的select是sheet.setColumnHidden(index, true) 。 如果我试图为每一个无关列做这个:

 for (int i = myLastColumn+1; i < 16384; ++i) { sheet.setColumnHidden(i, true); } 

那么图书馆会试图创build超过16000列以隐藏它们,这是不切实际的:它变得越来越慢,并且永远不会结束。 似乎没有一个setColumnRangeHidden或类似的东西。

有没有办法隐藏Apache POI中几乎所有的列?

最后,通过查看XSSFSheetXSSFSheet如何工作,我设法find了我所缺less的function。

当您尝试隐藏单个列时, ColumnHelper为您请求的索引(如果不存在)创build一个新列,然后将其设置为隐藏。 但是,列对象实际上是一个CTColminmax字段设置为相同的索引。 如果使用不同的minmax字段创buildCTCol对象,则可以在一个操作中设置所有匹配列的状态。

从而:

 CTCol col = sheet.getCTWorksheet().getColsArray(0).addNewCol(); col.setMin(myLastColumn+2); col.setMax(16384); // the last column (1-indexed) col.setHidden(true);