Функция в Google Scripts добавляет ценность каждую минуту и ​​активно отображает - PullRequest
0 голосов
/ 06 ноября 2018

Во-первых, я не программист, но у меня есть небольшой опыт работы с Python. Я учитель математики в программе «Наука, математика и технология», и мне нужна помощь в разработке кода, чтобы сделать что-то для школы. Позвольте мне объяснить, что я пытаюсь сделать, и тогда я покажу вам, что у меня есть.

Мы проводим программу / соревнование для 35 команд, где они получают увеличение численности населения на 1000 человек каждую минуту. Я хочу сгенерировать сценарий, который добавляет 1000 к общей численности населения каждую минуту и ​​отобразить его на графике. Некоторые вещи, которые следует учитывать, это то, что эти группы населения будут поражены смертельной болезнью один раз в час или около того. Это означает, что 1000, добавляемое каждую минуту, должно быть легко и быстро заменено на что-то вроде 875, 500 или -200 и т. Д.

Что у меня есть:

function increment() {
var s = SpreadsheetApp.getActive().getSheetByName('Austin Test').getRange('G4');
var t = SpreadsheetApp.getActive().getSheetByName('Austin Test').getRange('G3');
var tur = parseInt(t.getValue());
var sur = parseInt(s.getValue());
s.setValue(sur + tur);
}

Где в ячейке G3 у меня есть добавляемое значение - 1000 - а в G4 - общая численность населения. Я также установил управляемый временем триггер для каждой минуты.

Я столкнулся с проблемой - мне нужно, чтобы эта функция работала для 35 различных команд. В коде, который я написал, он работает только в ячейке G4. Один из вариантов - скопировать / вставить / отредактировать 35 раз, назвав их «incrementG», «incrementH», «incrementI» и т. Д. Есть ли способ изменить это так, чтобы я мог вызывать его в любой ячейке без необходимости делать это? Кроме того, у меня закончатся триггеры в день?

У меня есть дополнительные вопросы, но подумайте, я должен начать здесь.

1 Ответ

0 голосов
/ 07 ноября 2018

Если вы хотите вручную управлять этой функцией для других ячеек, один простой способ - сказать функции прочитать имя ячейки, которое вы где-то ввели, скажем, как Z1. Затем вызовите свою функцию с тем именем, которое вы прочитали ранее. Пожалуйста, обратитесь к коду ниже.

function increment() {
var sheetAustin = SpreadsheetApp.getActive().getSheetByName('Austin Test')
var cellname1 = sheetAustin.getRange('Z1').getValue() // Get cell name 1
var cellname2 = sheetAustin.getRange('Z2').getValue() // Get cell name 2

var s = SpreadsheetApp.getActive().getSheetByName('Austin Test').getRange(cellname1)
var t = SpreadsheetApp.getActive().getSheetByName('Austin Test').getRange(cellname1)
var tur = parseInt(t.getValue())
var sur = parseInt(s.getValue())
s.setValue(sur + tur)
}

Этот модифицированный код будет читать любое имя ячейки, которое вы ввели в Z1 и Z2 соответственно, а затем выполнять свою работу как обычно. Имейте в виду, что здесь нет проверки на сбой, поэтому существует вероятность ошибки, например, при вводе неверного имени ячейки. Введите G4 в Z1 и G3 в Z2, затем запустите сценарий, и вы получите точный результат в виде кода, который вы нам показали.

Изменяя способ, которым вы используете getRange () в цикле, вы можете даже позволить скрипту рассчитать результаты всех ваших команд за раз ... при условии, что все столбцы, которые вам нужно вычислить, находятся рядом друг с другом. .

Вот ваш код с циклом для всей команды:

function increment() {
    var col = 7 // Column G is no.7
    for(i = col, i < col + 35, i ++)      
        var s = SpreadsheetApp.getActive().getSheetByName('Austin Test').getRange(4, col) // Get row 4, column 7, which is G4
        var t = SpreadsheetApp.getActive().getSheetByName('Austin Test').getRange(3, col) // Get row 3, column 7, which is G3
        var tur = parseInt(t.getValue())
        var sur = parseInt(s.getValue())
        s.setValue(sur + tur)
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...