如何在单元格中添加和删除字符以强制更改值

时间:2014-08-06 19:57:47

标签: google-sheets

我正在使用一个函数计算彩色单元格的数量,但是当它们改变颜色(而不是值)时,电子表格无法识别值更改,并且我的公式不会使用新的彩色单元格更新

要手动强制更新,我必须向该单元格添加一个字符,然后将其删除,以便工作表识别值更改并重新计算彩色单元格的数量。有没有办法自动执行此操作并强制工作表添加和删除字符以强制更新?

希望这很清楚,可以回答。

1 个答案:

答案 0 :(得分:0)

如果单元格上有任何数据更新,您可以简单地使用onEdit函数。但是对于你的情况,我测试下面的脚本工作得很好,但我仍然感到困惑,这是编码的最佳实践,因为我找不到任何其他选项来解决你的问题。

//下面的函数将计算具有指定背景颜色的单元格数

function countWhereBackgroundColorIs(color, rangeSpecification) {

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var range = sheet.getRange(rangeSpecification);
var bgColors = range.getBackgrounds();
var k = 0;

  for (var i in bgColors) {
   for (var j in bgColors[i]) {
        if(bgColors[i][j] == color)
        k = k +1;
   }
 }
  return k;
}

//下面的函数会追加一个空格" "在单元格A1数据上,然后删除附加的字符。这是为了更新范围。确保至少上面提到的函数countWhereBackgroundColorIs()正在更新。这里使用了' A1'

function updateSheet()
{ 
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var cell = sheet.getRange("A1");
  var d = cell.getValue();
  cell.setValue(d+" ");
  SpreadsheetApp.flush();
  cell.setValue(d);
  SpreadsheetApp.flush();

}

//创建一个基于时间的触发器,每隔一分钟执行一次updateSheet()函数。最短时间为1分钟。这个触发器创建是一次性活动,这可以在GUI中完成,资源>所有触发器。

function createTimeDrivenTriggers() {
ScriptApp.newTrigger('updateSheet')
   .timeBased()
   .everyMinutes(1)
   .create();

}