Checkbox 基于复选框显示/隐藏特定列

Checkbox 基于复选框显示/隐藏特定列,checkbox,google-apps-script,google-sheets,show-hide,Checkbox,Google Apps Script,Google Sheets,Show Hide,因此,我必须在谷歌工作表中创建工作表/窗格。我的“设置”-工作表包括许多复选框 我想要的是能够根据这些复选框的真/假状态在第二张工作表中显示/隐藏特定列 其想法是,每个checbox将对应于第二页中的特定列 我知道如何在Excel中实现这一点,但除了今天早上在Google上实现的功能外,我在Google应用程序脚本方面几乎没有任何经验 有人能帮我指出正确的道路吗 以下是我在Excel中用于相同函数的Visual Basic脚本,仅供参考: Private Sub CheckBox17_Click

因此,我必须在谷歌工作表中创建工作表/窗格。我的“设置”-工作表包括许多复选框

我想要的是能够根据这些复选框的真/假状态在第二张工作表中显示/隐藏特定列

其想法是,每个checbox将对应于第二页中的特定列

我知道如何在Excel中实现这一点,但除了今天早上在Google上实现的功能外,我在Google应用程序脚本方面几乎没有任何经验

有人能帮我指出正确的道路吗

以下是我在Excel中用于相同函数的Visual Basic脚本,仅供参考:

Private Sub CheckBox17_Click()
['Competitive Matrix (EMEA NE)'!S:S].EntireColumn.Hidden = Not CheckBox17
End Sub

它将比VisualBasic版本更加详细:)

Google Apps Script提供了关于其几乎所有服务的非常好的文档,SpreadsheetApp介绍得非常好,请查看这些页面,了解上面使用的功能:

UPD: 使用
onEdit
功能的版本-它查看编辑的单元格并检查它是否在“设置”表的第一列中,以及新值是否为
true
。如果全部为真,它将在“数据”中隐藏与已编辑行对应的列

function onEdit(e) {
  var dataSheet = e.source.getSheetByName('Data');
  var currentSheet = e.range.getSheet().getName();
  var row = e.range.getRow();
  var col = e.range.getColumn();
  if (currentSheet === 'Settings' && col === 1 && e.value.toLowerCase() == 'false') {
    dataSheet.hideColumn(dataSheet.getRange(1, row));
  }
}

有关
onEdit
函数中
e
对象的更多信息:

非常感谢您的帮助和输入-将明确检查这些链接:)只需一些快速跟进:1)带有复选框的“设置”中的列实际上是第三列,因此我猜它应该是:如果(值[I][3]='false')?2) 我需要此函数/脚本不断检查和更新值。我是否需要使用“OnEdit”触发器来执行此操作,或者如何执行此操作?目前它似乎没有自动更新。
getValues
将数据表示为基于0的js数组(是的,我在示例中犯了一个错误,现在将修复它),因此第三列将是
values[I][2]
(注意,
getRange
函数在这方面是不同的,要获取第一行和第三列中单元格的值,您将使用
getRange(1,3).getValue()
-以防万一)。至于跟踪更改-是的,在这种情况下,您应该尝试
onEdit
。将函数更改为onEdit()或者我需要制作一个可安装的触发器吗?如果您只跟踪当前电子表格中的更改,那么纯onEdit就可以了,您需要一个可安装的触发器来通过另一个电子表格中的代码查找其他电子表格中的更改。感谢您的更新,这似乎更简单:)-我仍然从第2行得到一个错误:TypeError:无法从undefined读取属性“source”。(linje 2,fil“SHowHideColumns”)
function onEdit(e) {
  var dataSheet = e.source.getSheetByName('Data');
  var currentSheet = e.range.getSheet().getName();
  var row = e.range.getRow();
  var col = e.range.getColumn();
  if (currentSheet === 'Settings' && col === 1 && e.value.toLowerCase() == 'false') {
    dataSheet.hideColumn(dataSheet.getRange(1, row));
  }
}