Google apps script 脚本:如何在编辑时将条件格式规则复制并重新应用到某个范围?
在Google工作表中,当您粘贴新值时,条件格式应用于的单元格范围可能会改变。我正在寻找一个脚本,它将复制工作表中的条件格式,并在人们粘贴数据时将其重新应用到新的单元格 我实际上不怎么写脚本,但我偷别人的脚本,然后把它们放在一起,直到它们功能模糊为止。以下是我目前偷的东西:Google apps script 脚本:如何在编辑时将条件格式规则复制并重新应用到某个范围?,google-apps-script,google-sheets,gs-conditional-formatting,Google Apps Script,Google Sheets,Gs Conditional Formatting,在Google工作表中,当您粘贴新值时,条件格式应用于的单元格范围可能会改变。我正在寻找一个脚本,它将复制工作表中的条件格式,并在人们粘贴数据时将其重新应用到新的单元格 我实际上不怎么写脚本,但我偷别人的脚本,然后把它们放在一起,直到它们功能模糊为止。以下是我目前偷的东西: function onEdit(e) { var range = e.range; var sheet = range.getSheet(); range.clearFormat(); //clears fo
function onEdit(e) {
var range = e.range;
var sheet = range.getSheet();
range.clearFormat();
//clears formatting just on data that is pasted into the sheet
var rules = sheet.getConditionalFormatRules();
var newRules = [];
for(var r = 0; r < rules.length; r++) {
var booleanCondition = rules[r].getBooleanCondition();
if(booleanCondition != null) {
var rule = SpreadsheetApp.newConditionalFormatRule()
.withCriteria(booleanCondition.getCriteriaType(), booleanCondition.getCriteriaValues())
.setBackground(booleanCondition.getBackground())
.setRanges([sheet.getRange("A:A"),sheet.getRange("C:C")])
.build();
newRules.push(rule);
sheet.setConditionalFormatRules(newRules);
}
}
}
函数onEdit(e){
var范围=e范围;
var sheet=range.getSheet();
range.clearFormat();
//仅清除粘贴到图纸中的数据的格式设置
var rules=sheet.getConditionalFormatures();
var newRules=[];
for(var r=0;r
当然,问题是我正在获取该工作表的所有条件格式规则,并将它们全部应用于两列(A:A和C:C)。无论这些规则应用于哪些列,都将应用这些规则
有人能建议一种方法来复制预先存在的条件格式规则,并将它们重新应用到我复制它们的列吗?setRanges()函数[1]是您需要设置要应用格式的范围的地方。在本例中,我使用了从onEdit触发器[2]的事件对象获得的编辑范围:
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();
//If condition isn't null and edited column is the same as the one in the range, add rule
if((ruleColumn == column) && (booleanCondition != null)) {
var newRule = SpreadsheetApp.newConditionalFormatRule()
.withCriteria(booleanCondition.getCriteriaType(), booleanCondition.getCriteriaValues())
.setBackground(booleanCondition.getBackground())
.setRanges([range])
.build();
newRules.push(newRule);
}
}
}
sheet.setConditionalFormatRules(newRules);
}
[1]
[2] 谢谢你,安德烈斯!不幸的是,我仍然遇到同样的问题。无论我使用setRanges()函数指定什么范围,整个工作表的条件格式规则都将应用于该范围。我正在寻找一种解决方案,它从每一列获取条件格式规则,并在添加数据时将它们重新应用到同一列。你对……有什么见解吗。。。比如说,如何按列有选择地检索条件格式规则并按列重新应用它们?我只是使用每个规则的函数编辑了答案,并基于此将规则设置为已编辑的单元格。如果需要调整代码,请查看我提供的文档。如果它帮助你,请考虑接受正确的答案,这肯定有帮助。现在,条件格式正确地应用于每个列,但它会创建每个规则的新迭代,脚本将获得该迭代,并在进行编辑时重新应用到下一个范围。每次激活脚本时,同一规则的迭代次数都呈指数增长。是否有办法仅从指定的单元格(如“A2:Z2”)提取条件格式?这将是一个完美的解决办法。再次感谢!如果你想问一个新问题,我不能在评论中回答。啊,谢谢你帮助我遵守SO的网站规则。我认为你的答案是正确的,你在编写这个脚本和帮助我更有效地理解语言方面帮了我很大的忙。我很感激!
sheet.setConditionalFormatRules(newRules);