首页 > 解决方案 > google sheet api v4更新id等于值的行

问题描述

我在每行的A列(ID)中有一个 ID。现在我想更新一行,其中 A 列的 ID 等于我的代码中的 ID。
在旧的 v3 版本(+ 包装器)中,我可以使用此代码轻松搜索行并 row.save() 它:

var row = await promisify(sheet.getRows)({
    offset: 1,
    query: 'id = ' + user.id
});

但我找不到类似 v4 的东西。我发现的唯一问题是2017 年的这个 Answere解决了这个问题,但这意味着我需要编写一个单元格,读取该单元格的值,删除该单元格,然后读取我真正想要的行,其中的值单元格,然后用更新的数据覆盖该行。

目前有没有更简单的方法来做到这一点?

标签: node.jsgoogle-sheetsgoogle-sheets-api

解决方案


我目前有这个解决方案。

如果有人知道更短或更好的方法,请也在这里发布答案。

function UpdateRow() {
//Get all Rows
Sheets.spreadsheets.values.get({
    spreadsheetId: "XXXXXXXXXXXXXXXXXXX",
    range: "Tabellenblatt1!A:J"
}, (err, result) => {
    if (err) {
        console.log(err);
    } else {
        const numRows = result.data.values ? result.data.values.length : 0;
        console.log(`${numRows} rows retrieved.`);
        source = result.data.values;
        //Filter all rows except the one where the first column (A) equals my id + creates a new entry with the old index at [0]
        const input = source.map(function (row, index) {
            row.unshift(index);
            return row;
        }).filter(function (iRow) {
                return iRow[1] === "438065329533353986";
            });
        var index = parseInt(input[0]) + 1; //Saves the old index
        input[0].shift(); //Removes the old index from the array

        input[0][2] = "TEST"; //Update the row with stuff

        let values = [
            input[0]
        ];
        const resource = {
            values
        };
        Sheets.spreadsheets.values.update({
            spreadsheetId: "XXXXXXXXXXXXXXXXXXX",
            range: "Tabellenblatt1!A" + index + ":J" + index, //Saves the row at the old index from before
            valueInputOption: "RAW",
            resource : resource
        }, (err, result) => {
            if (err) {
                console.log(err);
            } else {
                console.log('%d cells updated.', result.data.updatedRows);
            }
        });
    }
});
}

推荐阅读