Google apps script 谷歌应用程序脚本(电子表格)-基于颜色计算单元格值
我希望根据同一列但y行的单元格颜色计算x行的单元格值 即: 如果B3、D3和E3为蓝色。 然后将B4、D4和E4的值相加 我目前的尝试(相当差):Google apps script 谷歌应用程序脚本(电子表格)-基于颜色计算单元格值,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我希望根据同一列但y行的单元格颜色计算x行的单元格值 即: 如果B3、D3和E3为蓝色。 然后将B4、D4和E4的值相加 我目前的尝试(相当差): 函数sumWhere背景颜色sewhere(颜色、颜色范围、值范围){ var sheet=SpreadsheetApp.getActiveSpreadsheet(); var colorRange=sheet.getRange(colorRange); var valueRange=sheet.getRange(valueRange); var合计
函数sumWhere背景颜色sewhere(颜色、颜色范围、值范围){
var sheet=SpreadsheetApp.getActiveSpreadsheet();
var colorRange=sheet.getRange(colorRange);
var valueRange=sheet.getRange(valueRange);
var合计=0;
对于(var i=1;i您无法使用自定义函数执行您试图执行的操作
自定义函数中的range参数将值数组从range发送到函数,而不是range对象本身
因此,在您的代码中,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();
}
函数setForegroundColor(){
var电子表格=SpreadsheetApp.openByUrl(“”);
var sheet=spreadSheet.getSheets()[0];
var range=sheet.getRange(3,2,1,10);//getRange(行、列、numRows、numColumns)(更改最后一个值以增加服务的列)
对于(i=1;i<11;i++){
cell=range.getCell(1,i);
color=cell.getBackground();
cell.setFontColor(颜色);
}
}
函数calculateBLUFORManPower(){
var电子表格=SpreadsheetApp.openByUrl(“”);
var sheet=spreadSheet.getSheets()[0];
var x=0;
var range=sheet.getRange(3,2,1,10);//getRange(行、列、numRows、numColumns)(更改最后一个值以增加服务的列)
var单元格=表。获取范围(“A17”);
var BLUFORColor=cell.getBackground();
对于(i=1;i<11;i++){
cell=range.getCell(1,i);
color=cell.getBackground();
if(color==BLUFORColor&&cell.getValue!=“”){
x=x+cell.getValue();
}
}
var单元格=sheet.getRange(“B19”);
单元设置值(x);
}
函数calculateBLUFORUnits(){
var电子表格=SpreadsheetApp.openByUrl(“”);
var sheet=spreadSheet.getSheets()[0];
var x=0;
var range=sheet.getRange(3,2,1,10);//getRange(行、列、numRows、numColumns)(更改最后一个值以增加服务的列)
var单元格=表。获取范围(“A17”);
var BLUFORColor=cell.getBackground();
对于(i=1;i<11;i++){
cell=range.getCell(1,i);
color=cell.getBackground();
如果(颜色==BLUFORColor){
x+=1;
}
}
var单元格=sheet.getRange(“B18”);
单元设置值(x);
}
函数CalculateFormanPower(){
var电子表格=SpreadsheetApp.openByUrl(“”);
var sheet=spreadSheet.getSheets()[0];
var x=0;
var range=sheet.getRange(3,2,1,10);//getRange(行、列、numRows、numColumns)(更改最后一个值以增加服务的列)
var单元格=sheet.getRange(“A20”);
var OPFORColor=cell.getBackground();
对于(i=1;i<11;i++){
cell=range.getCell(1,i);
color=cell.getBackground();
if(color==OPFORColor&&cell.getValue!=“”){
x=x+cell.getValue();
}
}
var单元格=sheet.getRange(“B22”);
单元设置值(x);
}
函数CalculateForUnits(){
var电子表格=SpreadsheetApp.openByUrl(“”);
var sheet=spreadSheet.getSheets()[0];
var x=0;
var range=sheet.getRange(3,2,1,10);//getRange(行、列、numRows、numColumns)(更改最后一个值以增加服务的列)
var单元格=sheet.getRange(“A20”);
var OPFORColor=cell.getBackground();
对于(i=1;i<11;i++){
cell=range.getCell(1,i);
color=cell.getBackground();
if(color==OPFORColor){
x+=1;
}
}
var单元格=sheet.getRange(“B21”);
单元设置值(x);
}
函数OPFOR(){
计算单位();
计算FormanPower();
}
函数BLUFOR(){
calculateBLUFORUnits();
calculateBLUFORManPower();
}
函数ALL(){
setForegroundColor();
BLUFOR();
OPFOR();
}
您无法获得按您的方式调用背景色的范围
正如所贴的,有一些变通办法
此外,您还必须键入颜色代码,而不是名称
在您的情况下,您必须像这样键入自定义函数
=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;
}
还是像这样
=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;
}
你的脚本应该是这样的
=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;
}
函数sumWhere背景颜色sewhere(颜色、颜色范围、值范围){
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合计=0;
对于(var i=firstColumn;我详细解释了哪些代码不起作用