根据偏移更新表格单元格

时间:2017-01-13 12:39:14

标签: javascript google-sheets google-docs-api google-sheets-api

我正在尝试使用javascript调用来更新一个单元格中的值,这是基于我发现包含特定值的单元格的偏移量。

例如,我想遍历列A,直到找到“bar”,然后将该行中B列的值设置为1

Sample spreadsheet

我知道如何首先阅读这些值:

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 ] ]
});

但是如何从上面代码中找到的范围中获取地址偏移?

1 个答案:

答案 0 :(得分:0)

有一种简单但看似相当愚蠢的方法可以做到这一点,更新整个范围,而不仅仅是已更改的子集。

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);
    });

但这对我来说似乎有点弱。如果范围很大,你只想更新改变的内容怎么办?也许有人可以改善这一点。