[]
        
(Showing Draft Content)

排序

为了高效地组织数据并快速查找相关信息,GcExcel Java允许用户对工作表中的数据执行排序操作。

sort方法可用于根据单元格范围、值范围、颜色或电子表格中的图标执行排序。 apply 方法用于应用选定的排序状态并显示排序结果。

注意: 如果要合并的单元格大小相同,也可以对合并的单元格执行排序操作。

GcExcel Java中可用的不同排序类型解释如下:

按值排序

按值排序是指根据单元格值按特定顺序排列数据的排序操作。setOrientation方法用于指定排序的方向类别,即列或行。

要执行按值排序操作,请参阅以下示例代码。

// Assigning values to the range
worksheet.getRange("A1").setValue(2);
worksheet.getRange("A2").setValue(1);
worksheet.getRange("A3").setValue(1);
worksheet.getRange("A4").setValue(3);
worksheet.getRange("B1").setValue("g");
worksheet.getRange("B2").setValue("z");
worksheet.getRange("B3").setValue("z1");
worksheet.getRange("B4").setValue("a");

// Apply Sort by value using IRange.Sort() method
worksheet.getRange("A1:B4").sort(worksheet.getRange("A1:A4"), SortOrder.Ascending, SortOrientation.Columns);

多列按值排序

按值排序是指通过一行代码对多列执行的排序操作。您还可以按升序或降序指定列的方向。

要按值对多个列进行排序,请参阅以下示例代码。

// Assigning values to the range
worksheet.getRange("A1").setValue(2);
worksheet.getRange("A2").setValue(1);
worksheet.getRange("A3").setValue(1);
worksheet.getRange("A4").setValue(1);
worksheet.getRange("B1").setValue("g");
worksheet.getRange("B2").setValue("z");
worksheet.getRange("B3").setValue("a");
worksheet.getRange("B4").setValue("b");

// Sort by value, multiple column sort uses IRange.Sort() method
worksheet.getRange("A1:B4").sort(SortOrientation.Columns, false,
new ValueSortField[] { new ValueSortField(worksheet.getRange("A1:A2"), SortOrder.Ascending),
new ValueSortField(worksheet.getRange("B1:B2"), SortOrder.Descending) });

自定义排序

排序是一项常见的任务,但并非所有数据类型都要遵循常见的升序和降序排序规则。例如,如果按字母顺序排序,月份就不能以有意义的方式排序。在这种情况下,gcexceljava允许用户执行自定义排序。

要实现自定义排序,请参阅以下示例代码。

// Assigning values to the range
worksheet.getRange("A1").setValue("test");
worksheet.getRange("A2").setValue(3);
worksheet.getRange("A3").setValue(5);
worksheet.getRange("A4").setValue(1);
worksheet.getRange("A5").setValue(2);
worksheet.getRange("A6").setValue(4);

// Define a custom sort value string
ValueSortField sortkey = new ValueSortField(worksheet.getRange("A1:A2"), "1,2,3");
worksheet.getRange("A2:A6").sort(SortOrientation.Columns, false, sortkey);

按内部排序

按内部排序是指根据内部颜色、图案、图案颜色、渐变颜色和渐变角度执行的排序操作。但是,不能基于单元格颜色执行内部排序。

要执行按内部排序操作,请参阅以下示例代码。

