Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.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_Google Sheets Conditionalformatting - Fatal编程技术网

Google apps script 如何保护谷歌工作表中的条件格式?

Google apps script 如何保护谷歌工作表中的条件格式?,google-apps-script,google-sheets,gs-conditional-formatting,google-sheets-conditionalformatting,Google Apps Script,Google Sheets,Gs Conditional Formatting,Google Sheets Conditionalformatting,我有两个CFs在一张纸上,我想在复制/粘贴时保留。你可以看到下面的范围和公式 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

我有两个CFs在一张纸上,我想在复制/粘贴时保留。你可以看到下面的范围和公式

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"
CF1范围:B3:H1001
公式:=($A3”“)*(B3=”“)//此公式在给定范围内点亮空单元格
CF2范围:A3:R1001//如果R列中的单元格为“否”,则此区域将高亮显示该行。
公式:=$R:$R=“否”
是否有办法保护这些CFs或在复制粘贴后再次应用它们?谢谢


当我从另一个范围复制粘贴时,我将丢失已创建的条件格式。因此,我希望它们保持我格式化的状态,或者在复制/粘贴之后再次应用它们

从上面的回答中,我可以理解您希望保留条件格式,即
B3:H1001
=($A3“)*(B3=”“)
=$R:$R:$R=$R=“No”
A3:R1001
,即使将范围复制并粘贴到
B3:H1001
A3:R1001

如果我的理解是正确的,那么这个答案呢?请把这看作是几个可能的答案之一

问题和解决方法: 不幸的是,在当前阶段,没有直接保护GoogleApps脚本中的条件格式的方法。因此,在本例中,作为一种解决方法,我建议在使用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.
    }
    
    函数更改(e){
    const sheetName=“Sheet1”//请设置图纸名称。
    如果(e.source.getActiveSheet().getSheetName()!=sheetName | | e.changeType!=“其他”)返回;
    const sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
    var规则=sheet.ClearConditionalFormatures();
    const rule1=SpreadsheetApp.newConditionalFormature()
    .setRanges([sheet.getRange(“B3:H”)]))
    .挫折背景(“绿色”)
    .WhenFormula满足('=($A3'')*(B3=“”)).build();
    const rule2=电子表格app.newConditionalFormature()
    .setRanges([sheet.getRange(“A3:R”)]))
    .挫折背景(“绿色”)
    .WhenFormula满足('=$R:$R=“否”).build();
    表.设置条件格式([规则1,规则2]);
    SpreadsheetApp.flush();//可能不需要此行。
    }
    
    • 在此示例脚本中,问题中的两种条件格式设置为绿色背景色
    2.安装OnChange事件触发器

    3.试运行 作为测试运行,请在
    sheetName
    中复制并粘贴范围。这样,脚本由OnChange事件触发器运行

    注:
    • 我认为也可以使用OnEdit事件触发器。但在这种情况下,当条件格式的参数更改时,事件触发器不会运行。所以我使用了OnChange事件触发器
    参考资料:

    当我从另一个范围复制粘贴时,我将丢失已创建的条件格式。因此,我希望它们保持我格式化的状态,或者在复制/粘贴之后再次应用它们

    从上面的回答中,我可以理解您希望保留条件格式,即
    B3:H1001
    =($A3“)*(B3=”“)
    =$R:$R:$R=$R=“No”
    A3:R1001
    ,即使将范围复制并粘贴到
    B3:H1001
    A3:R1001

    如果我的理解是正确的,那么这个答案呢?请把这看作是几个可能的答案之一

    问题和解决方法: 不幸的是,在当前阶段,没有直接保护GoogleApps脚本中的条件格式的方法。因此,在本例中,作为一种解决方法,我建议在使用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.
    }
    
    函数更改(e){
    const sheetName=“Sheet1”//请设置图纸名称。
    如果(e.source.getActiveSheet().getSheetName()!=sheetName | | e.changeType!=“其他”)返回;
    const sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
    var规则=sheet.ClearConditionalFormatures();
    const rule1=SpreadsheetApp.newConditionalFormature()
    .setRanges([sheet.getRange(“B3:H”)]))
    .挫折背景(“绿色”)
    .WhenFormula满足('=($A3'')*(B3=“”)).build();
    const rule2=电子表格app.newConditionalFormature()
    .setRanges([sheet.getRange(“A3:R”)]))
    .挫折背景(“绿色”)
    .WhenFormula满足('=$R:$R=“否”).build();
    表.设置条件格式([规则1,规则2]);
    SpreadsheetApp.flush();//可能不需要此行。
    }
    
    • 在此示例脚本中,问题中的两种条件格式设置为绿色背景色
    2.安装OnChange事件触发器

    3.试运行 作为测试运行,请在
    sheetName
    中复制并粘贴范围。这样,脚本由OnChange事件触发器运行

    注:
    • 我认为也可以使用OnEdit事件触发器。但在这种情况下,当条件格式的参数更改时,事件触发器不会运行。所以我使用了OnChange事件触发器
    参考资料: