首页 > 解决方案 > Google 电子表格 - 通过脚本展开和折叠组

问题描述

我正在尝试创建一个执行以下操作的简单脚本:

  1. 每当打开文档时,脚本都会检查特定组是否已折叠。如果不是,它就会崩溃。

  2. 创建一个自定义菜单,允许用户切换所述组的外观 - 如果它展开则折叠,反之亦然。

这是我的逻辑-由于某种原因似乎不起作用:(

// Vars and stuff
let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0],
group = sheet.getColumnGroup(2, 1),
view_mode = group.isCollapsed(),
init = true;


// On/Off Functions
function view_mode_on() {
group.collapse();
view_mode = true;
SpreadsheetApp.flush();
};

function view_mode_off() {
group.expand();
view_mode = false;
SpreadsheetApp.flush();
};


// Toggle Function
function view_mode_toggle() {

Logger.log("This call runs when the function starts - view_mode: "+view_mode+", init: "+init);

if ( init == true ) {
    
  init = false;

  if ( view_mode == false ) {
  
    view_mode_on();

  }

} else {

    view_mode == true ? view_mode_off() : view_mode_on();

};

Logger.log("This call runs when the function ends - view_mode: "+view_mode+", init: "+init);

}


// Open Function
function onOpen() {

  SpreadsheetApp.getUi()
  .createMenu('Testmenu')
  .addItem('Toggle Edit Mode', 'view_mode_toggle')
  .addToUi();

  Logger.log("This call runs when the document is opened - view_mode: "+view_mode+", init: "+init);
  view_mode_toggle();

}

我真的很难过 - 脚本似乎运行不可靠:我认为它有时会使团队崩溃,但这并不总是发生。它从来没有扩大过这个群体。不仅如此,有时它会在控制台中打印日志,而有时则不会。最后,它似乎也很慢,我不确定这些脚本是否正常。

任何反馈将不胜感激!

标签: javascriptgoogle-apps-script

解决方案


看来你在这里把事情复杂化了。

  1. 为什么要编写一个脚本来做一些内置函数可以相当容易地完成的事情?你不能只使用组切换吗?任何默认的 Google 表格功能都将比 Apps 脚本更快。
  2. isCollapsed()旨在检查组列的状态,而不是设置它。你试图做的view_mode = false只是不可能工作。

简单的解决方案

用最少的量重写你的脚本:

function onOpen(e){
  let ss = SpreadsheetApp.getActiveSpreadsheet();
  let sheet = ss.getSheets()[0];
  let group = sheet.getColumnGroup(2, 1);
  group.collapse();
}

如果你真的必须建立自己的切换,那么:

function toggle(){
  let ss = let ss = SpreadsheetApp.getActiveSpreadsheet();
  let sheet = ss.getSheets()[0];
  let group = sheet.getColumnGroup(2, 1);
  if (group.isCollapsed()){
    group.expand();
  }
  else {
    group.collapse();
  }
}

当然,将其添加到您的 onOpen(e) 函数中:

SpreadsheetApp.getUi()
.createMenu('Testmenu')
.addItem('Toggle Edit Mode', 'toggle')
.addToUi();

推荐阅读