Функция Google sheets сравнение двух значений не работает

#google-sheets

Вопрос:

Я создал функцию для Google таблиц. У меня есть два вопроса:

  • Функция работает, но медленно, может ли кто-нибудь настроить эту функцию?
  • Есть ошибка, из-за которой, если я сравниваю два значения, и одно значение, например, 8, а другое 11, это не работает. Похоже, что если значения имеют разные числа, например, 8 = 1 число, 88 = 2 числа, 888 = 3 числа, сравнение не работает. Если два значения имеют одинаковые числа, это работает правильно, например, 88 и 44. Если я сравниваю с функцией в самом листе, она работает. У кого-нибудь есть идеи, как это исправить?

Функция: Ей необходимо сравнить значение в столбце x (cmcprice) со значением в другом столбце (вход, выход1, выход2, выход3, выход4 и остановка). Сравнение находится в той же строке. Если значение в cmcprice выше, чем entry, exit1 — 4 или ниже, чем stop, функции необходимо записать дату в другую ячейку (другой столбец, та же строка). Если в ячейке уже есть дата, ее нужно пропустить. Поскольку cmc-цена меняется каждый раз x, я каждый раз проверяю, больше или меньше значение.

Спасибо, Питер

 function CompareRow() {

  var s1=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Trades %");
  var lr=s1.getLastRow()
  // 1. Retrieve values from the sheet
  var cmcprice = s1.getRange(2,21,lr-1,1).getValues();
  var entry  = s1.getRange(2,3,lr-1,1).getValues();
  var exit1  = s1.getRange(2,6,lr-1,1).getValues();
  var exit2  = s1.getRange(2,9,lr-1,1).getValues();
  var exit3  = s1.getRange(2,12,lr-1,1).getValues();
  var exit4  = s1.getRange(2,15,lr-1,1).getValues();
  var stop  = s1.getRange(2,18,lr-1,1).getValues();
  var nu = new Date();

  for (var i = 0; i < lr; i  ) {
    if(cmcprice[i]>entry[i]){
        if(s1.getRange([i 2],5).getValue()==""){
        s1.getRange([i 2],5).setValue(nu);
        }
    }
    if(cmcprice[i]>exit1[i]){
        if(s1.getRange([i 2],8).getValue()==""){
        s1.getRange([i 2],8).setValue(nu);
        }
    }
    if(cmcprice[i]>exit2[i]){
        if((s1.getRange([i 2],11).getValue()=="") amp;amp; (exit2[i]!="")){
        s1.getRange([i 2],11).setValue(nu);
        }
    }
    if(cmcprice[i]>exit3[i]){
        if((s1.getRange([i 2],14).getValue()=="") amp;amp; (exit3[i]!="")){
        s1.getRange([i 2],14).setValue(nu);
        }
    }
    if(cmcprice[i]>exit4[i]){
        if((s1.getRange([i 2],17).getValue()=="")  amp;amp; (exit4[i]!="")){
        s1.getRange([i 2],17).setValue(nu);
        }
    }
    if(cmcprice[i]<stop[i]){
        if(s1.getRange([i 2],20).getValue()==""){
        s1.getRange([i 2],20).setValue(nu);
        }
    }

  }
}
 

Комментарии:

1. Всем привет. Вы могли бы повысить производительность функции, если бы не использовали так много вызовов приложения SpreadsheetApp внутри цикла for. Вы можете получить полные массивы с getValues , изменить их и, как только у вас появятся нужные значения , записать их в sheet с setValues , применив то же range самое . С другой стороны, ошибка при сравнении чисел с разными цифрами странная. Вы можете попробовать отладить и присвоить значения переменной перед сравнением, чтобы увидеть ее значение и убедиться, что ничего из ожидаемого не происходит.

2. Чтобы предоставить вам более подробную помощь, было бы полезно, если бы вы могли поделиться sheet ею, чтобы получить более полное представление о проблеме.