我正在寻找一个脚本来替换给定列中的复选框。以下是描述我的设置的图像。我希望这样,当删除一行时,只有带有复选框的列会再次被复选框替换。
我希望删除的复选框仅替换带标签的列。不幸的是,一旦用户删除Google表格,就无法保留其数据验证。谢谢您的帮助。
答案 0 :(得分:0)
如果覆盖非复选框很危险,则可以让脚本为这些范围重新添加数据验证。同样,这自然更安全,而且速度更快,因为它可以一次完成整个列。
function checkboxes() {
var targetSheetName = "Sheet1",
headerRows = 1,
checkboxColumns = [1, 3, 4, 5, 7]; // UPDATE THIS LIST IF RESTRUCTURING SPREADSHEET
var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(targetSheetName),
maxRows = targetSheet.getMaxRows(),
targetRows = maxRows - headerRows,
enforceCheckbox = SpreadsheetApp.newDataValidation();
enforceCheckbox.requireCheckbox();
enforceCheckbox.setAllowInvalid(false);
enforceCheckbox.build();
for (var c in checkboxColumns) {
var targetRange = targetSheet.getRange(headerRows+1, checkboxColumns[c], targetRows);
targetRange.setDataValidation(enforceCheckbox);
}
}
如果您不关心那些列的内容,则将用复选框强行覆盖非复选框。不过,它要慢得多,因为它逐个单元地保存复选框并覆盖其他所有内容。
function checkboxes() {
var targetSheetName = "Sheet1",
headerRows = 1,
checkboxColumns = [1, 3, 4, 5, 7]; // UPDATE THIS LIST IF RESTRUCTURING SPREADSHEET
var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(targetSheetName),
maxRows = targetSheet.getMaxRows(),
targetRows = maxRows - headerRows;
for (var c in checkboxColumns) {
for (var r = headerRows + 1; r <= maxRows; r++) {
var targetRange = targetSheet.getRange(r, checkboxColumns[c]);
if (targetRange.isChecked() == null) {
targetRange.insertCheckboxes();
}
}
}
}