Google 脚本可以自动检测包含按钮的单元格,并改变该单元格的背景?

问题描述 投票:1回答:1

我是一名教师,正在努力创建一个Jeopardy风格的游戏,在我的课堂上使用。我对Google脚本和一般的编码非常陌生。我正在使用透明的图像为每个类别的点值创建 "按钮",并附加脚本以在点击时将单元格的背景颜色改为灰色,以表明哪些点值已经被使用,如以下所示 本例.

我想做的是能够为每个 "按钮 "分配相同的脚本,这样它就会自动检测到哪个单元格根据被按下的按钮变成灰色。我一直没有解决这个问题,而是为每个按钮创建了一个单独的脚本(类别1,100分;类别2,100分;类别3,100分,等等等等)。这很复杂,也很耗时,看来一定有更好的方法!

 function colorCat1100(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheets()[0];

 var colors = [
   ["#e0e0e0"]
 ];

  var cell = sheet.getRange("A3:A3");
 cell.setBackgrounds(colors);
}

function colorCat2100(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheets()[0];

 var colors = [
   ["#e0e0e0"]
 ];

  var cell = sheet.getRange("B3:B3");
 cell.setBackgrounds(colors);
}

function colorCat3100(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheets()[0];

 var colors = [
   ["#e0e0e0"]
 ];

  var cell = sheet.getRange("C3:C3");
 cell.setBackgrounds(colors);
}

function colorCat4100(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheets()[0];

 var colors = [
   ["#e0e0e0"]
 ];

  var cell = sheet.getRange("D3:D3");
 cell.setBackgrounds(colors);
}

function colorCat5100(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheets()[0];

 var colors = [
   ["#e0e0e0"]
 ];

  var cell = sheet.getRange("E3:E3");
 cell.setBackgrounds(colors);
}

...而这只是第一行的积分值。我将非常感激你们这些优秀的人可能提供的任何帮助! 先谢谢你们了!

button google-apps-script google-sheets colors
1个回答
0
投票

问题。

图片可以插入到一个工作表中,或者(1)属于一个单元格(Insert > Image > Image in cell或使用 图像),并且不能附加脚本,或者(2)不属于特定的单元格(Insert > Image > Image over cells),可以附加脚本。

假设您使用的是 Image over cells你不能将参数传递给一个附加在图片上的函数。考虑到插入的图像是通过 Image over cells 不属于特定的单元格,被调用的函数无法通过 getCurrentCell()getActiveRange().

解决办法:onSelectionChange触发器。

感谢最近添加的 onSelectionChange(e) 触发器,你可以使用单元格本身作为 "按钮":当一个单元格被点击时,你可以运行脚本,而不是将脚本附加在 over-cell images.

这个想法是,当选择的单元格发生变化时,脚本将运行并检查当前选择的单元格是否是带有 "按钮 "的单元格之一(这个条件是为了避免所有单元格在被点击时改变背景,而只是 "按钮 "的单元格)。如果是,则单元格的背景将被改变。

只要复制并粘贴下面的代码即可。

function onSelectionChange(e) {
  var buttonRanges = ["A3", "B3", "C3"]; // Cells with "buttons" (please change)
  var range = e.range;
  if (buttonRanges.includes(range.getA1Notation())) {
    range.setBackground("#e0e0e0");
  }
}

当然,你也可以把图片添加到单元格中,但不使用 "按钮"。Image over cells你应该添加内联单元格,或者通过 Image in cell 或与 =IMAGE.

注意:在本函数开始时,定义了带有按钮的单元格的A1符号。

  • 在这个函数的开头,定义了带有按钮的单元格的A1符号。在所提供的示例中,这些单元格是 A3, B3C3. 请根据您的喜好进行更改。
  • 如果被点击的单元格不是之前选择的单元格,这个功能将不起作用(只有单元格选择的变化才会被这个触发器跟踪)。

参考。

参考:onSelectionChange(e)

© www.soinside.com 2019 - 2024. All rights reserved.