Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 脚本:如何从指定的单元格中检索条件格式规则,并有选择地将其重新应用于范围?_Google Apps Script_Google Sheets_Gs Conditional Formatting - Fatal编程技术网

Google apps script 脚本:如何从指定的单元格中检索条件格式规则,并有选择地将其重新应用于范围?

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

在Google工作表中,将剪切值粘贴到工作表中时,可能会破坏该工作表中应用条件格式的单元格范围。我的工作表经常被同事编辑,它会破坏条件格式。我试图创建一个脚本,在编辑时从工作表的每一列复制条件格式规则,然后将这些规则重新应用于粘贴到每一列中的任何单元格

我对脚本编写还不熟悉,所以很多脚本都是由一位有帮助的用户在

函数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);
}