2014-11-18 2 views
0

Мне нужна помощь в применении функции ко всему столбцу. Я знаю, что перетаскивание нижнего правого дескриптора скопирует его, пока я перетаскиваю/выделяю. Но я бы предпочел, чтобы это применимо ко всей колонке. Я также знаю о функции ARRAYFORMULA(). Но его можно использовать только для основных формул и функций (по крайней мере, насколько мне известно). Итак, есть ли какая-то функция (т. Е. APPLYALL (диапазон, функция)), которая позволит мне применить формулу по столбцу. Или это до меня сделать? Можно ли настроить функцию функции ARRAYFORMULA и заставить ее работать таким образом? Вся помощь приветствуется.Применение специальной функции для всей формулы (без arrayformula())

Вот фрагмент кода. Параметры представляют собой обе строки и вызывается ячейками в E2. Таким образом, для E2 он будет выглядеть как «toStart (C2, D2)», а для E3 он будет выглядеть как «toStart (C3, D3)» и т. Д. И т. Д.

function toStart(model,type) { 
    if (model == "E340") {return E340Price(type)}  //Calls same function add OR op 
    else if (model == "E342") {return E340Price(type)} //""       "" 
    else if (model == "E350") {return E350Price(type)} 
    else if (model == "T644") {return T644Price(type)} 
    else if (model == "C532") {return C532Price(type)} 
} 

function E340Price (type){ 
    if (type == "Toner") {return 89.00;} //Use global constants for prices? 
    else if (type == "Photoconductor") {return 65.00;} 
    else if (type == "Toner/Photoconductor") {return 144.00;} 
} 

ответ

2

Вы можете просто скопировать копию формулы, которая намного быстрее и эффективнее. для например:

var lastRow = ThisSheet.getLastRow(); 
ThisSheet.getRange("E2").setFormula("=toStart(C2,D2)"); 
ThisSheet.getRange("E2").copyTo(ThisSheet.getRange("E2:E"+lastRow)); 

Затем автоматически формулы масштабируется в соответствии с номерами строк. Я надеюсь, что ваша проблема будет решена.

EDIT: getLastrow должен быть getLastRow() и setFormula фактически setFormula(), а не setFormula =

0

Вы можете включить вашу функцию для диапазонов. Трюк состоит в том, чтобы проверить, является ли ваш аргумент массивом или нет, тогда вы просто перебираете все ячейки. Чтобы упростить, я использую функцию myFunctionCanRange (x) только с одним параметром. Функция, которая фактически вычисляет данные, - myFunction (x).

фрагментов кода:

function myFunctionCanRange(x) { 
    if (Array.isArray(x)) { 
    var result = []; 
    for(var i=0; i < x.length, i++) { 
     var temp = []; 
     for (var j=0; j < x[i].length, j++) { 
     temp.push(myFunction(x[i][j]); 
     } 
     result.push(temp) 
    } 
    return result; 
    } 
    else 
    return myFunction(x); 
} 

Теперь вы можете назвать это 2 способами:

= myFunctionCanRange (C3)

, но также:

= ARRAYFORMULA (myFunctionCanRange (С3 : C))

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