#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
ею, чтобы получить более полное представление о проблеме.