node.js - 如何在 NodeJS 中更新单元格数据而不清除先前的值(google-sheets-api)

标签 node.js google-sheets-api

我正在研究 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 具有 sample1sample2。将 sample3sample4 的值分别添加到 A1B1 时,单元格将变为 sample1sample3sample2sample4

从你的回复评论中,我可以这样理解。对于这种情况,遗憾的是,在现阶段,这还不能通过一次API调用直接实现。所以需要进行如下流程。

  1. A1:B1 获取值。
  2. 通过更新值将值放入 A1:B1

为了做到这一点,例如,使用spreadsheets.values.getspreadsheets.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 具有 sample1sample2 时,通过运行此脚本,单元格将更新为 sample1sample3sample2sample4

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/

相关文章:

php - 从 HTTP GET 接收数据并将其发送到网页

javascript - "Unknown name "": must be root element."错误与 Node.js 谷歌电子表格

python - 如何使用 Python 中的 API 重命名 Google Sheets 电子表格中的(工作)表?

java - 使用maven出现异常

javascript - 在 GoogleApp 电子表格中,如何使 onEdit 事件处理程序对拖动复制使用react?

node.js - 在node.js winston中添加行号配置进行日志记录时时间戳消失

node.js - 在 Express 上伪造 req.host 值

node.js - 来自客户端的 Angular 通用转发 IP,用于所有 SSR API 调用

javascript - 绑定(bind)函数的意外行为

google-apps-script - 使用链接到应用程序脚本的按钮对电子表格上的范围进行排序