工作表单元格包含数字。细胞里充满了不同的颜色。我想在列中对那些颜色相同的值进行加和。下面是我启动的代码,但没有完成,因为对我来说似乎很麻烦。
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var bg_1 = sheet.getRange("B3").getBackground();
var bg_2 = sheet.getRange("B4").getBackground();
var bg_3 = sheet.getRange("B5").getBackground();
Logger.log(bg_1); Logger.log(bg_2); Logger.log(bg_3);
var ROW = 7;
var lr = sheet.getLastRow();
var d = lr - ROW + 1;
var step_1 = sheet.getRange(ROW, 3, d).getValues().filter(String);
var step_2 = sheet.getRange(ROW, 4, d).getValues().filter(String);
var step_3 = sheet.getRange(ROW, 5, d).getValues().filter(String);
var step_4 = sheet.getRange(ROW, 6, d).getValues().filter(String);
var step_5 = sheet.getRange(ROW, 7, d).getValues().filter(String);
var vals = sheet.getRange(ROW, 3, d, 5).getValues();
var bgs = sheet.getRange(ROW, 3, d, 5).getBackgrounds();
Logger.log("pause");
}在我看来,映射函数可以在这里使用。首先获取值、和颜色的数组。然后,从颜色数组中,为这三种颜色中的每一种得到3个数组(带有0和1)。然后将这些数组乘以一个值数组,将元素添加到3行中的每一行的5个单元格中。理论上,我理解,但实际上.我寻求帮助。
图中显示了所需的结果。

这里是工作表的链接。
发布于 2021-06-12 00:38:48
请参阅下面的解决方案。我遍历了每个列,然后使用一个2D数组来存储每个列的值,在背景颜色匹配时添加它们,然后设置列颜色求和。在这之后,继续进入下一篇专栏。
代码:
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var bg_1 = sheet.getRange("B3").getBackground();
var bg_2 = sheet.getRange("B4").getBackground();
var bg_3 = sheet.getRange("B5").getBackground();
// how many colors
colors = 3
// C3 (where the data starts)
startingRow = 7;
startingColumn = 3;
// how many rows and columns is the data
rows = 6;
columns = 5;
// get all data
var data = sheet.getRange(startingRow, startingColumn, rows, columns).getValues();
// loop the data, but we start from columns then row instead
for(j=0;j<columns;j++){
// reset values per column
values = [[0], [0], [0]];
for(i=0;i<rows;i++){
switch(sheet.getRange(i + startingRow, j + startingColumn).getBackground()) {
// if yellow, add to 1st index
case bg_1:
values[0][0] += data[i][j];
break;
// if green, add to 2nd index
case bg_2:
values[1][0] += data[i][j];
break;
// if blue, add to 3rd index
case bg_3:
values[2][0] += data[i][j];
break;
default:
break;
}
}
// after processing all values in column, set value of the column per color
sheet.getRange(startingRow - 1 - colors, j + startingColumn, colors, 1).setValues(values);
}
}输出:

https://stackoverflow.com/questions/67943857
复制相似问题