复选框/取消复选框 Google Apps 脚本 Google 表格 [关闭]
Posted
技术标签:
【中文标题】复选框/取消复选框 Google Apps 脚本 Google 表格 [关闭]【英文标题】:Check Boxes/ Uncheck Boxes Google Appscript Google Sheets [closed] 【发布时间】:2022-01-18 05:35:18 【问题描述】:我只是在 Google Appsheet 中学习脚本,并复制了其他脚本,试图调整它们以切换我的复选框,但无法使其正常工作。有人可以帮我编写脚本吗? 从第 5 行开始的整列 J、L、N、P 一次只需要一个复选框选中“真”每行。 J、L、N、P 列第 4 行需要一个主复选框,用于选中或取消选中整个列。
我从 Ben's 开始,但无法对其进行编辑。 https://www.benlcollins.com/apps-script/radio-buttons-in-google-sheets/?unapproved=191483&moderation-hash=afecc2580f0b56c2ec9e26cdef4d1a99#comment-191483
这是我目前所拥有的,但它并没有完成整个列或所有主复选框。
function onEdit(e)
const as = e.source.getActiveSheet();
const cell = e.range.getA1Notation();
const cell_checks = ['J4','L4','N4','P4'];
if(as.getName() == "MATERIAL LIST" && cell_checks.includes(cell) &&
e.range.isChecked())
cell_checks.filter(val=>val!=cell).forEach(c=>as.getRange(c).uncheck())
var spreadsheet = SpreadsheetApp.getActive();
if (e.range.getA1Notation() == "J3")
spreadsheet.getRange('J4:J291').setValue('True');
【问题讨论】:
【参考方案1】:如下修改你的脚本:
function onEdit(e)
const as = e.source.getActiveSheet();
const lastRow = as.getLastRow();
const cell = e.range;
const col_checks = ['J','L','N','P'];
// master row
if(as.getName() == "MATERIAL LIST" && cell.getRow()==4 && cell.isChecked())
as.getRange(5,cell.getColumn(),lastRow-4,1).setValue('TRUE')
col_checks.filter(val=>(val+cell.getRow())!=cell.getA1Notation()).forEach(c=>as.getRange(c+cell.getRow()).offset(0,0,lastRow-3).uncheck())
// individual row
if(as.getName() == "MATERIAL LIST" && cell.getRow()>4 && cell.isChecked())
col_checks.filter(val=>(val+cell.getRow())!=cell.getA1Notation()).forEach(c=>as.getRange(c+cell.getRow()).uncheck())
【讨论】:
谢谢迈克。这适用于整个列的主函数,但我仍然希望能够向下行并检查另一列并取消选中该列。一个例子是:在 J 中设置默认复选框,但需要将第 7 行设置为 L。因此,在选中所有 J 列后,我将单击第 7 行上的 L,然后取消选中 J7 并选中 L7。希望这是有道理的。 好的,我已经更新了答案 谢谢迈克。这正是我想要的效果,现在我可以相应地使用和调整。以上是关于复选框/取消复选框 Google Apps 脚本 Google 表格 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Google Apps Script e.namedValues 格式多项选择