[]
        
(Showing Draft Content)

行或列分组信息

GCExcel可以使用IOutline接口上的getRowGroupInfogetColumnGroupInfo 方法检索行或列组的信息

您可以使用IGroupInfo接口中的expand和STRONG>collapse方法标识分组存在的单元格范围,并可以展开或折叠分组。

IGroupInfo接口同时提供getStartIndex, getEndIndex, getLevel, getParent, getChildren and IsCollapsed 方法,可以用来检索分组的起始、结束索引,层级,父级,子级及折叠状态。

获取行分组信息

参考下面代码示例,使用getRowGroupInfo方法获取行分组信息。 使用collapse方法折叠分组,并标识行级别为2的行。

//create a new workbook
Workbook workbook = new Workbook();
IWorksheet sheet = workbook.getActiveSheet();
IRange targetRange = sheet.getRange("A1:C9");
// Set data
targetRange.setValue(new Object[][]
{
    {"Player", "Side", "Commander"},
    {1, "Soviet", "AI"},
    {2, "Soviet", "AI"},
    {3, "Soviet", "Human"},
    {4, "Allied", "Human"},
    {5, "Allied", "Human"},
    {6, "Allied", "AI"},
    {7, "Empire", "AI"},
    {8, "Empire", "AI"}
});

// Subtotal
targetRange.subtotal(
    2, // Side
    ConsolidationFunction.Count,
    new int[] { 2 } // Side
);

List groupInfo = sheet.getOutline().getRowGroupInfo();

HashMap rowInfo = new HashMap<>();

for (IGroupInfo item : groupInfo) {
    if (item.getChildren() != null) {
        for (IGroupInfo childItem : item.getChildren()) {
            if (childItem.getStartIndex() > 3) {
                childItem.collapse();
            }
            if (childItem.getLevel() == 2) {
                rowInfo.put(childItem.getStartIndex(), childItem.getEndIndex());
            }
        }
    }
}

StringBuilder builder = new StringBuilder();
for (Map.Entry item : rowInfo.entrySet()) {
    builder.append("row " + (item.getKey() + 1) + " to row " + (item.getValue() + 1) + ", ");
}

sheet.getRange("A15").setValue("The rows where the group level is 2 are: " + builder.toString());
sheet.getRange("A15").setRowHeight(25);
sheet.getRange("A15").getFont().setColor(Color.GetRed());
sheet.getRange("A15").getFont().setSize(15);

//save to an excel file
workbook.save("GetRowGroupInfo.xlsx");

获取列分组信息

参考下列代码,使用getColumnGroupInfo方法获取行分组信息, 使用collapse方法折叠组。

//create a new workbook
Workbook workbook = new Workbook();
IWorksheet worksheet = workbook.getWorksheets().get(0);
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}
};

worksheet.getRange("A1:F7").setValue(data);
worksheet.getRange("A:F").setColumnWidth(15);

worksheet.getRange("A:F").group();
worksheet.getRange("A:B").group();
worksheet.getRange("D:E").group();

List groupInfo = worksheet.getOutline().getColumnGroupInfo();
HashMap colInfo = new HashMap<>();

for (IGroupInfo item : groupInfo) {
    if (item.getChildren() != null) {
        for (IGroupInfo childItem : item.getChildren()) {
            if (childItem.getStartIndex() > 2) {
                childItem.collapse();
            }
            if (childItem.getLevel() == 2) {
                colInfo.put(childItem.getStartIndex(), childItem.getEndIndex());
            }
        }
    }
}

StringBuilder builder = new StringBuilder();
for (Map.Entry item : colInfo.entrySet()) {
builder.append("column " + (item.getKey() + 1) + " to column " + (item.getValue() + 1) + ", ");
}

worksheet.getRange("A12").setValue("The columns where the group level is 2 are: " + builder.toString());
worksheet.getRange("A12").setRowHeight(25);
worksheet.getRange("A12").getFont().setColor(Color.GetRed());
worksheet.getRange("A12").getFont().setSize(15);

//save to an excel file
workbook.save("GetColumnInfo.xlsx");