Google apps script 脚本:如何从指定的单元格中检索条件格式规则,并有选择地将其重新应用于范围?
在Google工作表中,将剪切值粘贴到工作表中时,可能会破坏该工作表中应用条件格式的单元格范围。我的工作表经常被同事编辑,它会破坏条件格式。我试图创建一个脚本,在编辑时从工作表的每一列复制条件格式规则,然后将这些规则重新应用于粘贴到每一列中的任何单元格 我对脚本编写还不熟悉,所以很多脚本都是由一位有帮助的用户在Google apps script 脚本:如何从指定的单元格中检索条件格式规则,并有选择地将其重新应用于范围?,google-apps-script,google-sheets,gs-conditional-formatting,Google Apps Script,Google Sheets,Gs Conditional Formatting,在Google工作表中,将剪切值粘贴到工作表中时,可能会破坏该工作表中应用条件格式的单元格范围。我的工作表经常被同事编辑,它会破坏条件格式。我试图创建一个脚本,在编辑时从工作表的每一列复制条件格式规则,然后将这些规则重新应用于粘贴到每一列中的任何单元格 我对脚本编写还不熟悉,所以很多脚本都是由一位有帮助的用户在 函数onEdit(e){ var范围=e范围; var column=range.getColumn(); var sheet=range.getSheet(); range.clear
函数onEdit(e){
var范围=e范围;
var column=range.getColumn();
var sheet=range.getSheet();
range.clearFormat();
//仅清除粘贴到图纸中的数据的格式设置
//获取所有工作表规则并遍历它们
var rules=sheet.getConditionalFormatures();
var newRules=[];
newRules=newRules.concat(规则);
for(var r=0;r
这将获取工作表中存在的条件格式规则,并将其重新应用于任何编辑范围,有选择地仅将规则应用于从中复制这些规则的列。唯一的问题是它复制了每列中的每个规则,包括同一规则的迭代。每次编辑工作表时,应用于已编辑单元格的规则数呈指数增长,我担心我的计算机即将爆炸
是否有方法仅从工作表的第一行提取条件格式规则,并将其(按列)应用于编辑的范围?这将停止我的规则不断增加的问题,对此我将非常感谢。检索条件格式规则的唯一方法是使用GetConditionalFormatures函数[1],它从工作表中检索所有规则。您可以获取每个规则范围的行,并添加一个条件来筛选仅应用于第一行的行
function onEdit(e) {
var range = e.range;
var column = range.getColumn();
var sheet = range.getSheet();
range.clearFormat();
//clears formatting just on data that is pasted into the sheet
//Get all Sheet rules and iterate through them
var rules = sheet.getConditionalFormatRules();
var newRules = [];
newRules = newRules.concat(rules);
for(var r = 0; r < rules.length; r++) {
var rule = rules[r];
//Get condition for each rule
var booleanCondition = rule.getBooleanCondition();
//Get the ranges to which each rule applies and iterate through
var ranges = rule.getRanges();
for (var i = 0; i < ranges.length; i++) {
var ruleColumn = ranges[i].getColumn();
var ruleRow = ranges[i].getRow();
//If condition isn't null and edited column is the same as the one in the range, add rule
if((ruleColumn == column) && (ruleRow == 1) && (booleanCondition != null)) {
var newRule = SpreadsheetApp.newConditionalFormatRule()
.withCriteria(booleanCondition.getCriteriaType(), booleanCondition.getCriteriaValues())
.setBackground(booleanCondition.getBackground())
.setRanges([range])
.build();
newRules.push(newRule);
}
}
}
sheet.setConditionalFormatRules(newRules);
}
函数onEdit(e){
var范围=e范围;
var column=range.getColumn();
var sheet=range.getSheet();
range.clearFormat();
//仅清除粘贴到图纸中的数据的格式设置
//获取所有工作表规则并遍历它们
var rules=sheet.getConditionalFormatures();
var newRules=[];
newRules=newRules.concat(规则);
for(var r=0;r
如果规则范围从第一行开始(即:“A1”、“A1:A4”、“D1:D10”等),这将复制规则
[1]
function onEdit(e) {
var range = e.range;
var column = range.getColumn();
var sheet = range.getSheet();
range.clearFormat();
//clears formatting just on data that is pasted into the sheet
//Get all Sheet rules and iterate through them
var rules = sheet.getConditionalFormatRules();
var newRules = [];
newRules = newRules.concat(rules);
for(var r = 0; r < rules.length; r++) {
var rule = rules[r];
//Get condition for each rule
var booleanCondition = rule.getBooleanCondition();
//Get the ranges to which each rule applies and iterate through
var ranges = rule.getRanges();
for (var i = 0; i < ranges.length; i++) {
var ruleColumn = ranges[i].getColumn();
var ruleRow = ranges[i].getRow();
//If condition isn't null and edited column is the same as the one in the range, add rule
if((ruleColumn == column) && (ruleRow == 1) && (booleanCondition != null)) {
var newRule = SpreadsheetApp.newConditionalFormatRule()
.withCriteria(booleanCondition.getCriteriaType(), booleanCondition.getCriteriaValues())
.setBackground(booleanCondition.getBackground())
.setRanges([range])
.build();
newRules.push(newRule);
}
}
}
sheet.setConditionalFormatRules(newRules);
}