Java 使用ApachePOI在工作表中自动筛选

Java 使用ApachePOI在工作表中自动筛选,java,apache-poi,Java,Apache Poi,我使用的是ApachePOI,其中我将autofilter设置为all column。我也通过筛选1列来获取数据,但当我想筛选2列并获取数据时,并没有在工作表中应用任何一列(筛选器) outputSheet.setAutoFilter(CellRangeAddress.valueOf("A1:F136")); CTAutoFilter sheetFilter=outputSheet.getCTWorksheet().getAutoFilter(); CTFilterColumn myFil

我使用的是ApachePOI,其中我将autofilter设置为all column。我也通过筛选1列来获取数据,但当我想筛选2列并获取数据时,并没有在工作表中应用任何一列(筛选器)

outputSheet.setAutoFilter(CellRangeAddress.valueOf("A1:F136"));
CTAutoFilter sheetFilter=outputSheet.getCTWorksheet().getAutoFilter();


CTFilterColumn  myFilterColumn=sheetFilter.insertNewFilterColumn(0);
myFilterColumn.setColId(1);

CTFilterColumn  myFilterColumn2=sheetFilter.insertNewFilterColumn(1);
myFilterColumn2.setColId(6);

CTFilters firstColumnFilter=myFilterColumn.addNewFilters();
CTFilter myFilter1=firstColumnFilter.addNewFilter();

CTFilters secondColumnFilter=myFilterColumn2.addNewFilters();
CTFilter myFilter2=secondColumnFilter.addNewFilter();


myFilter1.setVal("fidelity.com");
myFilter2.setVal("US");

List<String> list1 = new ArrayList<String>();
list1.add("Ad Cloud");

List<String> list2 = new ArrayList<String>();
list2.add("US");

XSSFRow r1;

for(Row r : my_sheet) {
    for (Cell c : r) {

        c.setCellType(Cell.CELL_TYPE_STRING);
        if ( (c.getColumnIndex()==1 && !list2.contains(c.getStringCellValue())) || (c.getColumnIndex()==6 && !list1.contains(c.getStringCellValue())) ){
            r1=(XSSFRow) c.getRow();

            if (r1.getRowNum()!=0) { /* Ignore top row */
                /* Hide Row that does not meet Filter Criteria */
                r1.getCTRow().setHidden(true); 
            }
        }
    }
}

outputworkbook.write(fos);
    fos.close();
    //format(outputFile);
}
outputSheet.setAutoFilter(CellRangeAddress.valueOf(“A1:F136”));
CTAutoFilter sheetFilter=outputSheet.GetCTWorker().getAutoFilter();
CTFilterColumn myFilterColumn=sheetFilter.insertNewFilterColumn(0);
myFilterColumn.setColId(1);
CTFilterColumn myFilterColumn2=sheetFilter.insertNewFilterColumn(1);
myFilterColumn2.setColId(6);
CTFilters firstColumnFilter=myFilterColumn.addNewFilters();
CTFilter myFilter1=firstColumnFilter.addNewFilter();
CTFilters secondColumnFilter=myFilterColumn2.addNewFilters();
CTFilter myFilter2=secondColumnFilter.addNewFilter();
myFilter1.setVal(“fidelity.com”);
myFilter2.setVal(“美国”);
List list1=新的ArrayList();
列表1.添加(“广告云”);
List list2=新的ArrayList();
清单2.添加(“美国”);
XSSFRow r1;
用于(r行:我的工作表){
用于(单元c:r){
c、 setCellType(Cell.Cell\u TYPE\u字符串);
如果((c.getColumnIndex()==1&&!list2.contains(c.getStringCellValue()))| |(c.getColumnIndex()==6&&!list1.contains(c.getStringCellValue())){
r1=(XSSFRow)c.getRow();
如果(r1.getRowNum()!=0){/*忽略顶行*/
/*隐藏不符合筛选条件的行*/
r1.getCTRow().setHidden(true);
}
}
}
}
输出工作簿。写入(fos);
fos.close();
//格式(输出文件);
}

.setAutoFilter(CellRangeAddress.valueOf(“A1:F136”))
myFilterColumn2.setColId(6)
:列Id
6
是列
G
,因为列
A
0
。因此,您正在设置过滤器范围之外的过滤器列。另外,您的代码通过更改列id和setVal仍然不起作用来设置筛选器值
myFilter1.setVal(“fidelity.com”)
和隐藏行
list1.add(“Ad Cloud”)
的值