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

Java 使用Apache POI隐藏所有额外的excel列,java,excel,apache-poi,Java,Excel,Apache Poi,这是我的目标: 我正在使用ApachePOI生成一个xlsx文件。我想将所有未使用的列隐藏在我正在使用的列的右侧。在Excel中,这是一个相对简单的操作:我可以选择所有无关的列,并告诉它们全部隐藏在一个操作中。在ApachePOI中,我似乎只有一个选择。如果我尝试对每个无关的列执行此操作: for (int i = myLastColumn+1; i < 16384; ++i) { sheet.setColumnHidden(i, true); } for(int i=myLa

这是我的目标:

我正在使用ApachePOI生成一个xlsx文件。我想将所有未使用的列隐藏在我正在使用的列的右侧。在Excel中,这是一个相对简单的操作:我可以选择所有无关的列,并告诉它们全部隐藏在一个操作中。在ApachePOI中,我似乎只有一个选择。如果我尝试对每个无关的列执行此操作:

for (int i = myLastColumn+1; i < 16384; ++i) {
    sheet.setColumnHidden(i, true);
}
for(int i=myLastColumn+1;i<16384;+i){
sheet.setColumnHidden(i,true);
}
然后库试图创建超过16000个列来隐藏它们,这是不切实际的:它会越来越慢,而且永远不会结束。似乎没有
setColumnRangeHidden
之类的东西


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

最后,通过查看
XSSFSheet
ColumnHelper
的工作原理,我找到了我所缺少的功能

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

因此:


最后,通过查看
XSSFSheet
columnheloper
的工作原理,我找到了我所缺少的一些功能

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

因此:

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