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

如何在Google Sheets Apps Script中移除旧分组并创建新分组

解决Google Sheets脚本中分组堆叠的问题

核心解决方案

在创建新的任务-里程碑分组前,先清除工作表中所有已有的行分组,避免新旧分组堆叠。

具体代码修改

在你的updateTaskMilestoneTest函数中,在执行创建分组的逻辑前,添加以下代码来清除所有旧分组:

// 清除Gantt Chart工作表中所有行分组
ganttSheet.clearRowGroups();

如果clearRowGroups()方法不适用(比如需要保留特定层级分组),也可以遍历所有现有分组并逐个移除:

// 遍历并移除所有行分组
const rowGroups = ganttSheet.getRowGroups();
rowGroups.forEach(group => {
  ganttSheet.removeRowGroup(group);
});

集成到现有代码示例

把清除分组的代码放在获取工作表之后、处理任务数据之前:

function updateTaskMilestoneTest() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const ganttSheet = ss.getSheetByName("Gantt Chart");
  const roleSheet = ss.getSheetByName("Roles");

  // --- 新增:清除所有旧分组 ---
  ganttSheet.clearRowGroups();
  // --------------------------

  var lastCol = ganttSheet.getLastColumn();
  var lastRow = ganttSheet.getLastRow();
  var headerRow = ganttSheet.getRange('headerRow').getRow();
  var firstTask = headerRow + 1;
  var taskNumCol = ganttSheet.getRange('taskNum').getColumn();
  var taskCol = ganttSheet.getRange('taskNames').getColumn();
  var roleCol = roleSheet.getRange('Roles').getColumn();
  var taskRoleCol = ganttSheet.getRange('taskRole').getColumn();
  var taskScanMarkerCell = ganttSheet.getRange(lastRow +1, taskCol);
  var lastTaskRow = taskScanMarkerCell.getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
  var lastRoleRow = roleSheet.getRange('Roles').getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow();
  var rolesRange = roleSheet.getRange(1, roleCol, lastRoleRow, 1);
  var taskStartWeekCol = ganttSheet.getRange('startWeek').getColumn();
  var taskStatusCol = ganttSheet.getRange('taskStatus').getColumn();
  var taskExpDurationCol = ganttSheet.getRange('expDuration').getColumn();
  var ganttWeeksRow = ganttSheet.getRange('ganttWeeks').getRow();
  var ganttFirstWeekCol = ganttSheet.getRange('firstWeek').getColumn();
  var defaultBGColor = "#ffffff";
  var roleColors = rolesRange.getBackgrounds();
  //identify selected row
  var selection = ss.getSelection();
  var selectionRange = selection.getActiveRange();
  var selectedTaskRow = selectionRange.getRow();
  
  //reset background of the task row
  var taskRowRange = ganttSheet.getRange(selectedTaskRow, 1, 1, lastCol);
  taskRowRange.setBackground(defaultBGColor);

  Logger.log(selectedTaskRow);

  //run the program for the single row
  const updateTask = {
    "taskNumber" : ganttSheet.getRange(selectedTaskRow, taskNumCol).getValue(),
    "milestoneStatus" : Number.isInteger(ganttSheet.getRange(selectedTaskRow, taskNumCol).getValue()), //true or false
    "name" : ganttSheet.getRange(selectedTaskRow, taskCol).getValue(),
    "status" : ganttSheet.getRange(selectedTaskRow, taskStatusCol).getValue(),
    "taskRole" : ganttSheet.getRange(selectedTaskRow, taskRoleCol).getValue(),
    "assignee" : [],
    "dependency" : {
      "status" : [],
      "parent" : [],
      "type" : [],
      "buffer" : []
    },
    "startDate" : [],
    "endDate" : [],
    "duration" : []
  }

  Logger.log(updateTask.milestoneStatus); 

  var checkTaskCell = ganttSheet.getRange(selectedTaskRow, taskCol);
  var checkTaskCellValue = checkTaskCell.getValue();
  var checkTaskRoleCell = ganttSheet.getRange(selectedTaskRow, taskRoleCol);
  var checkTaskRoleCellValue = checkTaskRoleCell.getValue();
  var checkTaskStartWeekCell = ganttSheet.getRange(selectedTaskRow, taskStartWeekCol);
  var checkTaskStartWeekValue = checkTaskStartWeekCell.getValue();
  var checkTaskExpDurationCell = ganttSheet.getRange(selectedTaskRow, taskExpDurationCol);
  var checkTaskExpDurationValue = checkTaskExpDurationCell.getValue();
  var ganttTaskRange = ganttSheet.getRange(selectedTaskRow, ganttFirstWeekCol, 1, lastRow);
  
  // --- 此处执行你的分组创建逻辑 ---
}

关键说明

  • clearRowGroups()会一次性移除工作表中所有行分组,完全适配你需要重置分组后重新创建的场景。
  • 若需精细控制(比如仅移除特定范围的分组),可通过getRowGroups()获取分组对象,检查分组的起始/结束行后选择性移除。

内容的提问来源于stack exchange,提问作者Christian Butcher

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:57:17