繁体   English   中英

"根据谷歌电子表格中的单元格颜色更改单元格值"

[英]Change cell value based on cell color in google spreadsheet

我一直在寻找一种基于另一种单元格颜色来更改单元格值的方法(例如,如果单元格颜色为红色,则为“文本”)?

有没有办法做到这一点?

我知道有一种方法可以根据单元格值更改单元格颜色,但我想要相反的方式,

有人知道吗? 无论是脚本还是公式

Google appscript中有类似的内容,不确定电子表格中是否也有任何直接公式,但是这里是:

我将Sheet1的 A1单元格上色为红色,即#ff0000,然后使用以下代码获得颜色:

function test()
{
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  var color = sheet.getRange(1, 1).getBackground();
  Logger.log(color);
}

输出量

#ff0000

因此,您只需要检查if(color == "#ff0000") (或所需的任何颜色的代码),然后设置值即可。

编辑

这是将满足您要求的代码。 我还添加了评论,以便您可以进一步开发它。

function myFunction() {
  var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");

  var data1 = sheet1.getDataRange().getValues();  //2D array of sheet1 cell values
  var bg;

  for(var i=1; i<data1.length; i++)
  {
    bg = sheet1.getRange(i+1, 2).getBackground();
    if(bg == "#ff0000")  //Add more colors in else if and else if you have 5-6 different colors, this one is for red
    {
      sheet2.getRange(i+1, 3).setValue("For Verification");  //Set value in corresponding row of sheet2
    }    
  }
}


/**
* For to-be filled records in future, you can 
* set a trigger of onEdit if you are manually 
* filling sheet 1
**/

我做了这个脚本来更新一些颜色,但它可能会给你一个关于如何做的想法。

请记住,在 Google 表格中,x,y 矩阵始终为 x=row,然后 y=column。 因此,当您更新值时,您必须认为该对的第一个值是行,然后是列,以避免错误。

此外,getRange 是基于 1 的,而数组是基于 0 的。

最后, getBackground操作非常昂贵,因为每次调用它都需要从工作表中获取数据,如果您将在多个单元格上运行脚本,那么最好使用getBackgrounds()来获取所有的矩阵范围内的背景。

/** @OnlyCurrentDoc */
function calculateValues() {
  var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("origin")
  var data = sheet1.getDataRange();
  var values = data.getValues();
  var bg = data.getBackgrounds()

  Logger.log("Rows: " + values.length)
  Logger.log("Columns: " + values[0].length)

  for (var y = 0; y < values.length; y++) {

  Logger.log("Row: " + (y+1) + " with length " + values[y].length)

    for (var x = 0; x  < values[y].length; x++) {
      var i = x+1
      var j = y+1

      Logger.log("row, column: " + j + "," + i + " bg: " + bg[y][x])

      if(bg[y][x] == "#34a853") {  // green
        sheet1.getRange(j,i).setValue(2)

      } else if (bg[y][x] == "#fbbc04") {  //yellow
        sheet1.getRange(j,i).setValue(1)

      } else if (bg[y][x] == "#d9d9d9") { //gray
        sheet1.getRange(j,i).setValue(0)

      } else if (bg[y][x] == "#6aa84f" ) { // green 2 
        sheet1.getRange(j,i).setBackground("#34a853")
        sheet1.getRange(j,i).setValue(2)

      } else if (bg[y][x] == "#f1c232"  ) { // yellow 2 
        sheet1.getRange(j,i).setBackground("#fbbc04")
        sheet1.getRange(j,i).setValue(1)
      
      } else if (bg[y][x] == "#b7b7b7") { // gray 2 
        sheet1.getRange(j,i).setBackground("#d9d9d9")
        sheet1.getRange(j,i).setValue(0)
      }
 
    }

  }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM