Json 在Google工作表中折叠所有具有一定深度的组
我正在尝试创建一个允许查看多个层次细节的谷歌表单。 其思想是使用“宏”功能使用快捷方式,为每个细节级别运行一个宏。每个详细级别显示具有特定深度组的活动图纸。 i、 e.当我为最顶层视图运行宏时,所有行组都将折叠:Json 在Google工作表中折叠所有具有一定深度的组,json,google-apps-script,google-sheets,Json,Google Apps Script,Google Sheets,我正在尝试创建一个允许查看多个层次细节的谷歌表单。 其思想是使用“宏”功能使用快捷方式,为每个细节级别运行一个宏。每个详细级别显示具有特定深度组的活动图纸。 i、 e.当我为最顶层视图运行宏时,所有行组都将折叠: function _1stLevelofDetail() { var spreadsheet = SpreadsheetApp.getActive(); spreadsheet.getActiveSheet().collapseAllRowGroups(); }; 当我为最
function _1stLevelofDetail() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getActiveSheet().collapseAllRowGroups();
};
当我为最详细的视图(在我的例子中是第四个)运行宏时,所有行组都会展开:
function _4thLevelofDetail() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getActiveSheet().expandAllRowGroups();
};
如何更改以下代码,使其足够健壮,以便在不中断代码的情况下更新/添加/删除行列
function _3rdLevelofDetail() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getActiveSheet().expandAllRowGroups();
spreadsheet.getActiveSheet().getRowGroup(8, 3).collapse();
spreadsheet.getActiveSheet().getRowGroup(11, 3).collapse();
spreadsheet.getActiveSheet().getRowGroup(14, 3).collapse();
spreadsheet.getActiveSheet().getRowGroup(18, 3).collapse();
spreadsheet.getActiveSheet().getRowGroup(23, 3).collapse();
};
我的想法是获取深度为3的所有行组,但我不知道如何将其转化为代码。代码的问题是,电子表格操作有时会捆绑在一起以提高性能
这意味着,例如,spreadsheet.getActiveSheet().getRowGroup(8,3).collapse()代码>与电子表格.getActiveSheet().expandAllRowGroups()一起调用代码>在前者完成执行之前
这个问题可以通过在每个请求之后实现来解决,当在执行下一行代码之前完成请求非常关键时,这可能会有点耗时
所以,例如
spreadsheet.getActiveSheet().expandAllRowGroups();
SpreadsheetApp.flush();
spreadsheet.getActiveSheet().getRowGroup(8, 3).collapse();
更新:
- 如果要动态折叠特定深度的所有行组,则需要首先检索它们
- 为此,您需要使用,它允许您使用应用程序中脚本的方法
- 启用“高级图纸”服务后,可以按以下方式折叠具有所需深度的所有组:
函数_3rdLevelofDetail(){
var电子表格=SpreadsheetApp.getActive();
电子表格.getActiveSheet().expandAllRowGroups();
var Id=spreadsheet.getId();
变量组=Sheets.Spreadsheets.get(Id{
范围:电子表格.getActiveSheet().getSheetName(),
字段:“工作表/行组”
});
var rowGroups=groups.sheets[0]。rowGroups;
对于(var i=0;i
代码的问题在于,电子表格操作有时会捆绑在一起以提高性能
这意味着,例如,spreadsheet.getActiveSheet().getRowGroup(8,3).collapse()代码>与电子表格.getActiveSheet().expandAllRowGroups()一起调用代码>在前者完成执行之前
这个问题可以通过在每个请求之后实现来解决,当在执行下一行代码之前完成请求非常关键时,这可能会有点耗时
所以,例如
spreadsheet.getActiveSheet().expandAllRowGroups();
SpreadsheetApp.flush();
spreadsheet.getActiveSheet().getRowGroup(8, 3).collapse();
更新:
- 如果要动态折叠特定深度的所有行组,则需要首先检索它们
- 为此,您需要使用,它允许您使用应用程序中脚本的方法
- 启用“高级图纸”服务后,可以按以下方式折叠具有所需深度的所有组:
函数_3rdLevelofDetail(){
var电子表格=SpreadsheetApp.getActive();
电子表格.getActiveSheet().expandAllRowGroups();
var Id=spreadsheet.getId();
变量组=Sheets.Spreadsheets.get(Id{
范围:电子表格.getActiveSheet().getSheetName(),
字段:“工作表/行组”
});
var rowGroups=groups.sheets[0]。rowGroups;
对于(var i=0;i
明白了。不过,最初的问题仍然存在。例如,如何折叠组深度为3的所有行组<代码>电子表格.getActiveSheet().getRowGroup([],3).collapse()代码>首先需要使用Sheets API检索这些行组,请参见我的更新答案。必须更改代码的一部分,然后才能执行此操作var index=rowGroups[i]。range.startIndex+1明白了。不过,最初的问题仍然存在。例如,如何折叠组深度为3的所有行组<代码>电子表格.getActiveSheet().getRowGroup([],3).collapse()代码>首先需要使用Sheets API检索这些行组,请参见我的更新答案。必须更改代码的一部分,然后才能执行此操作var index=rowGroups[i]。range.startIndex+1代码>