google-apps-script - Google表格脚本:删除基于复选框的范围
问题描述
我正在尝试将宏转换为 OnEdit 函数。
我的范围是 A2:R7。它没有可见的过滤器。Col A (A3:A7) 中有复选框。
如果选中了一个复选框,我希望它清除活动行(A:O)和(Q:R)的相应内容。请注意,Col P 中有一个公式,我希望保留它。
清除内容后,我希望它取消选中该框,并对范围(A2:A7)中的剩余内容进行排序。
他是分配给第 5 行的宏。
function macro1() {
var spreadsheet = SpreadsheetApp.getActive();
// Set checkbox to FALSE
spreadsheet.getRange('A5').activate();
spreadsheet.getCurrentCell().setValue('FALSE');
// Clear contents Col B to Col O and Col Q to Col R
spreadsheet.getRange('B5:O5').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
spreadsheet.getRange('Q5:R5').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
// Create filter, sort, remove filter
spreadsheet.getRange('A2:R7').createFilter();
spreadsheet.getActiveSheet().getFilter().sort(2, true);
spreadsheet.getActiveSheet().getFilter().remove();}
我解决它的尝试相对徒劳,因为我对使用脚本非常陌生。主要的挫败点是把它分配给一个复选框。
解决方案
- 在你的情况下,
- “A3:A7”有复选框。
- 选中复选框时,您要清除单元格“B:O”和“Q:R”的内容。
- 您想在脚本运行后取消选中选中的复选框。
- 您想保留“P”列的公式。
- 您希望使用带有 Google Apps 脚本的 OnEdit 事件触发器来实现此目的。
如果我的理解是正确的,这个答案怎么样?请认为这只是几个可能的答案之一。
示例脚本:
请复制并粘贴以下脚本,然后保存脚本。
function onEdit(e) {
const range = e.range;
const sheet = range.getSheet();
if (range.columnStart == 1 && range.rowStart >= 3 && range.rowStart <= 7 && e.value == "TRUE") {
const row = range.rowStart;
sheet.getRangeList([`B${row}:O${row}`, `Q${row}:R${row}`]).clearContent();
range.uncheck();
}
}
- 在此脚本中,当在电子表格上选中“A3:A7”复选框时,函数
onEdit()
由 OnEdit 事件触发器作为简单触发器运行。在这种情况下,使用 if 语句if (range.columnStart == 1 && range.rowStart >= 3 && range.rowStart <= 7 && e.value == "TRUE")
。 - 当复选框被选中时,单元格“B:O”和“Q:R”将被清除
clearContent()
。 - 然后,用 取消选中该复选框
uncheck()
。
笔记:
- 当您
onEdit
在脚本编辑器中直接运行 的功能时,会出现类似TypeError: Cannot read property 'range' of undefined
. 该脚本由简单触发器自动运行。所以请检查复选框。请注意这一点。 - 从您的脚本中,我使用了活动表。但是,如果您想为特定工作表运行脚本,请告诉我。
- 在此脚本中,请使用启用 V8。
参考:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
添加:
当您要运行特定工作表的脚本时,请按如下方式修改上述脚本。
从:
if (range.columnStart == 1 && range.rowStart >= 3 && range.rowStart <= 7 && e.value == "TRUE") {
到:
if (sheet.getSheetName() == "Sheet1" && range.columnStart == 1 && range.rowStart >= 3 && range.rowStart <= 7 && e.value == "TRUE") {
- 当编辑的工作表为“Sheet1”时,运行脚本。在这种情况下,“Sheet1”的工作表需要有复选框。请注意这一点。
推荐阅读
- mysql - 如何根据最小日期行中的条件返回最大日期结果?
- python - Python:合并排序如何影响没有显式返回值的列表?
- c# - How to add to a queue via references without changing references accidently?
- javascript - Rock,Paper,Scissors Increment Score 不起作用,有人能告诉我我做错了什么吗?
- ruby - 为什么我的 Fiddle 结构被垃圾填满?
- javascript - ReactJS - Webpack 未捕获错误:未定义要求
- javascript - 自动播放嵌入的 youtube 直播
- c++ - C++ 程序 if 函数中的语句未执行。似乎逻辑错误
- java - 使用 java GUI 旋转图像
- c# - 我可以创建一个运行代码隐藏方法的自定义属性吗?