试试这个脚本:
function onEdit(e) {
const sheet = SpreadsheetApp.getActiveSheet();
const sName = sheet.getName();
if (sName === 'yourSheetName' && e.range.getColumn() === 2 && e.range.getRow() > 19) {
const len = sheet.getRange('B20:B').getValues()
.filter(row => row[0] != '').length;
const range = sheet.getRange(20,1,len,1);
sheet.getRange('A20:A').removeCheckboxes();
range.insertCheckboxes().uncheck();
}
}
!!不要更改函数名称。 !!
这是一个用于 google sheet apps 脚本的简单 onEdit 触发器。
它将监视任何编辑事件,如果正在编辑的工作表名为“yourSheetName”,并且编辑范围是 Column B 和 Row > 19,
该函数将首先删除 A20:A 中的所有复选框,
然后检查 B20:B 中的值并计算非空单元格的长度,并在 A20:A 应用相同数量的复选框。
您还可以修改此代码以使其适合您的搜索功能,而不是 onEdit 触发器,只需在每次触发搜索功能时运行它,这也是一种方法。
要在 C9、C11、C13 处显示所选数据,您不需要 appscript,在 googlesheet 中选中的复选框等于 TRUE,只需在三个单元格中放置一个 XLOOKUP 公式,在 A 列中查找真值,然后返回相关结果应该可以解决问题。
但是,您将需要一个ONEDIT扳机来保持列清洁,当将新行封装时,其他复选框需要不选中。
完成此操作的更简单方法是取消选中 A20:A 中的所有框并仅选中 event.range,结合第一个函数,将是这样的:
function onEdit(e) {
const sheet = SpreadsheetApp.getActiveSheet();
const sName = sheet.getName();
if (sName === 'yourSheetName' && e.range.getRow() > 19) {
const len = sheet.getRange('B20:B').getValues().filter(row => row[0] != '').length;
if (e.range.getColumn() === 2) {
const range = sheet.getRange(20,1,len,1);
sheet.getRange('A20:A').removeCheckboxes();
range.insertCheckboxes().uncheck();
}
if (e.range.getColumn() === 1 && e.range.getValues()[0][0] === true) {
sheet.getRange('A20:A').uncheck();
e.range.check();
}
}
}