我有一个电子表格绑定脚本,可以通过单击电子表格中的图像来调用。我发现如果需要修改的单元格处于活动状态或正由用户编辑,则可以阻止该脚本。
代码可以是任何东西,即使像这样简单:
function newf() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var range = sheet.getRange("R4");
range.clear();
}
当单元格R4
打开时,该函数将忽略该单元格。
如何在单击图像以运行脚本时取消选择打开的单元格?
简单(手动)解决方案是在点击图像之前单击打开的单元格,但我试图使脚本万无一失,这可能是一个代价高昂的问题。有没有办法可以强制取消选择活动单元格?
编辑:我不是指活跃的细胞。绝对是"开放的细胞。"这是错误的图片。
打开包含输入数据的单元格
点击图片,程序运行
答案 0 :(得分:1)
您可以使用set
将附加用户的光标移动到电子表格中的其他位置。您需要记住,用户界面和从中调用的脚本之间存在关系,这使脚本能够确定并更改当前活动的单元格。但是,这并没有扩展到多用户案例 - 如果User2在User2点击运行脚本时正在编辑受保护的单元格,则脚本将不知道它。
Sheet.setActive()
答案 1 :(得分:0)
我遇到了同样的问题,无论是最初的问题还是Mogsdad提出的解决方案。
我通过以下方式解决了该问题:
在运行任何脚本之前,前三行将打开另一张工作表,并刷新电子表格:
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('DIFFERENT SHEET NAME'), true);
SpreadsheetApp.flush();
脚本的其余部分如下。
然后在脚本结尾,我用一个简单的方法重新打开初始工作表:
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('ORIGINAL SHEET NAME'), true);
答案 2 :(得分:0)
对此的另一个“解决方案”是不使用按钮,而要像使用按钮一样使用复选标记,并使用onEdit函数。
function onEdit(e)
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
checkbox1 = ss.getRange("saveCheckbox_001");
if (checkbox1.isChecked())
{
submit1(); //do all the fun stuff associated with this checkbox
checkbox1.uncheck();
}
//more checkbox handling and calling other functions can go here if you need more than one "button"
}