Можно ли сделать вложенные, если функция в сценарии на GoogleGeols? - PullRequest
0 голосов
/ 11 июня 2019

Я очень новичок в листах Google, и у меня все отлично, у меня есть лист 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 в другой ячейке, но происходит то, что он дает мне вывод моей первой функции if для всех строк, даже если она не соответствует "gpd"

Ответы [ 3 ]

1 голос
/ 11 июня 2019

D15:

=ARRAYFORMULA(H15:INDEX(H15:H,COUNTA(H15:H))*SWITCH(G15:INDEX(G15:G,COUNTA(H15:H)),"kwd",$I$7,"usd",$I$8))
  • SWITCH для переключения значения в столбце G в соответствии с валютой.
  • INDEX/COUNTA для getLastRow на листе.
  • ARRAYFORMULA, чтобы заполнить весь лист до последней строки, используя массивы вместо старого метода заливки с перетаскиванием в Excel.
1 голос
/ 11 июня 2019

Вы совершили простую ошибку. В javascript одиночный знак равенства '=' означает присваивание, и ответ на оператор if всегда будет верным. Вместо этого вам нужно использовать '==='.

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);
0 голосов
/ 11 июня 2019

Требования:

Скопируйте формулу в столбец в зависимости от значения в другой ячейке.


Решение:

Вместо использования 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, который вы уже определили в своей функции. i начинается с 0 и увеличивается на 1 при каждом запуске цикла for, поэтому я использую его в setFormula() для каждой строки. Я включил ваш lastRow - 4 в цикл for, чтобы он работал только для параметров, которые вы уже передали ему.

Примечание: Как уже упоминалось @CampaignCloner, = используется для присваивания, вы должны использовать === для ваших if операторов для сравнения значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...