【问题标题】:Google Spreadsheet Script to Blink a range of Cells用于闪烁一系列单元格的 Google 电子表格脚本
【发布时间】:2016-06-28 02:52:43
【问题描述】:

我是脚本新手,最近发现以下脚本可以在编辑时使单元格闪烁或更改颜色。我想实现相同的脚本,但要针对一系列单元格。我试过 ie: A7:A 但它不起作用。我相信我在某处遗漏了一个论点。

function onEdit(e)
{
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var mysheet = ss.getSheetByName("Sheet1");
  var activeCell = ss.getActiveCell().getA1Notation();

  if( activeCell == "A1" )
  {
    for(var i=0;i<50;i++)
    {
      if( i%2 == 0 )
        mysheet.getRange("A1").setBackground("RED");
      else
        mysheet.getRange("A1").setBackground("WHITE");

      SpreadsheetApp.flush();
      Utilities.sleep(500);
    }
  }
}

【问题讨论】:

标签: javascript google-apps-script google-sheets triggers


【解决方案1】:

我了解您希望编辑后的单元格在 A7:A 范围内时闪烁。这是在下面使用event object 完成的,其中 range 属性指的是活动范围。

如果列为 1 且行 >= 7,则闪烁 50 次。 (顺便说一下,这意味着闪烁 25 秒。)

function onEdit(e) {
  if (e.range.getColumn() == 1 && e.range.getRow() >= 7) {
    for (var i = 0; i < 50; i++) {
      e.range.setBackground(i % 2 ? "WHITE" : "RED");
      SpreadsheetApp.flush();
      Utilities.sleep(500);
    }
  }
}

如果您希望在编辑任何单元格时整个范围 A7:A 闪烁,则相关方法是 setBackgrounds,它采用双倍颜色数组。这个数组需要先准备好,所以代码变成了

function onEdit(e) {
  if (e.range.getColumn() == 1 && e.range.getRow() >= 7) {
    var range = e.range.getSheet().getRange("A7:A");
    var height = range.getHeight();
    var whiteArray = Array.apply(null, Array(height)).map(function() {
      return ["WHITE"];
    });
    var redArray = Array.apply(null, Array(height)).map(function() {
      return ["RED"];
    });
    for (var i = 0; i < 50; i++) {
      range.setBackgrounds(i % 2 ? whiteArray : redArray);
      SpreadsheetApp.flush();
      Utilities.sleep(500);
    }
  }
}

使用this answer中的数组填充方法。

【讨论】:

  • 很好的答案。您可能会考虑几件事:仅将列闪烁到您拥有数据的位置而不是列更改 var range = e.range.getSheet().getRange("A7:A"); 的末尾到 var lr=e.range.getSheet().getLastRow(); var range = e.range.getSheet().getRange("A7:A"+lr);另外,如果您希望闪烁的单元格保持红色,请反转 range.setBackgrounds(i % 2 ? whiteArray : redArray);// 闪烁后的白色 range.setBackgrounds(i % 2 ? redArray : whiteArray );// 后的红色闪烁
  • 太好了,效果很好。我如何将其链接到特定的选项卡是工作表?当前脚本适用于单个工作表,不适用于具有许多选项卡的工作簿是工作表。另外,如果我想在单元格具有特定文本时实现此代码,我还能添加什么?再次感谢您的帮助。
  • @Ozz 如果您只想让它闪烁,请在if,...&amp;&amp; e.value = 'blink' 中使用另一个比较。要将其限制为特定工作表,还要比较工作表名称e.range.getSheet().getSheetName() == 'Blinking Sheet'
  • @Bookend 你能给我举个例子吗?出于某种原因,我遇到了范围错误。对不起,菜鸟问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-14
  • 2012-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多