Google 工作表:动态更改活动单元格中的值?

Google Sheets: Change value in active cell dynamically?

我正在尝试根据颜色变化来更改单元格值...当我更改单元格中的颜色时,没有任何反应。没有为单元格设置文本。

function createSpreadsheetEditTrigger() {
  var ss = SpreadsheetApp.getActive();
  ScriptApp.newTrigger(status)
      .forSpreadsheet(ss)
      .onEdit()
      .create();    
}

function status() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var cell = sheet.getActiveCell();  // Returns the active cell

  var currentColor = cell.getBackgroundColor();

  switch(true) {
    case currentColor === '#ffdc32':
      cell.setValue('IN PROGRESS');
      break;

    case currentColor === 'green':
      cell.setValue('COMPLETED');
      break;

    case currentColor === 'red':
      cell.setValue('ERRORS');
      break;

  }

}

要让函数触发,您需要设置一个触发器,简单的或可安装的。

最简单的方法是将函数重命名为 onEdit,这将自动充当简单触发器。

或者,您可以通过转到 Resources 菜单和 Current Projects Triggers 来设置可安装的触发器,单击 no triggers setup... 文本,然后单击 select 您的函数, select 来自电子表格,然后 select 进行编辑,如下图所示。

Simple Triggers Documentation

Installable Triggers Documentation

我试了一下,注意到两件事。首先,您必须对颜色使用十六进制代码而不是名称,即 #ff0000 而不是 red。此外,似乎更改单元格的背景颜色不被视为编辑。因此,如果您更改单元格的颜色,然后在其中键入任何内容(即使是单个 space 也可以),退出单元格后,文本将更改为您想要的内容。以下对我有用 - 我使用单个 onEdit(e) 而不是完全触发,并根据颜色进行切换:

function onEdit(e){
  var cell = e.source.getActiveSheet().getActiveCell();

  var currentColor = cell.getBackgroundColor();

  switch (currentColor){

    case '#ffdc32':
      cell.setValue('IN PROGRESS');
      break;

    case '#00ff00':
      cell.setValue('COMPLETED');
      break;

    case '#ff0000':
      cell.setValue('ERRORS');
      break;

    default:
      break;
  }
}