2015-06-24 2 views
2

вот мой код, оператор if никогда не будет правдой, но я не знаю, что с ним не так. Я также попытался заменить «(„A“+ currentRow)» с «(„A: A“)», добавляя количество подходящих объектов

function addAllValues() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(), 
     sheet = ss.getSheetByName("Form Responses 1"), 
     type = sheet.getRange("B2:B").getValues(), 
     length = sheet.getRange("C2:C").getValues(), 
     model = sheet.getRange("D2:D").getValues(), 
     make = sheet.getRange("E2:E").getValues(), 
     specs = sheet.getRange("F2:F").getValues(), 
     add = sheet.getRange("G2:G").getValues(), 
     quantity = sheet.getRange("H2:H").getValues(), 
     currentRow = SpreadsheetApp.getActiveSheet().getActiveSelection().getRowIndex(), 
     i=0, 
     value=0; 

    do{ 
     if(type == ("A" + currentRow) && length == ("B" + currentRow) && model == ("C" + currentRow) && make == ("D" + currentRow) && specs == ("E" + currentRow)) 
     { 
     if(add == "add"){ value = value + quantity}else{ value = value - quantity} 
     } 
     i++; 
    }while(type[i] != "") 
    return value; 

} 

Целью этой функции является смотреть через один лист и сложить все совпадающие элементы для обновления количества другого листа. Любая помощь будет оценена по достоинству. Спасибо

ответ

1

Давайте посмотрим только на одну часть сравнения ...

if(type == ("A" + currentRow) ... 

Вот как type объявлен:

type = sheet.getRange("B2:B").getValues() 

Это означает, что type является двумерный массив значений , или массив строк, где каждая строка является массивом ячеек ... только в одной ячейке в этом случае. Это может быть что-то вроде этого:

[ [4], 
    [34], 
    [23] ] 

Значение мы сравниваем type на это ("A" + currentRow). Переменная там объявляется следующим образом:

currentRow = SpreadsheetApp.getActiveSheet().getActiveSelection().getRowIndex() 

... который будет номером. Выражение "A" + currentRow будет принуждать это число к строке, давая что-то вроде A5 (предполагая, что курсор в данный момент находится в строке 5).

Сравнение проверяет, равен ли этот 2-мерный массив простой строке ... и он никогда не был.

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

+0

большое спасибо это было очень полезно, я имею еще одну проблему, хотя это: значение = значение + количество [I] выходит, как добавить строку, например 01114, когда оно должно быть 0 + 1 + 1 + 14 = 16 –

+0

Это еще один пример такого поведения «принуждения» в JavaScript. Если ваш первый операнд, 'значение', содержал строку (даже если эта строка представляла число), и вы добавляете к ней номер, второй операнд будет принудительно использоваться как строка, а затем строки будут объединены. Вы можете принудить первый операнд быть числом, добавив его к (нулевому) нулевому значению: «value = + value + quantity [i]' – Mogsdad

+0

, который не исправил проблему, есть другой способ заставить ее быть integer –

0

благодаря Могсдаду я смог заставить его работать. Вот это рабочий сценарий

`function addAllValues() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(), 
     sheet = ss.getSheetByName("Form Responses 1"), 
     type = sheet.getRange("B2:B").getValues(), 
     length = sheet.getRange("C2:C").getValues(), 
     model = sheet.getRange("D2:D").getValues(), 
     make = sheet.getRange("E2:E").getValues(), 
     specs = sheet.getRange("F2:F").getValues(), 
     add = sheet.getRange("G2:G").getValues(), 
     quantity = sheet.getRange("H2:H").getValues(), 
     currentRow = SpreadsheetApp.getActiveSheet().getActiveSelection().getRowIndex(), 
     i=0, 
     value=0; 
//var hi = ss.getRange("A" + currentRow).getValue() 
    do{ 
     if(type[i] == ss.getRange("A" + currentRow).getValue() && length[i] == ss.getRange("B" + currentRow).getValue() && model[i] == ss.getRange("C" + currentRow).getValue() && make[i] == ss.getRange("D" + currentRow).getValue() && specs[i] == ss.getRange("E" + currentRow).getValue()) 
     { 

     if(add[i] == "add"){value = parseInt(value,10) + parseInt(quantity[i],10)}else{ value = parseInt(value,10) - parseInt(quantity[i], 10)} 
     } 
     i++; 
    }while(type[i] != "") 
    return value; 

}` 
Смежные вопросы