所以我必须在Google表格中进行工作表/窗格。我的“设置”工作表包含许多复选框。
我想要的是能够基于这些复选框的真/假状态显示/隐藏第二张工作表中的特定列。
想法是每个复选框都对应于第二张工作表中的特定列。
我知道如何在Excel中执行此操作,但是除了今天早上我能使用Google之外,我几乎没有Google Apps脚本方面的经验。
有人能帮助我指出正确的道路吗?
作为参考,下面包括了我用于Excel中相同功能的Visual Basics脚本:
Private Sub CheckBox17_Click()
['Competitive Matrix (EMEA NE)'!S:S].EntireColumn.Hidden = Not CheckBox17
End Sub
答案 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涵盖得很好,请查看这些页面以了解上面使用的功能:
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