添加条件格式规则

Gar*_*ary 6 google-sheets google-apps-script gs-conditional-formatting

Google表格具有很好的交互式方式来声明性地定义条件格式.有没有办法使用App Script编写相同的声明模型?

我有一个生成许多电子表格的脚本.我使用SheetDataValidation类设置数据和数据验证规则.但是,对于条件格式化,我似乎无法做同样的事情.我期望找到一个ConditionalFormattingRule对象或类似的东西.

注意:我知道可以编写自定义脚本来侦听onEdit触发器.然而,该脚本将需要添加到每个对的生成电子表格.此外,像这样的非声明性规则不会出现在条件格式侧边栏中.

我只是试图将红色背景应用于没有价值的细胞.

这不可能吗?

Dav*_*Tew 7

我认为,在这种情况下,如果适合您的情况,您将不得不使用解决方法.

您必须在源电子表格中创建一个模板工作表,该模板工作表具有通过条件格式(由您手动完成)格式化的单元格.

然后,您的脚本会将此模板表复制到目标电子表格,然后使用带有{formatOnly:true}高级参数的copyTo方法将模板表中一个或一系列单元格的格式复制到您选择的表格中(最后,您可以从目标电子表格中删除此模板表.(copyTo方法仅在同一电子表格中从一个范围复制到另一个范围).

像这样的东西:

function transferFormatting() {
  var targetSs = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/1dLv8V5fKmmxRLi5maLIOgrxVGVaqGGOD7STHbEremQs/edit#gid=0');
  var targetSsDisplaySheet = targetSs.getSheets()[0];
  var sourceSs = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/14RxLXktm0wj-lSFrl5Fas9B-smMYhknFt3-dYQbwH3o/edit#gid=933388275');
  var templateSheet = sourceSs.getSheetByName('Template');
  var targetSsFormatTemplateSheet =  templateSheet.copyTo(targetSs);

  targetSsFormatTemplateSheet.getRange("A1").copyTo(targetSsDisplaySheet.getRange("B:D"), {formatOnly:true});
  targetSs.deleteSheet(targetSsFormatTemplateSheet);
}
Run Code Online (Sandbox Code Playgroud)


Jom*_*n68 3

使用最新的Sheets api,您可以以编程方式添加条件格式规则。

要添加将工作表中所有空单元格的背景设置为红色的规则,您可以执行以下操作:

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('MySheet');

  var numRows = sheet.getLastRow();
  var numCols = sheet.getLastColumn();
  var range = sheet.getRange(1,1, numRows, numCols);
  var rule = SpreadsheetApp.newConditionalFormatRule()
      .whenCellEmpty()
      .setBackground("red")
      .setRanges([range])
      .build();        
  var rules = sheet.getConditionalFormatRules();
  rules.push(rule);
  sheet.setConditionalFormatRules(rules);
Run Code Online (Sandbox Code Playgroud)

SpreadsheetApp newConditionalFormatRule()方法返回一个条件格式规则生成器,用于构建条件格式规则。

您可以在创建的每个新电子表格上运行此代码。