2015-10-10 4 views
-1

Я пытаюсь рандомизировать набор приращений по большому числу переменных.Увеличение +1 до диапазона

Так, например, у меня 5000 человек, каждый из этих людей имеет базовое значение 1, но добавление 1 имеет переменное влияние на каждого из этих людей. Пример добавления 1 к Person A означает, что базовый номер увеличивается на 1,1. Добавление 1 к человеку b увеличивает их базу на 1,4 и так далее.

Я выяснил, как выполнять разные значения, назначенные каждому действию +1 с помощью vlookups, но теперь мне нужно зацикливать приращения +1 по диапазону.

У меня есть базовые значения в столбце B: B, но не могу понять, как закодировать скрипт. Это то, что я до сих пор:

function increment(){ 

вар сс = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheets() [1];

var range = sheet.getRange ("b1"); var value = range.getValue();

для (var i = 1; i> = range; i ++);

range.setValue (значение + 1);

}

Но это только с шагом 1 до "b1". Как это сделать, чтобы он работал непрерывно, скажем, каждую секунду через b1, b2, b3, b4 и т. Д. Каждый раз добавляя +1?

ответ

0

Просто добавив имя диапазона, используя функцию «b» + i в функции getRange(), и переместите его в цикл цикла.
Или вы можете использовать функцию offset().

код

for (var i = 1; i >= range; i++); 
    range.setValue(value + 1); 

это цикл без запуска команды range.setValue (значение + 1); потому что первая строка заканчивалась точкой с запятой.

И, наконец, код должен быть следующим.

function increment() 
{ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheets()[1]; 
    //var range = sheet.getRange("b1"); 
    //var value = range.getValue(); 

    // change 5000 to amount of you need 
    for (var i = 1; i <= 5000; i++) 
    { 
     var range = sheet.getRange("b" + i); 
     var value = range.getValue(); 
     range.setValue(value + 1); 
    } 
} 

, если код функции смещения будет таким, как указано ниже.

function increment() 
{ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheets()[1]; 
    var range = sheet.getRange("b1"); 
    //var value = range.getValue(); 

    // change 5000 to amount of you need 
    for (var i = 1; i <= 5000; i++) 
    { 
     var value = range.offset(i, 0).getValue(); 
     range.offset(i, 0).setValue(value + 1); 
    } 
} 

Edit для улучшения выполнения времени

function increment() 
{ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheets()[1]; 

    // change 5000 to amount of you need 
    var formulas = new Array(5000); 

    for (var i = 0; i < 5000; i++) 
    { 
     formulas[i] = "=R[0]C[-1]+1"; 
    } 

    // Assume that column C is not used 
    var ranges = sheet.getRange("C1:C5000"); 
    ranges.setFormulasR1C1(formulas) 
    ranges.copyValuesToRange(sheet, 2, 2, 1, 5000); 
    ranges.clearContent(); 
} 
+0

Эй Adisak. Во-первых, огромное спасибо за вашу помощь в этом. Ваш скрипт выглядит великолепно и отлично работает по большей части. Однако есть пара проблем. 1, когда он достигает 4 401, скрипт Apps генерирует ошибку, говоря «достигнуто максимальное время выполнения». и останавливает скрипт. Не знаете, как обойти это? –

+0

Вторая часть, вероятно, связана с моей нехваткой знаний. Я попытался уменьшить число до 4000, чтобы по крайней мере получить хороший кусок. Но когда он достигает конца этого исполнения, он просто останавливается. Как мне заставить его начать все заново? В очередной раз благодарим за помощь. Ты звезда! –

+0

Хм. Думаю, я мог бы это решить. Можно запустить его до 4390. (Это занимает около 5 минут), а затем добавить триггер, установленный на 5 минут. :) Тестирование ... –

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