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,我在大学里有基本的编码技能,但不熟悉谷歌表单的应用程序脚本,所以我确信我的代码到处都是,也许有一种更简单的方法,但我真的需要一些帮助,然后再拔出我所有的头发 我想做的是: 创建一个函数,从源表上所有应变的平均值列(具有多行相同应变)返回应变的总平均值,并放入应变表上的协调行(每应变1行)。我不明白的是,当有多条相同应变的线时,函数会不断地将平均数相加,以得到总平均数 以下是我的代码: function getAvgYield(x) { //Average Strain Yield funct

我在大学里有基本的编码技能,但不熟悉谷歌表单的应用程序脚本,所以我确信我的代码到处都是,也许有一种更简单的方法,但我真的需要一些帮助,然后再拔出我所有的头发

我想做的是: 创建一个函数,从源表上所有应变的平均值列(具有多行相同应变)返回应变的总平均值,并放入应变表上的协调行(每应变1行)。我不明白的是,当有多条相同应变的线时,函数会不断地将平均数相加,以得到总平均数

以下是我的代码:

function getAvgYield(x) {
  //Average Strain Yield function
  var strainName1 = x;

  //Make Spreadsheets
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sourceSheet = ss.getSheetByName('Strain Yields');
  //var strainSheet = ss.getSheetByName('Strains');

  //get row number of strainName2 being used
  var sourceCell = sourceSheet.getCurrentCell().getRow();

  //input necessary data from source sheet
  var strainName2 = sourceSheet.getRange(sourceCell, 1).getValue();
  var avgPerPlant = sourceSheet.getRange(sourceCell, 5).getValue();

  //create & define variables
  var avgs = 0;
  var avgYield = 0;
  var tempYield = 0;
    
    if (strainName1 == strainName2)
    {
      tempYield += avgPerPlant;
      avgs++;
      sourceCell++;
      strainName2 = sourceSheet.getRange(sourceCell, 1).getValue();

    } else 
    {
          avgYield = tempYield / avgs;
          avgs = 0;
          tempYield = 0;
          sourceCell++;
          return avgYield;

    }
    avgYield = tempYield / avgs;
    avgs = 0;
    tempYield = 0;
    return avgYield;
}
编辑: 这是这些表格的截图。“应变率”中的信息来自另一份文件

尝试填充“平均收益率”列

从本表中的平均产量栏中,但将相同的菌株加在一起。


希望这有帮助

在“菌株”选项卡上的C2单元中尝试此方法

=AVERAGEIF('Strain Yields'!A:A,A2,'Strain Yields'!E:E)

在“菌株”选项卡上的C2单元格中尝试此操作

=AVERAGEIF('Strain Yields'!A:A,A2,'Strain Yields'!E:E)

您可以制作一个脚本来填补这一空白,但实际上,更灵活的做法是使用一个函数来计算和返回结果,这样就可以在不同的项目中使用:

/**
*计算每组的平均值
*
*@param criteria_range列用于检查组的标准(将根据组进行检查)。
*@param group_range列,其中包含组的名称。
*@param average_range如果标准与组匹配,则要平均的值列。
*@param no_elems消息显示组中是否没有元素。由于错误,它是“无元素”。
*
*@返回每个组的平均值
*/
函数平均值组(标准范围、组范围、平均范围、无元素=“无元素”){
//输入清理
criteria\u range=criteria\u range.map(行=>行[0])
group\u range=group\u range.map(行=>行[0])
average\u range=average\u range.map(行=>行[0])
//计算所有的平均数
常量元素=数学最小值(标准范围长度、平均范围长度)
返回组\u range.map(组=>{
if(!group)return//如果没有组,则提前返回
设总数=0
让计数=0
for(设i=0;i
请注意,此算法仅适用于列。这使得代码更简单,这是您的用例(我认为是最常见的)

要使用它,请在“平均收益率”标题中添加以下内容:

={"Average Yield"; AVERAGEGROUPS('Strain Yields'!A2:A, A2:A, 'Strain Yields'!B2:B)}
算法故障 函数要做的第一件事是从2D值数组(行数组)中提取值。它是通过获取行的第一个元素来实现的,因此它在数组中只有一列值

range.map(row=>row[0])//返回第一列中的值
现在是平均值的时候了<代码>元素
只是我们必须检查的元素的长度。它被计算为防止代码超出范围的最小长度。然后我们使用
map
()在每组和平均值之间进行1:1的映射。里面是实际的平均计算

这很简单,如果它是组的一部分,我们需要添加元素和计数,并在最后将其除以。我们需要小心没有元素的组。在这种情况下,我们将返回一个字符串,说明(无法返回错误)

工具书类

您可以制作一个脚本来填充这些内容,但实际上更灵活的做法是使用一个函数来计算和返回结果,因此可以在不同的项目中使用:

/**
*计算每组的平均值
*
*@param criteria_range列用于检查组的标准(将根据组进行检查)。
*@param group_range列,其中包含组的名称。
*@param average_range如果标准与组匹配,则要平均的值列。
*@param no_elems消息显示组中是否没有元素。由于错误,它是“无元素”。
*
*@返回每个组的平均值
*/
函数平均值组(标准范围、组范围、平均范围、无元素=“无元素”){
//输入清理
criteria\u range=criteria\u range.map(行=>行[0])
group\u range=group\u range.map(行=>行[0])
average\u range=average\u range.map(行=>行[0])
//计算所有的平均数
常量元素=数学最小值(标准范围长度、平均范围长度)
返回组\u range.map(组=>{
if(!group)return//如果没有组,则提前返回
设总数=0
让计数=0
for(设i=0;i
请注意,此算法仅适用于列。这使得代码更简单,这是您的用例(我认为是最常见的)

要使用它,请在“平均收益率”标题中添加以下内容:

={"Average Yield"; AVERAGEGROUPS('Strain Yields'!A2:A, A2:A, 'Strain Yields'!B2:B)}
算法故障 函数要做的第一件事是从2D值数组(行数组)中提取值。它是通过获取行的第一个元素来实现的,因此它在数组中只有一列值

range.map(row=>row[0])//返回第一列中的值
现在是平均值的时候了<代码>元素
只是我们必须检查的元素的长度。它被计算为防止代码超出范围的最小长度。然后我们使用
map
()在每组和平均值之间进行1:1的映射。里面是实际的平均计算

这是退出