node.js - 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解决了这个问题,但这意味着我需要编写一个单元格,读取该单元格的值,删除该单元格,然后读取我真正想要的行,其中的值单元格,然后用更新的数据覆盖该行。
目前有没有更简单的方法来做到这一点?
解决方案
我目前有这个解决方案。
如果有人知道更短或更好的方法,请也在这里发布答案。
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);
}
});
}
});
}