Google apps script GoogleApps脚本:如何在工作表中获取条件格式规则,包括每个规则的值
我似乎不知道如何在一个工作表中获取所有条件格式,尤其是获取在条件中设置的值 我有一张有一列数量的表。每个数量都有一个唯一的条件格式值集,因此,如果单元格中的数量值低于此阈值(在条件格式内设置),则单元格的背景将变为红色 这一切都很好 问题是我需要通过条件格式访问为每个单元格设置的唯一阈值 我试过许多不同的变奏Google apps script GoogleApps脚本:如何在工作表中获取条件格式规则,包括每个规则的值,google-apps-script,google-sheets,gs-conditional-formatting,Google Apps Script,Google Sheets,Gs Conditional Formatting,我似乎不知道如何在一个工作表中获取所有条件格式,尤其是获取在条件中设置的值 我有一张有一列数量的表。每个数量都有一个唯一的条件格式值集,因此,如果单元格中的数量值低于此阈值(在条件格式内设置),则单元格的背景将变为红色 这一切都很好 问题是我需要通过条件格式访问为每个单元格设置的唯一阈值 我试过许多不同的变奏 var rules=sheet.getConditionalFormatures()等。然后循环这些规则,只会得到奇怪的Logger.log结果,如下所示: com.google.apps
var rules=sheet.getConditionalFormatures()
等。然后循环这些规则,只会得到奇怪的Logger.log
结果,如下所示:
com.google.apps.maestro.server.beans.trix.impl.ConditionalFormatRuleApiAdapter@17521c6a
完全遵循了以下说明文件,但也失败了:
编辑:我知道这行是你的日志结果 它看起来是这样的,因为它是一个对象,当您尝试记录一个没有A1Notation()的范围时,它也会这样做。这只是意味着您没有使用返回数组或值的方法 按照您链接的文档,应该可以满足您的需要。像这样为我工作:
function findThresholds() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();;
var formats = sheet.getConditionalFormatRules();
var thresholds = [];
formats.forEach(function(format, i) {
var booleanCondition = format.getBooleanCondition();
if (booleanCondition) {
var threshold = booleanCondition.getCriteriaValues();
thresholds.push(threshold[0]) //if you have more than one value per contional format, omit [0]
}
});
return thresholds
这会将它们推送到一个数组中,但您也可以直接使用它们
编辑2:因为知道阈值所在的行是相关的:
对于每种格式,都可以使用.getRanges()方法。然后,在每个范围上,您将访问.getRow()以了解此范围从哪一行开始。如果该范围超过一行高,则需要getValues(),以便能够通过将该行的索引值添加到前面得到的起始行来计算每一行。最后,您可以将该值作为一个键,将threshold值作为dict中的一个值,这样您就可以调用该行来获取阈值
function findThresholds() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(<sheet name>);
var formats = sheet.getConditionalFormatRules();
var thresholds = {};
formats.forEach(function(format) {
var booleanCondition = format.getBooleanCondition();
var ranges = format.getRanges();
if (booleanCondition) {
var threshold = booleanCondition.getCriteriaValues();
ranges.forEach(function(range) {
var rowStart = range.getRow();
var rows = [];
var vals = range.getValues(); //if every format only apply to one row, you may omit this part and just use 'rowStart' as 'row'
for(var i = 0; i < vals.length; i++){
var row = (rowStart+i);
thresholds[row] = threshold[0]
}
});
}
});
return thresholds
}
函数findThresholds(){
var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName();
var formats=sheet.getConditionalFormatures();
var阈值={};
formats.forEach(函数(格式){
var booleanCondition=format.getBooleanCondition();
var ranges=format.getRanges();
if(布尔条件){
var threshold=booleanCondition.getCriteriaValues();
范围。forEach(函数(范围){
var rowStart=range.getRow();
var行=[];
var vals=range.getValues();//如果每种格式仅适用于一行,则可以省略此部分,而只使用“rowStart”作为“row”
对于(变量i=0;i
您在其他列上有条件格式化吗?您好,thx用于响应,没有。就是这一个!但我面临一个奇怪的问题,我看到了阈值,但它们超出了预期的顺序?这几乎就好像阈值是按照我最初创建它们的顺序(我不认为是从工作表的第1行开始逐个创建的),而不是电子表格的顺序(即第1行条件阈值将是数组中的第一个阈值,等等)。是的,我确实认为它们是按照那个顺序创建的。但是,我正在检查如果你有康德的话如何得到它。在多个列中格式化,您实际上可以获得cond、format的范围,因此您可以在dict或其他内容中使用阈值推送行索引,然后能够按行获取它们。每行都有自己的还是有一些共享?列中的每个单元格都有自己的条件格式规则和阈值。我还没有测试您的findThresholds()函数,但现在我知道您可以使用getRanges(),我相信它会工作的!我会尝试一下,让你知道。非常感谢!