当我使用 GAS 设置单元格颜色时,如何让 Google 表格忽略条件格式?

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

我有一个脚本,可以将单元格绘制为红色,并且如果合并,还会在单元格内放入一些文本:

function myFun() {
  let ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  let range = ss.getDataRange();
  let activeRange = ss.getRange("A1:AH60");
  Logger.log(activeRange);
  let mergedRanges = activeRange.getMergedRanges();
  Logger.log(mergedRanges);
  Logger.log(range);

  mergedRanges.forEach(function(range) {
    range.setValue("my value");
    range.setBackground("red");
  });

  let timestamp = ss.getRange("A1");
  timestamp.setValue("script successfully ran " + new Date()); 

}

但是,我在谷歌表格中需要条件格式,如果单元格不为空,则将单元格涂成绿色。我能否以某种方式为脚本设置的颜色分配比 Google 表格中条件格式设置的颜色更高的优先级,而不必更改条件格式中的任何内容?

我很困惑,因为我真的不知道我可以尝试解决这个问题。

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

推荐:

条件格式会覆盖应用程序脚本所做的更改。为了实现这两个条件,下面的脚本将在单元格不空白时将背景设置为绿色,如果单元格合并则将背景设置为红色,如果单元格为空白则将背景设置为白色。

function myFun(){
  let ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  let activeRange = ss.getRange("A1:AH60");
  let val = activeRange.getValues();
  let mergedRanges = activeRange.getMergedRanges();

  val.forEach((x,i) => 
    x.forEach((y,j) => {
      if(y != "") // check if the cell is not empty and it will change the value to green
        ss.getRange(i+1,j+1).setBackground("green");
      else // if the cell is blank it will change the color to white
        ss.getRange(i+1,j+1).setBackground("white");
    })
  );

  mergedRanges.forEach(function(range) {
    range.setValue("my value");
    range.setBackground("red");
  });

  let timestamp = ss.getRange("A1");
  timestamp.setValue("script successfully ran " + new Date()); 

}

示例输出:

参考:

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