将Google电子表格单元格折叠为单个单元格

Jor*_*dan 6 google-sheets

我无法弄清楚如何将一个单元格分组以包含可扩展/可折叠的其他单元格.

我想要做的是让单元格A1包含"Stats",而单元格A2,A3,A4,A5在单元格A1中是可折叠/可扩展的.

这可以在Google表格中完成吗?

到目前为止,我唯一可以弄清楚的是"隐藏"行.与Excel相比,它有点痛苦,但是它猜它会起作用,除非有人有类似Excel的方法.

小智 0

这是基于 Google Apps 脚本的 Excel 原生“行组”功能的替代品。在“工具”>“脚本编辑器”中输入脚本后,下次打开电子表格时将看到新菜单“组”。

这些项目是

  • 隐藏组:隐藏所有指定的行组
  • 显示组:取消隐藏所有指定的行组(可以通过单击工作表的左边缘来取消隐藏隐藏行的每个单独组)。
  • 行组:创建由当前选择确定的一组行。在工作表中选择某个范围后使用此选项(列无关紧要,只记录该范围的行跨度)。
  • 取消行分组:删除一个组(如果之前创建了具有精确该行跨度的组)。
  • 清除所有组:删除所有组。

该脚本使用DocumentProperties来存储组信息(作为一对 [第一行,行数])、操作行的hideRows/方法以及向用户显示消息的方法。showRowstoast

代码:

function onOpen() {
  var menu = [{name: "Hide Groups", functionName: "hideGroups"},
              {name: "Show Groups", functionName: "showGroups"},
              {name: "Group Rows", functionName: "groupRows"},
              {name: "Ungroup Rows", functionName: "ungroupRows"},
              {name: "Clear All Groups", functionName: "clearAllGroups"}];
  SpreadsheetApp.getActiveSpreadsheet().addMenu("Groups", menu);
}

function groupRows() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var dp = PropertiesService.getDocumentProperties();
  var groups = JSON.parse(dp.getProperty("groups") || "[]");
  Logger.log(groups);
  var range = SpreadsheetApp.getActiveRange();
  var group = [range.getRow(), range.getHeight()];
  if (groups.some(function (g) {
    return (g[0] == group[0]) && (g[1] == group[1]);
  })) {
    ss.toast("Group already exists");
  }
  else {
    groups.push(group);
    dp.setProperty("groups", JSON.stringify(groups));
    ss.toast("Group added");
  }
}

function ungroupRows() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var dp = PropertiesService.getDocumentProperties();
  var groups = JSON.parse(dp.getProperty("groups") || "[]");
  var range = SpreadsheetApp.getActiveRange();
  var group = [range.getRow(), range.getHeight()];
  var newGroups = groups.filter(function (g) {
    return (g[0] != group[0]) || (g[1] != group[1]);
  });
  if (newGroups.length == groups.length) {
    ss.toast("No such group");
  }
  else {
    dp.setProperty("groups", JSON.stringify(newGroups));
    ss.toast("Group removed");
  }
}

function hideGroups() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var dp = PropertiesService.getDocumentProperties();
  var groups = JSON.parse(dp.getProperty("groups") || "[]");
  for (var i in groups) {
    sheet.hideRows(groups[i][0], groups[i][1]);
  }
}

function showGroups() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var dp = PropertiesService.getDocumentProperties();
  var groups = JSON.parse(dp.getProperty("groups") || "[]");
  for (var i in groups) {
    sheet.showRows(groups[i][0], groups[i][1]);
  }
}

function clearAllGroups() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var dp = PropertiesService.getDocumentProperties();
  dp.deleteProperty("groups");
  ss.toast("All groups removed");
}
Run Code Online (Sandbox Code Playgroud)