首页 > 解决方案 > Google 表格 - 根据背景颜色添加特定值

问题描述

我尝试过制作 Google Apps 脚本,但在尝试了解如何设置它时遇到了麻烦。由此看来,我可以创建一个可以在电子表格本身内部调用的函数,就像 Google Sheets 提供的 SUM 函数一样。我已经查看了该getBackground()函数,但似乎它需要包含一些全局变量而不仅仅是函数。

这是我当前的电子表格: 电子表格

我想输入一个函数,它在 A2:A1000 范围内,并根据单元格的背景颜色,确定它是进入“工作”还是“生活”,然后将其添加到单元格 E4(总工作)或F4(总寿命)相应。A 列中的单元格将始终是数字。

这是我尝试过的,我想我可能完全基于我的单细胞方法而偏离了道路:

function workTime(input) {
  if (input.getBackground() == "#d9ead3") {
    input.setFontColor(4285f4)
  } else {
    input.setFontColor(null)
  }
}
//I get errors on line 3 for some reason though...

TL;DR 基于单元格的背景颜色,我如何创建一个函数来计算这些特定颜色的数字总和,并相应地将它们显示在“总工作时间”和“总生命周期”下的不同单元格中?

标签: google-apps-scriptgoogle-sheets

解决方案


“自定义公式”方法非常有限

您将进入自定义公式的唯一输入是values,而不是 cell 对象。运行公式的函数永远不会知道它的位置或格式。它接收一个值或一个值数组,并返回一个值或值数组。

Apps 脚本版本

function workTime2() {
  let file = SpreadsheetApp.getActive();
  let sheet = file.getSheetByName("Sheet1");
  let range = sheet.getRange('A1:A16');
  let targetColor = "#00ffff"
  let values = range.getValues(); // [[1],[2],[3]...]
  let colors = range.getBackgrounds(); // [[#ffffff],[#00ffff],[#ffffff]...]

  let sum = 0
  for (let i = 1; i != values.length; i++){ // starting at 1 to skip first row
    let value = values[i][0]
    let color = colors[i][0]
    if (color == targetColor) {
      sum += value
    }
  }

  let resultCell = sheet.getRange('B2');
  resultCell.setValue(sum);
}

此脚本将对 A1:A16 中的值求和(如果它们是绿松石色)。将总和放入 B2。

在此处输入图像描述

这是一种基于单元格值获取总和的方法。这应该为您提供了一个很好的起点,可以根据自己的喜好进行定制。

参考


推荐阅读