Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 谷歌应用程序脚本(电子表格)-基于颜色计算单元格值_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 谷歌应用程序脚本(电子表格)-基于颜色计算单元格值

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合计

我希望根据同一列但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合计=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;我详细解释了哪些代码不起作用