取消选中数组中的复选框(Google Apps 脚本 - 表格)
Uncheck checkboxes in an array (Google Apps Script - Sheets)
我正在尝试编写一个脚本来查找 Google Sheet 中的所有复选框,并将它们全部重置为未选中状态。 (每天 sheets 清理)我能够从一个 sheet 中获取包含复选框的所有单元格的数组并取消选中它们,但我在这里旋转我的轮子如何有效地获取所有取消选中所有 sheet 上的复选框。我看到有一个名为 uncheck() 的方法,所以这就是我要使用的方法。我的脚本和数组在下面。我的问题是...
目前我正在遍历数组并一次取消选中每个框。脚本有点慢,我的最终目标是让它遍历 spreadsheet 中的所有 sheets。我担心脚本可能会超时。有没有办法一次取消选中 1 sheet 上的所有复选框,而不用一次循环 1 个?或者更好的是让它一次完成所有 sheet 上的所有复选框?显然一次性取消选中它们会更有效率,但如果这是一个选项并且我尝试过的所有方法都没有奏效,我就不知道了。
(我还考虑过每天用一个已经取消选中所有复选框的模板文件替换文件,但是我需要文档 ID 永远不会更改)
如何让我的脚本遍历传播的所有选项卡sheet?那会得到所有 sheet 并做另一个 for 循环吗?或者还有更有效的方法吗?
脚本:
function uncheckCheckboxes() {
var spreadsheet=SpreadsheetApp.getActive(); // get spreadsheet
var sheet=spreadsheet.getActiveSheet(); // get current sheet
var allRange=sheet.getDataRange(); // get all data in sheet
var validations=allRange.getDataValidations();
var Checkboxes=[]; // create empty array
for(var i=0;i<validations.length;i++) {
for(var j=0;j<validations[i].length;j++) {
var rule=validations[i][j];
if(rule!=null) {
var criteria = rule.getCriteriaType();
if(criteria == SpreadsheetApp.DataValidationCriteria.CHECKBOX) {
Checkboxes.push(Utilities.formatString('%s', sheet.getRange(i+1,j+1).getA1Notation())); // get array of only cells w/ checkboxes
}
}
}
}
Logger.log(Checkboxes) // Logging
for (var CB in Checkboxes) { // Loop through array
var checkbox = Checkboxes[CB];
sheet.getRange(checkbox).uncheck(); // uncheck checkbox
}
}
来自 1 sheet 的数组(存储在 'Checkboxes' 变量中):[C3, D3, E3, F3, G3, H3, C4, D4, E4, F4, G4, H4, C5 , D5, E5, F5, G5, H5, C6, D6, E6, F6, G6, H6, C7, D7, E7, F7, G7, H7, C8, D8, E8, F8, G8, H8, C9, D9 , E9, F9, G9, H9, C10, D10, E10, F10, G10, H10, C11, D11, E11, F11, G11, H11, C12, D12, E12, F12, G12, H12, C13, D13, E13 , F13, G13, H13, C14, D14, E14, F14, G14, H14, C15, D15, E15, F15, G15, H15, C16, D16, E16, F16, G16, H16, C17, D17, E17, F17 , G17, H17, C18, D18, E18, F18, G18, H18, C19, D19, E19, F19, G19, H19, C20, D20, E20, F20, G20, H20, C21, D21, E21, F21, G21 , H21, C22, D22, E22, F22, G22, H22, C23, D23, E23, F23, G23, H23, C24, D24, E24, F24, G24, H24, C25, D25, E25, F25, G25, H25
我已经为此工作了几个小时,希望能从真正知道自己在做什么的人那里获得一些专业知识。 (我绝对不是 JavaScript 专家!)
提前致谢。
琥珀色
未经测试,暂时无法测试。
function uncheckCheckboxesFromAllSheets() {
// Should uncheck all checkboxes from all worksheets
// in a given document.
const spreadsheet = SpreadsheetApp.getActive();
for (const sheet of spreadsheet.getSheets()) {
Logger.log(`About to uncheck checkboxes in sheet ${sheet.getName()}`);
sheet.getDataRange().uncheck();
}
}
Range.uncheck()
(https://developers.google.com/apps-script/reference/spreadsheet/range#uncheck)的文档:
Changes the state of the checkboxes in the range to “unchecked”. Ignores the cells in the range which currently do not contain either the checked or unchecked value configured.
认为这意味着您可以将 multi-cell 范围传递给它,并且 uncheck
函数将在内部为您处理细节(例如跳过不相关的单元格)。
不相关:如果你有一个数组并且你需要直接遍历它的值,可以使用 for-of
循环而不是 for-in
。
我正在尝试编写一个脚本来查找 Google Sheet 中的所有复选框,并将它们全部重置为未选中状态。 (每天 sheets 清理)我能够从一个 sheet 中获取包含复选框的所有单元格的数组并取消选中它们,但我在这里旋转我的轮子如何有效地获取所有取消选中所有 sheet 上的复选框。我看到有一个名为 uncheck() 的方法,所以这就是我要使用的方法。我的脚本和数组在下面。我的问题是...
目前我正在遍历数组并一次取消选中每个框。脚本有点慢,我的最终目标是让它遍历 spreadsheet 中的所有 sheets。我担心脚本可能会超时。有没有办法一次取消选中 1 sheet 上的所有复选框,而不用一次循环 1 个?或者更好的是让它一次完成所有 sheet 上的所有复选框?显然一次性取消选中它们会更有效率,但如果这是一个选项并且我尝试过的所有方法都没有奏效,我就不知道了。 (我还考虑过每天用一个已经取消选中所有复选框的模板文件替换文件,但是我需要文档 ID 永远不会更改)
如何让我的脚本遍历传播的所有选项卡sheet?那会得到所有 sheet 并做另一个 for 循环吗?或者还有更有效的方法吗?
脚本:
function uncheckCheckboxes() {
var spreadsheet=SpreadsheetApp.getActive(); // get spreadsheet
var sheet=spreadsheet.getActiveSheet(); // get current sheet
var allRange=sheet.getDataRange(); // get all data in sheet
var validations=allRange.getDataValidations();
var Checkboxes=[]; // create empty array
for(var i=0;i<validations.length;i++) {
for(var j=0;j<validations[i].length;j++) {
var rule=validations[i][j];
if(rule!=null) {
var criteria = rule.getCriteriaType();
if(criteria == SpreadsheetApp.DataValidationCriteria.CHECKBOX) {
Checkboxes.push(Utilities.formatString('%s', sheet.getRange(i+1,j+1).getA1Notation())); // get array of only cells w/ checkboxes
}
}
}
}
Logger.log(Checkboxes) // Logging
for (var CB in Checkboxes) { // Loop through array
var checkbox = Checkboxes[CB];
sheet.getRange(checkbox).uncheck(); // uncheck checkbox
}
}
来自 1 sheet 的数组(存储在 'Checkboxes' 变量中):[C3, D3, E3, F3, G3, H3, C4, D4, E4, F4, G4, H4, C5 , D5, E5, F5, G5, H5, C6, D6, E6, F6, G6, H6, C7, D7, E7, F7, G7, H7, C8, D8, E8, F8, G8, H8, C9, D9 , E9, F9, G9, H9, C10, D10, E10, F10, G10, H10, C11, D11, E11, F11, G11, H11, C12, D12, E12, F12, G12, H12, C13, D13, E13 , F13, G13, H13, C14, D14, E14, F14, G14, H14, C15, D15, E15, F15, G15, H15, C16, D16, E16, F16, G16, H16, C17, D17, E17, F17 , G17, H17, C18, D18, E18, F18, G18, H18, C19, D19, E19, F19, G19, H19, C20, D20, E20, F20, G20, H20, C21, D21, E21, F21, G21 , H21, C22, D22, E22, F22, G22, H22, C23, D23, E23, F23, G23, H23, C24, D24, E24, F24, G24, H24, C25, D25, E25, F25, G25, H25
我已经为此工作了几个小时,希望能从真正知道自己在做什么的人那里获得一些专业知识。 (我绝对不是 JavaScript 专家!)
提前致谢。
琥珀色
未经测试,暂时无法测试。
function uncheckCheckboxesFromAllSheets() {
// Should uncheck all checkboxes from all worksheets
// in a given document.
const spreadsheet = SpreadsheetApp.getActive();
for (const sheet of spreadsheet.getSheets()) {
Logger.log(`About to uncheck checkboxes in sheet ${sheet.getName()}`);
sheet.getDataRange().uncheck();
}
}
Range.uncheck()
(https://developers.google.com/apps-script/reference/spreadsheet/range#uncheck)的文档:
Changes the state of the checkboxes in the range to “unchecked”. Ignores the cells in the range which currently do not contain either the checked or unchecked value configured.
认为这意味着您可以将 multi-cell 范围传递给它,并且 uncheck
函数将在内部为您处理细节(例如跳过不相关的单元格)。
不相关:如果你有一个数组并且你需要直接遍历它的值,可以使用 for-of
循环而不是 for-in
。