无法将功能扩展到列

时间:2017-01-22 11:21:56

标签: google-apps-script google-sheets

我有一张电子表格,其中有3张不同的纸张,每张纸张都标有A列“价格(买入价)”和B栏“价格(卖出)”。

我想用函数计算“Price(sell)”列,但我找不到将其扩展到新行的方法。

我已尝试使用ArrayFormula但无法让它向函数发送新行,并且每次只返回相同的结果。下面是我尝试过的ArrayFormula之一。

=ArrayFormula(iferror(if(A:A="";;if(row(B:B)=1;"Price (sell)";if(isblank(A:A)=False;sell_price($A2))))))

但是,无论A列的价格如何,每行只返回20个。

有关如何运作的示例:

  1. 换个新行。
  2. 在“价格(买入)”单元格中输入价格,假设为10。
  3. 该功能(如下)将自动处理,答案将放在同一行的“价格(卖出)”栏中。
  4. “价格(卖出)”应显示20。
  5. 该功能会有所不同,所以这仅仅是为了举例。

    function sell_price(price) {
    return price + 10;
    }
    

    有没有办法让这个工作在所有3张不同的纸张上并自动扩展到3张纸张中添加的新行?如果有任何不同,这些信息将通过API来自脚本。

1 个答案:

答案 0 :(得分:2)

似乎你的公式中有一个小小的错误,而不是引用整个列,你只引用单元格$A2。 如果您将$A2更改为A:A,则应该有效。 :)

修改 为了补充这一点,似乎您的sell_price()函数目前无法处理多个单元格。你可以做的是为它编写一个包装函数,它循环你输入的范围内的每个单元格,并为它们进行计算。以下示例。

function wrapper(values) {

  // creates an empty array
  var returnValue = []; 

  // loops over every value in values in order
  for (var index = 0; index < values.length; index = index + 1) {

    // applies the formula
    returnValue[index] = sell_price(values[index][0]);
  }

  // outputs the scores of all the cells
  return returnValue;
}

function sell_price(value) {
  return value + 10;
}

然后你可以简单地在电子表格中调用包装函数而不是sell_price(),它应该可以正常工作,即wrapper(A:A)