如何保护 google sheet 中的条件格式?
How to protect conditional formatting in google sheet?
我在 sheet 中有 2 个 CF,我想继续使用 copy/pastes 您可以在下面查看范围和公式。
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 或在复制粘贴后再次应用它们?谢谢!
When I copy paste from another range I am losing the Conditional formats that i have created. So I want them to stay like I formatted or I would like them to be applied again after the copy/paste.
从上面的回复中,我了解到您希望保留条件格式,即 =($A3<>"")*(B3="")
for B3:H1001
和 =$R:$R="No"
for A3:R1001
,即使范围被复制并粘贴到 B3:H1001
和 A3:R1001
.
如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。
问题和解决方法:
不幸的是,在当前阶段,没有直接保护 Google Apps 脚本中的条件格式的方法。因此,在这种情况下,作为一种解决方法,我想建议在使用 OnChange 事件触发器更改条件格式和单元格时覆盖条件格式。
流量:
- 复制范围并更改条件格式的参数。
- 脚本由 OnChange 事件触发器自动运行。
- 删除现有的条件格式并设置新的条件格式。
用法:
1。复制并粘贴示例脚本
请复制并粘贴以下示例脚本。
示例脚本:
请设置 sheet 名称。
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 事件触发器
Please install the OnChange event trigger to the function of onChange
.
3。测试 运行
作为测试运行,请复制并粘贴sheetName
中的范围。至此,脚本由 OnChange 事件触发 运行。
注:
- 我觉得OnEdit事件触发器也可以用。但是在这种情况下,当条件格式的参数发生变化时,事件触发不是运行。所以我使用了 OnChange 事件触发器。
参考文献:
我在 sheet 中有 2 个 CF,我想继续使用 copy/pastes 您可以在下面查看范围和公式。
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 或在复制粘贴后再次应用它们?谢谢!
When I copy paste from another range I am losing the Conditional formats that i have created. So I want them to stay like I formatted or I would like them to be applied again after the copy/paste.
从上面的回复中,我了解到您希望保留条件格式,即 =($A3<>"")*(B3="")
for B3:H1001
和 =$R:$R="No"
for A3:R1001
,即使范围被复制并粘贴到 B3:H1001
和 A3:R1001
.
如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。
问题和解决方法:
不幸的是,在当前阶段,没有直接保护 Google Apps 脚本中的条件格式的方法。因此,在这种情况下,作为一种解决方法,我想建议在使用 OnChange 事件触发器更改条件格式和单元格时覆盖条件格式。
流量:
- 复制范围并更改条件格式的参数。
- 脚本由 OnChange 事件触发器自动运行。
- 删除现有的条件格式并设置新的条件格式。
用法:
1。复制并粘贴示例脚本
请复制并粘贴以下示例脚本。
示例脚本:请设置 sheet 名称。
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 事件触发器
Please install the OnChange event trigger to the function of onChange
.
3。测试 运行
作为测试运行,请复制并粘贴sheetName
中的范围。至此,脚本由 OnChange 事件触发 运行。
注:
- 我觉得OnEdit事件触发器也可以用。但是在这种情况下,当条件格式的参数发生变化时,事件触发不是运行。所以我使用了 OnChange 事件触发器。