单击图像以运行脚本时,如何取消选择活动单元格?

时间:2015-12-02 18:16:30

标签: google-apps-script google-sheets

我有一个电子表格绑定脚本,可以通过单击电子表格中的图像来调用。我发现如果需要修改的单元格处于活动状态或正由用户编辑,则可以阻止该脚本。

代码可以是任何东西,即使像这样简单:

function newf() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var range = sheet.getRange("R4");
  range.clear();
}

当单元格R4打开时,该函数将忽略该单元格。

如何在单击图像以运行脚本时取消选择打开的单元格?

简单(手动)解决方案是在点击图像之前单击打开的单元格,但我试图使脚本万无一失,这可能是一个代价高昂的问题。有没有办法可以强制取消选择活动单元格?

编辑:我不是指活跃的细胞。绝对是"开放的细胞。"这是错误的图片。

打开包含输入数据的单元格 Open cell with data being entered

点击图片,程序运行
Clicked on Picture, program ran

3 个答案:

答案 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"

}