首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >刷新自定义函数

刷新自定义函数
EN

Stack Overflow用户
提问于 2022-02-28 23:25:21
回答 2查看 170关注 0票数 0

我正试图在谷歌单张中找到彩色单元格的最小值。在从这个论坛得到一些帮助后,我能够得到我需要的东西。但基于细胞颜色变化的最小值的变化,结果似乎并不是动态的。有人能帮忙吗?

代码语言:javascript
复制
/**
* @param {range} countRange Range to be evaluated
* @param {range} colorRef Cell with background color to be searched for in countRange
* @return {number}
* @customfunction
*/

function minValColoredCells(countRange,colorRef) {
var activeRange = SpreadsheetApp.getActiveRange();
var activeSheet = activeRange.getSheet();
var formula = activeRange.getFormula();

var rangeA1Notation = formula.match(/\((.*)\,/).pop();
var range = activeSheet.getRange(rangeA1Notation);
var bg = range.getBackgrounds();
var values = range.getValues();

var colorCellA1Notation = formula.match(/\,(.*)\)/).pop();
var colorCell = activeSheet.getRange(colorCellA1Notation);
var color = colorCell.getBackground();

var colourarray=[]

for(var i=0;i<bg.length;i++){
     for(var j=0;j<bg[0].length;j++){
        if( bg[i][j] == color ){
           colourarray.push(values[i][j])                   
        }
     }
}

   var smallest = colourarray.sort((a, b) => a - b);
  // Logger.log("DEBUG: the min is "+smallest[0])
   return smallest[0];
}
EN

回答 2

Stack Overflow用户

发布于 2022-02-28 23:57:11

颜色更改不会自动刷新结果。为此,您可以添加一个虚拟参数,例如复选框,并选中/取消选中以刷新。例如,通过写入来调用此参数

代码语言:javascript
复制
=minValColoredCells(___________,___________,$A$1)

其中A1包含复选框

你得稍微改变一下剧本

代码语言:javascript
复制
var rangeA1Notation = formula.match(/\((.*)\)/).pop().split(',')[0];

代码语言:javascript
复制
var colorCellA1Notation = formula.match(/\((.*)\)/).pop().split(',')[1];

完整的脚本将是

代码语言:javascript
复制
function minValColoredCells(countRange, colorRef) {
  var activeRange = SpreadsheetApp.getActiveRange();
  var activeSheet = activeRange.getSheet();
  var formula = activeRange.getFormula();
  var formula = activeRange.getFormula();
  var rangeA1Notation = formula.match(/\((.*)\)/).pop().split(',')[0];
  var range = activeSheet.getRange(rangeA1Notation);
  var bg = range.getBackgrounds();
  var values = range.getValues();

  var colorCellA1Notation = formula.match(/\((.*)\)/).pop().split(',')[1];
  var colorCell = activeSheet.getRange(colorCellA1Notation);
  var color = colorCell.getBackground();

  var colourarray = []

  for (var i = 0; i < bg.length; i++) {
    for (var j = 0; j < bg[0].length; j++) {
      if (bg[i][j] == color) {
        colourarray.push(values[i][j])
      }
    }
  }

  var smallest = colourarray.sort((a, b) => a - b);
  return smallest[0];
}
票数 0
EN

Stack Overflow用户

发布于 2022-03-01 18:08:31

在我看来,这是一个典型的XY问题示例。这里真正的解决方案是使用某种代码来管理颜色的细节,而不是手动更改颜色。然后,您将不会被困在使用AppScript读取颜色,您只需使用公式读取文本,以找到最小的基于MINIFS()的公式。

以下是解释解决方案的电子表格

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71302144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档