Gar*_*ary 6 google-sheets google-apps-script gs-conditional-formatting
Google表格具有很好的交互式方式来声明性地定义条件格式.有没有办法使用App Script编写相同的声明模型?
我有一个生成许多电子表格的脚本.我使用Sheet和DataValidation类设置数据和数据验证规则.但是,对于条件格式化,我似乎无法做同样的事情.我期望找到一个ConditionalFormattingRule对象或类似的东西.
注意:我知道可以编写自定义脚本来侦听onEdit触发器.然而,该脚本将需要添加到每个对的生成电子表格.此外,像这样的非声明性规则不会出现在条件格式侧边栏中.
我只是试图将红色背景应用于没有价值的细胞.
这不可能吗?
我认为,在这种情况下,如果适合您的情况,您将不得不使用解决方法.
您必须在源电子表格中创建一个模板工作表,该模板工作表具有通过条件格式(由您手动完成)格式化的单元格.
然后,您的脚本会将此模板表复制到目标电子表格,然后使用带有{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)
使用最新的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()方法返回一个条件格式规则生成器,用于构建条件格式规则。
您可以在创建的每个新电子表格上运行此代码。
| 归档时间: |
|
| 查看次数: |
4706 次 |
| 最近记录: |