尝试创建渐变条件格式时,如何在 Google 工作表中编写 MIN、MID、MAX 枚举?
How to write the MIN, MID, MAX enums in Google Sheets when trying to create gradient conditional formatting?
如何在以下脚本中使用 InterpolationPointType 枚举?
查看带有指针的注释行,了解我在哪里遇到错误:Invalid value at 'requests[0].add_conditional_format_rule.rule.gradient_rule.midpoint.type' (TYPE_ENUM)
我对我在这里的设计感到很兴奋,我认为我即将实现一个可以动态添加颜色渐变条件格式到 Google Sheet.[=19 的脚本=]
但即使查看 ConditionalFormatRule, Gradient rules, and Add a conditional color gradient across a row 的文档,我也没有找到解决此枚举问题的方法。
function addGradients(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
var sheet = ss.getSheetByName("temp");
var requests = [];
//Do this for as many ranges as needed:
var myRange = Sheets.newGridRange();
myRange.sheetId = sheet.getSheetId();
myRange.startRowIndex = 12;
myRange.endRowIndex = 24;
myRange.startColumnIndex = 4;
myRange.endColumnIndex = 4;
var request1 = addGradientToRange(myRange);
requests.push(request1);
// Batch send the requests
var batchUpdate = Sheets.newBatchUpdateSpreadsheetRequest();
batchUpdate.requests = requests;
var response = Sheets.Spreadsheets.batchUpdate(batchUpdate, ss.getId());
}
function addGradientToRange(myRange){
var rule1GradientRule = Sheets.newGradientRule();
var ptMax = Sheets.newInterpolationPoint();
var ptMid = Sheets.newInterpolationPoint();
var ptMin = Sheets.newInterpolationPoint();
var colorGreen = Sheets.newColor();
colorGreen.green = 1;
var colorRed = Sheets.newColor();
colorRed.red = 1;
var colorWhite = Sheets.newColor();
ptMax.color = colorGreen;
ptMid.color = colorWhite;
ptMin.color = colorRed;
ptMax.type = "MAX";// What can I type here to set it to this enum?
ptMid.type = "MID";// What can I type here to set it to this enum?
ptMin.type = "MIN";// What can I type here to set it to this enum?
rule1GradientRule.maxpoint = ptMax;
rule1GradientRule.midpoint = ptMid;
rule1GradientRule.minpoint = ptMin;
var rule1 = Sheets.newConditionalFormatRule();
rule1.ranges = [myRange];
rule1.gradientRule = rule1GradientRule;
var request1 = Sheets.newRequest();
var addConditionalFormatRuleRequest1 = Sheets.newAddConditionalFormatRuleRequest();
addConditionalFormatRuleRequest1.rule = rule1;
addConditionalFormatRuleRequest1.index = 0;
request1.addConditionalFormatRule = addConditionalFormatRuleRequest1;
return request1;
}
如果我没有为每个 InterpolationPoint 指定 .type
,我会收到此错误:Invalid requests[0].addConditionalFormatRule: No interpolationPointType specified.
我也试过 ptMax.type = InterpolationPointType.Max;
,但后来我得到错误:ReferenceError: "InterpolationPointType" is not defined.
这个修改怎么样?
修改点:
- InterpolationPointType中没有
"MID"
。如果要给一个中间值,type可以用"PERCENT"
,value可以用"50"
。
- 如果要给"white"到中间,红绿蓝请分别用1、1、1。 Ref
修改后的脚本如下。我修改了addGradientToRange()
.
修改脚本:
function addGradientToRange(myRange){
var rule1GradientRule = Sheets.newGradientRule();
var ptMax = Sheets.newInterpolationPoint();
var ptMid = Sheets.newInterpolationPoint();
var ptMin = Sheets.newInterpolationPoint();
var colorGreen = Sheets.newColor();
colorGreen.green = 1;
var colorRed = Sheets.newColor();
colorRed.red = 1;
var colorWhite = Sheets.newColor();
colorWhite.red = 1; // Added
colorWhite.green = 1; // Added
colorWhite.blue = 1; // Added
ptMax.color = colorGreen;
ptMid.color = colorWhite;
ptMin.color = colorRed;
ptMax.type = "MAX";
ptMid.type = "PERCENT"; // Modified
ptMid.value = "50"; // Added
ptMin.type = "MIN";
rule1GradientRule.maxpoint = ptMax;
rule1GradientRule.midpoint = ptMid;
rule1GradientRule.minpoint = ptMin;
var rule1 = Sheets.newConditionalFormatRule();
rule1.ranges = [myRange];
rule1.gradientRule = rule1GradientRule;
var request1 = Sheets.newRequest();
var addConditionalFormatRuleRequest1 = Sheets.newAddConditionalFormatRuleRequest();
addConditionalFormatRuleRequest1.rule = rule1;
addConditionalFormatRuleRequest1.index = 0;
request1.addConditionalFormatRule = addConditionalFormatRuleRequest1;
return request1;
}
示例结果:
此示例应用于 "A1:E20" 的范围。
如果我误解了你的问题,我很抱歉。
我认为有一种更现代的方法(渐变条件格式),通过使用 ConditionalFormatRuleBuilder Class。
(参见 reference)
这是一个通用函数,它获取 sheet 名称和范围,并设置新规则,其中 0 为中点,绿色为最大值,红色为最小值:
//add a general gradiant conditional formatting with max=green, mid=white, min=red background
function addGradientToRange(theSheet, myRange) {
var sheet = SpreadsheetApp.getActive().getSheetByName(theSheet);
var range = sheet.getRange(myRange);
var rule = SpreadsheetApp.newConditionalFormatRule()
.setGradientMaxpoint("#00FF00")
.setGradientMidpointWithValue("#FFFFFF", SpreadsheetApp.InterpolationType.NUMBER, "0")
.setGradientMinpoint("#FF0000")
.setRanges([range])
.build()
var rules = sheet.getConditionalFormatRules();
rules.push(rule);
sheet.setConditionalFormatRules(rules);
}
希望对您有所帮助....
如何在以下脚本中使用 InterpolationPointType 枚举?
查看带有指针的注释行,了解我在哪里遇到错误:Invalid value at 'requests[0].add_conditional_format_rule.rule.gradient_rule.midpoint.type' (TYPE_ENUM)
我对我在这里的设计感到很兴奋,我认为我即将实现一个可以动态添加颜色渐变条件格式到 Google Sheet.[=19 的脚本=]
但即使查看 ConditionalFormatRule, Gradient rules, and Add a conditional color gradient across a row 的文档,我也没有找到解决此枚举问题的方法。
function addGradients(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
var sheet = ss.getSheetByName("temp");
var requests = [];
//Do this for as many ranges as needed:
var myRange = Sheets.newGridRange();
myRange.sheetId = sheet.getSheetId();
myRange.startRowIndex = 12;
myRange.endRowIndex = 24;
myRange.startColumnIndex = 4;
myRange.endColumnIndex = 4;
var request1 = addGradientToRange(myRange);
requests.push(request1);
// Batch send the requests
var batchUpdate = Sheets.newBatchUpdateSpreadsheetRequest();
batchUpdate.requests = requests;
var response = Sheets.Spreadsheets.batchUpdate(batchUpdate, ss.getId());
}
function addGradientToRange(myRange){
var rule1GradientRule = Sheets.newGradientRule();
var ptMax = Sheets.newInterpolationPoint();
var ptMid = Sheets.newInterpolationPoint();
var ptMin = Sheets.newInterpolationPoint();
var colorGreen = Sheets.newColor();
colorGreen.green = 1;
var colorRed = Sheets.newColor();
colorRed.red = 1;
var colorWhite = Sheets.newColor();
ptMax.color = colorGreen;
ptMid.color = colorWhite;
ptMin.color = colorRed;
ptMax.type = "MAX";// What can I type here to set it to this enum?
ptMid.type = "MID";// What can I type here to set it to this enum?
ptMin.type = "MIN";// What can I type here to set it to this enum?
rule1GradientRule.maxpoint = ptMax;
rule1GradientRule.midpoint = ptMid;
rule1GradientRule.minpoint = ptMin;
var rule1 = Sheets.newConditionalFormatRule();
rule1.ranges = [myRange];
rule1.gradientRule = rule1GradientRule;
var request1 = Sheets.newRequest();
var addConditionalFormatRuleRequest1 = Sheets.newAddConditionalFormatRuleRequest();
addConditionalFormatRuleRequest1.rule = rule1;
addConditionalFormatRuleRequest1.index = 0;
request1.addConditionalFormatRule = addConditionalFormatRuleRequest1;
return request1;
}
如果我没有为每个 InterpolationPoint 指定 .type
,我会收到此错误:Invalid requests[0].addConditionalFormatRule: No interpolationPointType specified.
我也试过 ptMax.type = InterpolationPointType.Max;
,但后来我得到错误:ReferenceError: "InterpolationPointType" is not defined.
这个修改怎么样?
修改点:
- InterpolationPointType中没有
"MID"
。如果要给一个中间值,type可以用"PERCENT"
,value可以用"50"
。 - 如果要给"white"到中间,红绿蓝请分别用1、1、1。 Ref
修改后的脚本如下。我修改了addGradientToRange()
.
修改脚本:
function addGradientToRange(myRange){
var rule1GradientRule = Sheets.newGradientRule();
var ptMax = Sheets.newInterpolationPoint();
var ptMid = Sheets.newInterpolationPoint();
var ptMin = Sheets.newInterpolationPoint();
var colorGreen = Sheets.newColor();
colorGreen.green = 1;
var colorRed = Sheets.newColor();
colorRed.red = 1;
var colorWhite = Sheets.newColor();
colorWhite.red = 1; // Added
colorWhite.green = 1; // Added
colorWhite.blue = 1; // Added
ptMax.color = colorGreen;
ptMid.color = colorWhite;
ptMin.color = colorRed;
ptMax.type = "MAX";
ptMid.type = "PERCENT"; // Modified
ptMid.value = "50"; // Added
ptMin.type = "MIN";
rule1GradientRule.maxpoint = ptMax;
rule1GradientRule.midpoint = ptMid;
rule1GradientRule.minpoint = ptMin;
var rule1 = Sheets.newConditionalFormatRule();
rule1.ranges = [myRange];
rule1.gradientRule = rule1GradientRule;
var request1 = Sheets.newRequest();
var addConditionalFormatRuleRequest1 = Sheets.newAddConditionalFormatRuleRequest();
addConditionalFormatRuleRequest1.rule = rule1;
addConditionalFormatRuleRequest1.index = 0;
request1.addConditionalFormatRule = addConditionalFormatRuleRequest1;
return request1;
}
示例结果:
此示例应用于 "A1:E20" 的范围。
如果我误解了你的问题,我很抱歉。
我认为有一种更现代的方法(渐变条件格式),通过使用 ConditionalFormatRuleBuilder Class。 (参见 reference) 这是一个通用函数,它获取 sheet 名称和范围,并设置新规则,其中 0 为中点,绿色为最大值,红色为最小值:
//add a general gradiant conditional formatting with max=green, mid=white, min=red background
function addGradientToRange(theSheet, myRange) {
var sheet = SpreadsheetApp.getActive().getSheetByName(theSheet);
var range = sheet.getRange(myRange);
var rule = SpreadsheetApp.newConditionalFormatRule()
.setGradientMaxpoint("#00FF00")
.setGradientMidpointWithValue("#FFFFFF", SpreadsheetApp.InterpolationType.NUMBER, "0")
.setGradientMinpoint("#FF0000")
.setRanges([range])
.build()
var rules = sheet.getConditionalFormatRules();
rules.push(rule);
sheet.setConditionalFormatRules(rules);
}
希望对您有所帮助....