根据复选框显示/隐藏特定的列

时间:2019-02-11 10:43:19

标签: checkbox google-apps-script google-sheets show-hide

所以我必须在Google表格中进行工作表/窗格。我的“设置”工作表包含许多复选框。

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

想法是每个复选框都对应于第二张工作表中的特定列。

我知道如何在Excel中执行此操作,但是除了今天早上我能使用Google之外,我几乎没有Google Apps脚本方面的经验。

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

作为参考,下面包括了我用于Excel中相同功能的Visual Basics脚本:

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

1 个答案:

答案 0 :(得分:0)

它将比Visual Basic版本更加冗长:)

function hideColumns() {
  // takes active spreadsheet (the one the script is bound to) into work
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var settingsSheet = ss.getSheetByName('Settings'); // insert your sheet name here
  var dataSheet = ss.getSheetByName('Data');
  // gets values from all the cells in the settings sheet into a two-dimensional array, like [[1, 2],[3, 4]]
  var values = settingsSheet.getDataRange().getValues(); 
  for (var i in values) {
    // checks every row of data if the value in first column is false or not
    if (values[i][0] == 'false') { 
      // my assumption is that each of your checkboxes is on a new line; 
      // hideColumn will hide those columns that correspond to rows to in the settings sheet
      dataSheet.hideColumn(dataSheet.getRange(1, i)); 
    }
  }
}

Google Apps脚本具有关于其几乎所有服务的非常好的文档,SpreadsheetApp涵盖得很好,请查看这些页面以了解上面使用的功能:

hideColumn()

getRange()

getValues()

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));
  }
}

e函数中,有关onEdit对象的更多信息:https://developers.google.com/apps-script/guides/triggers/events