// Create a new workbook and add data 
 Workbook workbook = new Workbook();
 Object data = new Object[][]{
          {"Name", "City", "Birthday", "Eye color", "Weight", "Height"},
          {"Richard", "New York", new GregorianCalendar(1968, 5, 8), "Blue", 67, 165},
          {"Nia", "New York", new GregorianCalendar(1972, 6, 3), "Brown", 62, 134},
          {"Jared", "New York", new GregorianCalendar(1964, 2, 2), "Hazel", 72, 180},
          {"Natalie", "Washington", new GregorianCalendar(1972, 7, 8), "Blue", 66, 163},
          {"Damon", "Washington", new GregorianCalendar(1986, 1, 2), "Hazel", 76, 176},
          {"Angela", "Washington", new GregorianCalendar(1993, 1, 15), "Brown", 68, 145}
  };
  IWorksheet worksheet = workbook.getWorksheets().get(0);
  worksheet.getRange("A1:F7").setValue(data);
  worksheet.getRange("A:F").setColumnWidth(15);
  
  // Set color to the range 
  worksheet.getRange("F2").getInterior().setColor(Color.GetLightPink());
  worksheet.getRange("F3").getInterior().setColor(Color.GetLightGreen());
  worksheet.getRange("F4").getInterior().setColor(Color.GetLightPink());
  worksheet.getRange("F5").getInterior().setColor(Color.GetLightGreen());
  worksheet.getRange("F6").getInterior().setColor(Color.GetLightBlue());
  worksheet.getRange("F7").getInterior().setColor(Color.GetLightPink());

  // "F4" will at the top.
  worksheet.getSort().getSortFields().add(new CellColorSortField(worksheet.getRange("F2:F7"), worksheet.getRange("F4").getDisplayFormat().getInterior(), SortOrder.Ascending));
  worksheet.getSort().setRange(worksheet.getRange("A2:F7"));
  worksheet.getSort().setOrientation(SortOrientation.Columns);
  // Apply sort
  worksheet.getSort().apply();

按字体颜色排序

按字体颜色排序是指根据单元格的显示格式和字体颜色执行的排序操作。但是,排序操作不会基于单元格颜色执行。

要执行按字体颜色排序,请参阅以下示例代码。

// Assigning values to the range
worksheet.getRange("A1").setValue(2);
worksheet.getRange("A2").setValue(1);
worksheet.getRange("A3").setValue(1);
worksheet.getRange("A4").setValue(3);
worksheet.getRange("B1").setValue(2);
worksheet.getRange("B2").setValue(1);
worksheet.getRange("B3").setValue(1);
worksheet.getRange("B4").setValue(3);
        
// Assigning color to the range
worksheet.getRange("B1").getFont().setColor(Color.FromArgb(0, 128, 0));
worksheet.getRange("B2").getFont().setColor(Color.FromArgb(128, 0, 0));
worksheet.getRange("B3").getFont().setColor(Color.FromArgb(0, 0, 128));
worksheet.getRange("B4").getFont().setColor(Color.FromArgb(128, 128, 0));
        
// Defining sort by color
worksheet.getSort().getSortFields().add(new FontColorSortField(worksheet.getRange("B1:B4"),
worksheet.getRange("B1").getDisplayFormat().getFont().getColor(), SortOrder.Descending));
worksheet.getSort().setRange(worksheet.getRange("A1:B4"));
worksheet.getSort().setOrientation(SortOrientation.Columns);
worksheet.getSort().apply();

按图标排序

按图标排序是指基于单元格的条件格式图标执行的排序操作。

要执行按图标排序操作,请参阅以下示例代码。

// Assigning values to the range
worksheet.getRange("A1").setValue(2);
worksheet.getRange("A2").setValue(1);
worksheet.getRange("A3").setValue(1);
worksheet.getRange("A4").setValue(3);
worksheet.getRange("B1").setValue(2);
worksheet.getRange("B2").setValue(1);
worksheet.getRange("B3").setValue(1);
worksheet.getRange("B4").setValue(3);
        
// Defining sort by icon
IIconSetCondition iconset = worksheet.getRange("B1:B4").getFormatConditions().addIconSetCondition();
iconset.setIconSet(workbook.getIconSets().get(IconSetType.Icon3TrafficLights1));
worksheet.getSort().getSortFields().add(new IconSortField(worksheet.getRange("B1:B4"),
workbook.getIconSets().get(IconSetType.Icon3TrafficLights1).get(0), SortOrder.Ascending));
worksheet.getSort().setRange(worksheet.getRange("A1:B4"));
worksheet.getSort().setOrientation(SortOrientation.Columns);
worksheet.getSort().apply();