XSSFSheet(Apache POI)排序和过滤

我正在XSSFSheet上创建一个自动filter,如下所示:

sheet.setAutoFilter(new CellRangeAddress(1, sheet.getLastRowNum() + 1, 0, 14)); 

它工作正常,但我也希望它默认按特定列上的升序值排序(第1列从零开始索引)。 有谁知道怎么做?

谢谢! 山姆

1.使用ASPOSE库排序

目前,Apache POI没有可用的排序。 我建议ASPOSE Java用于Apache POI。 使用该库,您的课程将如下所示:

//Obtain the DataSorter object in the workbook DataSorter sorter = workbook.getDataSorter(); //Set the first order sorter.setOrder1(SortOrder.ASCENDING); //Define the first key. sorter.setKey1(0); //Set the second order sorter.setOrder2(SortOrder.ASCENDING); //Define the second key sorter.setKey2(1); //Create a cells area (range). CellArea ca = new CellArea(); //Specify the start row index. ca.StartRow = 1; //Specify the start column index. ca.StartColumn = 0; //Specify the last row index. ca.EndRow = 9; //Specify the last column index. ca.EndColumn = 2; //Sort data in the specified data range (A2:C10) sorter.sort(cells, ca);
//Obtain the DataSorter object in the workbook DataSorter sorter = workbook.getDataSorter(); //Set the first order sorter.setOrder1(SortOrder.ASCENDING); //Define the first key. sorter.setKey1(0); //Set the second order sorter.setOrder2(SortOrder.ASCENDING); //Define the second key sorter.setKey2(1); //Create a cells area (range). CellArea ca = new CellArea(); //Specify the start row index. ca.StartRow = 1; //Specify the start column index. ca.StartColumn = 0; //Specify the last row index. ca.EndRow = 9; //Specify the last column index. ca.EndColumn = 2; //Sort data in the specified data range (A2:C10) sorter.sort(cells, ca); 

参考:: https://asposeapachepoi.codeplex.com/wikipage?title=Sort%20Data

2.使用Java Collections.sort()

如果您不想或不能像我一样使用ASPOSE,您可以创建一个表示源文件中的数据行的类,该类实现java.lang.Comparable 。 覆盖方法compareTo和您的条件,并使用Collections.sort() 来升级排序列表 。 像这样的东西:

 //imports omitted public class MyRow implements Comparable{ private String column1; private int column2; @Override public int compareTo(MyRow o) { return this.column1.compareTo(o.column2); } } 

然后,在您的主类(或您想要对MyRow列表进行排序的类)中,您将编写代码:

 Collections.sort(yourList);