You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过代码创建电子表格多分组并设置打开时默认折叠

问题

我想创建一个带多组汇总行的电子表格,要求打开工作簿时所有汇总行默认处于折叠状态。之前试过SummaryRows()方法,但它会把整个表格合并成一个由单个按钮控制的分组。下面的代码能正确设置所有分组,但默认都是展开状态:

// 初始化行索引
var currentRow = 1;

// 遍历包含多个分组的集合
for (var x in arr_x)
{
    // 跳过一行作为分组标题行
    currentRow += 1;

    // 设置当前分组的起始行
    var startRow = currentRow;

    // 遍历当前分组下的项
    foreach (var y in x.arr_y)
    {
        // 处理表格内容
        currentRow++;
    }

    // 获取当前分组的最后一行
    var endRow = currentRow - 1;

    // 对行进行分组
    sheet.Cells[$"{startRow}:{endRow}"].Rows.Group();
}

// 将折叠/展开按钮放在分组上方
sheet.Outline.SummaryRow = SummaryRow.Above;

我想要的最终结构:
默认折叠状态:

+ | 分组1
+ | 分组2
+ | 分组3

展开某一组后:

- | 分组1
  | 项1
  | 项2
  | 项3
+ | 分组2
+ | 分组3
解决方案

要让所有分组默认处于折叠状态,只需在现有代码末尾添加Outline.CollapseAll()方法调用即可。修改后的代码如下:

// 初始化行索引
var currentRow = 1;

// 遍历包含多个分组的集合
for (var x in arr_x)
{
    // 跳过一行作为分组标题行
    currentRow += 1;

    // 设置当前分组的起始行
    var startRow = currentRow;

    // 遍历当前分组下的项
    foreach (var y in x.arr_y)
    {
        // 处理表格内容
        currentRow++;
    }

    // 获取当前分组的最后一行
    var endRow = currentRow - 1;

    // 对行进行分组
    sheet.Cells[$"{startRow}:{endRow}"].Rows.Group();
}

// 将折叠/展开按钮放在分组上方
sheet.Outline.SummaryRow = SummaryRow.Above;

// 折叠所有分组,设置默认状态
sheet.Outline.CollapseAll();

说明

  • Outline.CollapseAll()会一次性折叠所有已创建的分组,完全符合打开工作簿时所有分组默认折叠的需求。
  • 该操作仅修改分组的初始状态,不会改变分组结构,用户后续仍可单独展开任意分组。

内容的提问来源于stack exchange,提问作者S. Davenport

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 07:55:17