0

我在一张表中有 2 个 CF,我想在复制/粘贴时保留它们,您可以看到下面的范围和公式。

CF1 Range : B3:H1001
CF1 Formula : =($A3<>"")*(B3="") //This one higlights the empty cells in a given range

CF2 Range : A3:R1001  // This one highlights the row if the cell in R column is No.
CF2 Formula : =$R:$R="No"

有没有办法保护这些 CF 或在复制粘贴后再次应用它们?谢谢 !

4

1 回答 1

2

当我从另一个范围复制粘贴时,我丢失了我创建的条件格式。所以我希望它们像我格式化的那样保持不变,或者我希望它们在复制/粘贴后再次应用。

从上面的回复中,我可以理解您希望保留条件格式,即=($A3<>"")*(B3="")forB3:H1001=$R:$R="No"for A3:R1001,即使范围被复制并粘贴到B3:H1001and A3:R1001

如果我的理解是正确的,这个答案怎么样?请认为这只是几个可能的答案之一。

问题和解决方法:

不幸的是,在当前阶段,没有直接保护 Google Apps 脚本中的条件格式的方法。因此,在这种情况下,作为一种解决方法,我想建议在使用 OnChange 事件触发条件格式和单元格的更改时覆盖条件格式。

流动:

  1. 复制范围并更改条件格式的参数。
  2. 该脚本由 OnChange 事件触发器自动运行。
  3. 删除现有的条件格式并设置新的条件格式。

用法:

1.复制粘贴示例脚本

请复制并粘贴以下示例脚本。

示例脚本:

请设置工作表名称。

function onChange(e) {
  const sheetName = "Sheet1";  // Please set the sheet name.

  if (e.source.getActiveSheet().getSheetName() != sheetName || e.changeType != "OTHER") return;

  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  var rules = sheet.clearConditionalFormatRules();
  const rule1 = SpreadsheetApp.newConditionalFormatRule()
    .setRanges([sheet.getRange("B3:H")])
    .setBackground("green")
    .whenFormulaSatisfied('=($A3<>"")*(B3="")').build();
  const rule2 = SpreadsheetApp.newConditionalFormatRule()
    .setRanges([sheet.getRange("A3:R")])
    .setBackground("green")
    .whenFormulaSatisfied('=$R:$R="No"').build();
  sheet.setConditionalFormatRules([rule1, rule2]);
  SpreadsheetApp.flush();  // This line might not be required.
}
  • 在此示例脚本中,您问题中的 2 个条件格式设置为绿色背景色。

2.安装OnChange事件触发器

请将 OnChange 事件触发器安装到onChange.

3.试运行

作为测试运行,请将范围复制并粘贴到sheetName. 这样,脚本由 OnChange 事件触发器运行。

笔记:

  • 我认为也可以使用 OnEdit 事件触发器。但是在这种情况下,当条件格式的参数发生变化时,事件触发器不会运行。所以我使用了 OnChange 事件触发器。

参考:

于 2020-03-01T22:50:19.183 回答