当我从另一个范围复制粘贴时,我丢失了我创建的条件格式。所以我希望它们像我格式化的那样保持不变,或者我希望它们在复制/粘贴后再次应用。
从上面的回复中,我可以理解您希望保留条件格式,即=($A3<>"")*(B3="")
forB3:H1001
和=$R:$R="No"
for A3:R1001
,即使范围被复制并粘贴到B3:H1001
and A3:R1001
。
如果我的理解是正确的,这个答案怎么样?请认为这只是几个可能的答案之一。
问题和解决方法:
不幸的是,在当前阶段,没有直接保护 Google Apps 脚本中的条件格式的方法。因此,在这种情况下,作为一种解决方法,我想建议在使用 OnChange 事件触发条件格式和单元格的更改时覆盖条件格式。
流动:
- 复制范围并更改条件格式的参数。
- 该脚本由 OnChange 事件触发器自动运行。
- 删除现有的条件格式并设置新的条件格式。
用法:
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 事件触发器。
参考: