Google 应用程序脚本(电子表格)- 根据颜色计算单元格值
Google App Script (Spreadsheet) - Calculate Cell Values based on Color
我希望根据同一列但第 y 行的单元格的颜色来计算第 x 行的单元格的值。
即:
如果B3,D3和E3是蓝色的。
然后对 B4、D4 和 E4 的值求和。
我目前的尝试(很差):
function sumWhereBackgroundColorElseWhereIs(color, colorRange, valueRange) {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var colorRange = sheet.getRange(colorRange);
var valueRange = sheet.getRange(valueRange);
var total = 0;
for (var i = 1; i <= colorRange.getNumRows(); i++) {
for (var j = 1; j <= colorRange.getNumColumns(); j++) {
var cell = range.getCell(i, j);
if(cell.getBackgroundColor() == color) {
}
}
}
for
var valueCell = range.getCell(i, j);
total += parseFloat(cell.getValue());
return total;
}
您无法使用自定义函数来完成您正在尝试做的事情。
自定义函数中的范围参数将值数组从范围发送到函数,而不是范围对象本身。
因此,在您的代码中,colorRange 将包含范围内的值而不是范围本身,因此无法确定背景颜色。
我就是这样完成的。
function setForegroundColor() {
var spreadSheet = SpreadsheetApp.openByUrl("");
var sheet = spreadSheet.getSheets()[0];
var range = sheet.getRange(3, 2, 1, 10); //getRange(row, column, numRows, numColumns) (change the last value to increase the columns serviced)
for (i = 1; i < 11; i++) {
cell = range.getCell(1,i);
color = cell.getBackground();
cell.setFontColor(color);
}
}
function calculateBLUFORManPower() {
var spreadSheet = SpreadsheetApp.openByUrl("");
var sheet = spreadSheet.getSheets()[0];
var x = 0;
var range = sheet.getRange(3, 2, 1, 10); //getRange(row, column, numRows, numColumns) (change the last value to increase the columns serviced)
var cell = sheet.getRange("A17");
var BLUFORColor = cell.getBackground();
for (i = 1; i < 11; i++) {
cell = range.getCell(1,i);
color = cell.getBackground();
if (color == BLUFORColor && cell.getValue != "") {
x = x + cell.getValue();
}
}
var cell = sheet.getRange("B19");
cell.setValue(x);
}
function calculateBLUFORUnits() {
var spreadSheet = SpreadsheetApp.openByUrl("");
var sheet = spreadSheet.getSheets()[0];
var x = 0;
var range = sheet.getRange(3, 2, 1, 10); //getRange(row, column, numRows, numColumns) (change the last value to increase the columns serviced)
var cell = sheet.getRange("A17");
var BLUFORColor = cell.getBackground();
for (i = 1; i < 11; i++) {
cell = range.getCell(1,i);
color = cell.getBackground();
if (color == BLUFORColor) {
x += 1;
}
}
var cell = sheet.getRange("B18");
cell.setValue(x);
}
function calculateOPFORManPower() {
var spreadSheet = SpreadsheetApp.openByUrl("");
var sheet = spreadSheet.getSheets()[0];
var x = 0;
var range = sheet.getRange(3, 2, 1, 10); //getRange(row, column, numRows, numColumns) (change the last value to increase the columns serviced)
var cell = sheet.getRange("A20");
var OPFORColor = cell.getBackground();
for (i = 1; i < 11; i++) {
cell = range.getCell(1,i);
color = cell.getBackground();
if (color == OPFORColor && cell.getValue != "") {
x = x + cell.getValue();
}
}
var cell = sheet.getRange("B22");
cell.setValue(x);
}
function calculateOPFORUnits() {
var spreadSheet = SpreadsheetApp.openByUrl("");
var sheet = spreadSheet.getSheets()[0];
var x = 0;
var range = sheet.getRange(3, 2, 1, 10); //getRange(row, column, numRows, numColumns) (change the last value to increase the columns serviced)
var cell = sheet.getRange("A20");
var OPFORColor = cell.getBackground();
for (i = 1; i < 11; i++) {
cell = range.getCell(1,i);
color = cell.getBackground();
if (color == OPFORColor) {
x += 1;
}
}
var cell = sheet.getRange("B21");
cell.setValue(x);
}
function OPFOR() {
calculateOPFORUnits();
calculateOPFORManPower();
}
function BLUFOR() {
calculateBLUFORUnits();
calculateBLUFORManPower();
}
function ALL(){
setForegroundColor();
BLUFOR();
OPFOR();
}
您无法按照您的方式获取调用背景颜色的范围。
已发布解决方法 here
此外,您必须键入颜色代码而不是名称。
在您的情况下,您必须像这样输入自定义函数
=sumWhereBackgroundColorElseWhereIs("#0000ff","B3:F3","B4:F4")
或者像这样
=sumWhereBackgroundColorElseWhereIs("#0000ff",CELL("address",B3)&":"&CELL("address",F3),CELL("address",B4)&":"&CELL("address",F4))
你的脚本看起来像这样
function sumWhereBackgroundColorElseWhereIs(color, ColorRange, ValueRange) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var colorRange = sheet.getRange(ColorRange);
var valueRange = sheet.getRange(ValueRange);
var firstColumn = colorRange.getColumn();
var lastColumn = colorRange.getLastColumn();
var valueRangeRow = valueRange.getRow();
var backgrounds = colorRange.getBackgrounds();
backgrounds = backgrounds.toString().split(",");
var total = 0;
for (var i = firstColumn; i <= lastColumn; i++) {
var ref = i - firstColumn;
if (backgrounds[ref] === color) {
total = total + Number(sheet.getRange(valueRangeRow, i).getValue());
}
}
return total;
}
我希望根据同一列但第 y 行的单元格的颜色来计算第 x 行的单元格的值。
即: 如果B3,D3和E3是蓝色的。 然后对 B4、D4 和 E4 的值求和。
我目前的尝试(很差):
function sumWhereBackgroundColorElseWhereIs(color, colorRange, valueRange) {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var colorRange = sheet.getRange(colorRange);
var valueRange = sheet.getRange(valueRange);
var total = 0;
for (var i = 1; i <= colorRange.getNumRows(); i++) {
for (var j = 1; j <= colorRange.getNumColumns(); j++) {
var cell = range.getCell(i, j);
if(cell.getBackgroundColor() == color) {
}
}
}
for
var valueCell = range.getCell(i, j);
total += parseFloat(cell.getValue());
return total;
}
您无法使用自定义函数来完成您正在尝试做的事情。
自定义函数中的范围参数将值数组从范围发送到函数,而不是范围对象本身。
因此,在您的代码中,colorRange 将包含范围内的值而不是范围本身,因此无法确定背景颜色。
我就是这样完成的。
function setForegroundColor() {
var spreadSheet = SpreadsheetApp.openByUrl("");
var sheet = spreadSheet.getSheets()[0];
var range = sheet.getRange(3, 2, 1, 10); //getRange(row, column, numRows, numColumns) (change the last value to increase the columns serviced)
for (i = 1; i < 11; i++) {
cell = range.getCell(1,i);
color = cell.getBackground();
cell.setFontColor(color);
}
}
function calculateBLUFORManPower() {
var spreadSheet = SpreadsheetApp.openByUrl("");
var sheet = spreadSheet.getSheets()[0];
var x = 0;
var range = sheet.getRange(3, 2, 1, 10); //getRange(row, column, numRows, numColumns) (change the last value to increase the columns serviced)
var cell = sheet.getRange("A17");
var BLUFORColor = cell.getBackground();
for (i = 1; i < 11; i++) {
cell = range.getCell(1,i);
color = cell.getBackground();
if (color == BLUFORColor && cell.getValue != "") {
x = x + cell.getValue();
}
}
var cell = sheet.getRange("B19");
cell.setValue(x);
}
function calculateBLUFORUnits() {
var spreadSheet = SpreadsheetApp.openByUrl("");
var sheet = spreadSheet.getSheets()[0];
var x = 0;
var range = sheet.getRange(3, 2, 1, 10); //getRange(row, column, numRows, numColumns) (change the last value to increase the columns serviced)
var cell = sheet.getRange("A17");
var BLUFORColor = cell.getBackground();
for (i = 1; i < 11; i++) {
cell = range.getCell(1,i);
color = cell.getBackground();
if (color == BLUFORColor) {
x += 1;
}
}
var cell = sheet.getRange("B18");
cell.setValue(x);
}
function calculateOPFORManPower() {
var spreadSheet = SpreadsheetApp.openByUrl("");
var sheet = spreadSheet.getSheets()[0];
var x = 0;
var range = sheet.getRange(3, 2, 1, 10); //getRange(row, column, numRows, numColumns) (change the last value to increase the columns serviced)
var cell = sheet.getRange("A20");
var OPFORColor = cell.getBackground();
for (i = 1; i < 11; i++) {
cell = range.getCell(1,i);
color = cell.getBackground();
if (color == OPFORColor && cell.getValue != "") {
x = x + cell.getValue();
}
}
var cell = sheet.getRange("B22");
cell.setValue(x);
}
function calculateOPFORUnits() {
var spreadSheet = SpreadsheetApp.openByUrl("");
var sheet = spreadSheet.getSheets()[0];
var x = 0;
var range = sheet.getRange(3, 2, 1, 10); //getRange(row, column, numRows, numColumns) (change the last value to increase the columns serviced)
var cell = sheet.getRange("A20");
var OPFORColor = cell.getBackground();
for (i = 1; i < 11; i++) {
cell = range.getCell(1,i);
color = cell.getBackground();
if (color == OPFORColor) {
x += 1;
}
}
var cell = sheet.getRange("B21");
cell.setValue(x);
}
function OPFOR() {
calculateOPFORUnits();
calculateOPFORManPower();
}
function BLUFOR() {
calculateBLUFORUnits();
calculateBLUFORManPower();
}
function ALL(){
setForegroundColor();
BLUFOR();
OPFOR();
}
您无法按照您的方式获取调用背景颜色的范围。
已发布解决方法 here
此外,您必须键入颜色代码而不是名称。
在您的情况下,您必须像这样输入自定义函数
=sumWhereBackgroundColorElseWhereIs("#0000ff","B3:F3","B4:F4")
或者像这样
=sumWhereBackgroundColorElseWhereIs("#0000ff",CELL("address",B3)&":"&CELL("address",F3),CELL("address",B4)&":"&CELL("address",F4))
你的脚本看起来像这样
function sumWhereBackgroundColorElseWhereIs(color, ColorRange, ValueRange) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var colorRange = sheet.getRange(ColorRange);
var valueRange = sheet.getRange(ValueRange);
var firstColumn = colorRange.getColumn();
var lastColumn = colorRange.getLastColumn();
var valueRangeRow = valueRange.getRow();
var backgrounds = colorRange.getBackgrounds();
backgrounds = backgrounds.toString().split(",");
var total = 0;
for (var i = firstColumn; i <= lastColumn; i++) {
var ref = i - firstColumn;
if (backgrounds[ref] === color) {
total = total + Number(sheet.getRange(valueRangeRow, i).getValue());
}
}
return total;
}