是否可以在Googlesheets脚本中执行if函数嵌套?

时间:2019-06-11 12:04:30

标签: google-apps-script google-sheets

我是google表格和excel的非常初级的初学者,并且拥有带有定价信息的google表格,并且需要从多种货币自动转换,因此我需要从第15行开始在整列中输入。

我一直在尝试在脚本中使用if函数,但似乎我正在为工作使用错误的函数,或者我的代码需要一些重大调整。


function KWDBuyingPrice() {

      var KWDBuyingTotal = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
      var WorkingCell = KWDBuyingTotal.getRange("G15").getValue();


      if(WorkingCell="kwd"){
        KWDBuyingTotal.getRange(15,4).setValue("=H15*$I$7");
      }
      if(WorkingCell="usd"){
        KWDBuyingTotal.getRange(15,4).setValue("=H15*$I$8");
      }
      if(WorkingCell="eur"){
        KWDBuyingTotal.getRange(15,4).setValue("=H15*$I$9");
      }
      if(WorkingCell="gpd"){
        KWDBuyingTotal.getRange(15,4).setValue("=H15*$I$10");
      }

      var LastRow = KWDBuyingTotal.getLastRow();
      var FillDownRange = KWDBuyingTotal.getRange(15,4,LastRow-4);
      KWDBuyingTotal.getRange("D15").copyTo(FillDownRange);

}

基于我的代码,我希望它可以在另一个单元格中为我提供从货币到KWD的转换,但是发生的是,即使所有行不匹配“ gpd”,它也可以为我提供第一个if函数的输出

3 个答案:

答案 0 :(得分:1)

您犯了一个简单的错误。在javascript中,单个等号'='表示赋值,并且if语句的答案将始终为true。相反,您需要使用'==='。

var KWDBuyingTotal = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var WorkingCell = KWDBuyingTotal.getRange("G15").getValue();


if(WorkingCell === "kwd"){
    KWDBuyingTotal.getRange(15,4).setValue("=H15*$I$7");
} else if(WorkingCell === "usd"){
    KWDBuyingTotal.getRange(15,4).setValue("=H15*$I$8");
} else if(WorkingCell === "eur"){
    KWDBuyingTotal.getRange(15,4).setValue("=H15*$I$9");
} else if(WorkingCell === "gpd"){
    KWDBuyingTotal.getRange(15,4).setValue("=H15*$I$10");
}

var LastRow = KWDBuyingTotal.getLastRow();
var FillDownRange = KWDBuyingTotal.getRange(15,4,LastRow-4);
KWDBuyingTotal.getRange("D15").copyTo(FillDownRange);

答案 1 :(得分:1)

D15:

=ARRAYFORMULA(H15:INDEX(H15:H,COUNTA(H15:H))*SWITCH(G15:INDEX(G15:G,COUNTA(H15:H)),"kwd",$I$7,"usd",$I$8))
  • SWITCH来根据货币在Col G中切换值。
  • INDEX/COUNTA到工作表上的getLastRow。
  • ARRAYFORMULA可以使用数组而不是使用excel的旧的拖动填充方法将整个工作表填充到最后一行。

答案 2 :(得分:0)

要求:

根据另一个单元格中的值将公式向下复制到列中。


解决方案:

代替使用gremlin> g.V(1).project('name','age').by('name').by('age').select(values) ==>[marko,29] gremlin> g.V(1).project('age','name').by('age').by('name').select(values) ==>[29,marko] ,而是通过range.copyTo()循环运行此操作,并在我们浏览工作表时基于for更改单元格值。


示例:

i

说明:

此脚本根据您已经在函数中定义的function kwdBuyingPrice() { var sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var lastRow = sh.getLastRow(); var dataRange = sh.getDataRange(); var data = dataRange.getValues(); for (var i = 14; i < lastRow - 4; i++) { var currency = data[i][6]; var setRange = sh.getRange(i+1, 4); if(currency === 'kwd') { setRange.setFormula('=H'+(i)+'*$I$7'); } else if(currency === 'usd') { setRange.setFormula('=H'+(i)+'*$I$8'); } else if(currency === 'eur') { setRange.setFormula('=H'+(i)+'*$I$9'); } else if(currency === 'gpd') { setRange.setFormula('=H'+(i)+'*$I$10'); } } } 语句的结果,在工作表的每一行上使用for循环在D列中填充公式。 if从0开始,每次for循环运行时都递增1,这就是为什么我在i中为每一行使用它。我将您的setFormula()合并到了lastRow - 4循环中,以确保它仅针对您已经传递给它的参数运行。

注意:就像已经提到的@CampaignCloner一样,for用于分配,=语句应使用===来比较值。