我正在研究 NodeJS、Google Sheets API 我尝试将一些日志添加到工作表上的单元格中,每次我的代码执行函数(创建日志)时都会创建日志。每次代码更新单元格时,我以前的日志都会被删除。如何摆脱单元格中的覆盖?我希望我的新日志与旧日志一起保留
我尝试将 sheets.spreadsheets.values.batchUpdate({})
更改为
sheets.spreadsheets.batchUpdate({})
,但找不到相关参数
async regressionMapBatchUpdateSheet(auth, cellsRange = "", ...restValues) {
return new Promise((resolve, reject) => {
const sheets = google.sheets({ version: 'v4', auth });
sheets.spreadsheets.values.batchUpdate({
spreadsheetId: 'spreadsheetId',
requestBody: {
data: [
{
range: cellsRange,
values: [
restValues
]
}
],
valueInputOption: "USER_ENTERED",
includeValuesInResponse: true
}
}, (err, response) => {
if (err) {
console.log(err);
return reject(err);
} else {
console.log(`The sheet were updated, cells were updated: "${response.data.responses.map(res => res.updatedData.values)}"`);
resolve(response);
}
})
});
值:[restValues] = 我输入的日志
我想将我的日志保存在一个单元格中。如果日志每次都从新行开始,那就太好了。
最佳答案
- 您想要使用 Sheets API 和 Node.js 将值附加到新行。
如果我的理解是正确的,那么修改一下怎么样?
修改点:
- 我认为使用values.append的方法比较适合你的情况。
修改后的脚本:
请修改如下。
来自:
sheets.spreadsheets.values.batchUpdate({
spreadsheetId: 'spreadsheetid',
requestBody: {
data: [
{
range: dateCell,
values: [
[date]
]
},
{
range: resultCell,
values: [
[result]
]
},
{
range: commentCell,
values: [
[comment]
]
}
],
valueInputOption: "RAW",
includeValuesInResponse: true
}
}, (err, response) => {
致:
使用时,请设置范围和值。通过此脚本,这些值将附加到新行。
sheets.spreadsheets.values.append(
{
spreadsheetId: 'spreadsheetid',
range: "Sheet1!A:A", // This is a sample range.
valueInputOption: "RAW",
resource: { values: [["date", "result", "comment"]] } // This is a sample value.
}, (err, response) => {
注意:
- 根据您的问题,我可以确认您已经能够使用 Sheets API。
- 在这种情况下,可以将值设置为
{values: [["date", "result", "comment"]] }
。
引用文献:
如果我误解了您的问题并且这不是您想要的结果,我深表歉意。
编辑:
- 您想要将值添加到相同的单元格而不覆盖。例如,单元格
A1:B1
具有sample1
和sample2
。将sample3
和sample4
的值分别添加到A1
和B1
时,单元格将变为sample1sample3
和sample2sample4
。
从你的回复评论中,我可以这样理解。对于这种情况,遗憾的是,在现阶段,这还不能通过一次API调用直接实现。所以需要进行如下流程。
- 从
A1:B1
获取值。 - 通过更新值将值放入
A1:B1
。
为了做到这一点,例如,使用spreadsheets.values.get
和spreadsheets.values.update
方法怎么样?
修改后的脚本:
来自:
sheets.spreadsheets.values.batchUpdate({
spreadsheetId: 'spreadsheetid',
requestBody: {
data: [
{
range: dateCell,
values: [
[date]
]
},
{
range: resultCell,
values: [
[result]
]
},
{
range: commentCell,
values: [
[comment]
]
}
],
valueInputOption: "RAW",
includeValuesInResponse: true
}
}, (err, response) => {
致:
在本例中,通过将附加值添加到现有值来更新 Sheet1!A1:B1
的单元格。例如,当单元格 Sheet1!A1:B1
具有 sample1
和 sample2
时,通过运行此脚本,单元格将更新为 sample1sample3
和 sample2sample4
。
const spreadsheetId = "###";
const range = "Sheet1!A1:B1";
const additionalValue = [["sample3", "sample4"]];
sheets.spreadsheets.values.get(
{
spreadsheetId: spreadsheetId,
range: range
},
(err1, result1) => {
if (err1) {
console.log(err1.errors);
return;
}
const newValue = result1.data.values.map((row, i) =>
row.map((col, j) => col + additionalValue[i][j])
);
sheets.spreadsheets.values.update(
{
spreadsheetId: spreadsheetId,
range: range,
valueInputOption: "USER_ENTERED",
resource: { values: newValue }
},
(err2, result2) => {
if (err2) {
console.log(err2.errors);
return;
}
console.log(result2.data);
}
);
}
);
引用文献:
关于node.js - 如何在 NodeJS 中更新单元格数据而不清除先前的值(google-sheets-api),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56383096/