Обновить ячейку листов на основе смещения

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

Например, я хотел бы перебирать столбец A, пока не найду «полосу», а затем установить значение столбца B в этой строке равным 1:

Образец таблицы

Я знаю, как читать значения в первую очередь:

gapi.client.sheets.spreadsheets.values.get({
    spreadsheetId: SPREADSHEET_ID,
    range: 'Sheet1!A1:A3',
}).then(function(response) {
    var range = response.result;
    for (i = 0; i < range.values.length; i++) {
        if (range.values[i] == "bar") {
            // Update column B in this row to 1
        }

И я знаю, что мне нужен какой-то вызов spreadsheets.values.update:

gapi.client.sheets.spreadsheets.values.update({
    spreadsheetId: SPREADSHEET_ID,
    range: the range found above, offset by one column,
    valueInputOption: 'RAW',
    values: [ [ value ] ]
});

Но как я могу получить смещение адреса из диапазона, указанного в приведенном выше коде?


person LondonRob    schedule 13.01.2017    source источник
comment
этот ответ о преобразовании строки / столбца в справочный стиль A1 выглядит многообещающим началом.   -  person LondonRob    schedule 13.01.2017


Ответы (1)


Есть простой, но, казалось бы, довольно глупый способ сделать это - обновить весь диапазон, а не только подмножество, которое изменилось.

var address = 'Sheet1!A1:A3';
var range;

gapi.client.sheets.spreadsheets.values.get(
    {
        spreadsheetId: SPREADSHEET_ID,
        range: address,
    }
).then(function(response) {
    range = response.result; // available globally
    for (i = 0; i < range.values.length; i++) {
        if (range.values[i][0] == "bar") {
            range.values[i][1] = 1;
        }
    }
).then(function() {
    gapi.client.sheets.spreadsheets.values.update({
        // Update entire range back into spreadsheet.
        spreadsheetId: SPREADSHEET_ID,
        range: address,
        valueInputOption: 'RAW',
        values: range.values 
    }).then(function(response) {
        // Having a then clause seems to be necessary for the
        // update to happen. Not sure why.
        console.log(response);
    });

Но мне это кажется немного слабым. Что делать, если диапазон огромен, и вы хотите обновить только то, что изменилось? Может кто сможет это улучшить.

person LondonRob    schedule 13.01.2017