首页 > 解决方案 > 在 Node.JS 中,我将如何使用 Google Sheets API 向上“移动”整个值范围?

问题描述

我有一个由 Node.JS 应用程序读取和写入的 Google 电子表格。

在一种情况下,我需要将整个范围向上移动(向上移动A3:D一个),但由于我对 Google Sheets API 非常陌生,所以我没有这样做。我考虑过使用这些方法:

a)复制范围内的所有值并将其粘贴一个

使用sheets.spreadsheet.values.get,我将获取所有值,A3:D然后使用 将其保存为数组toLocaleString()。然后,我会清除该范围内的所有值。最后,我将把这些数据放在一个范围内A2:D

问题:设置数据时,我会使用数组还是简单地使用response.value.data甚至简单地使用response.value?我如何将我的数组sheets.spreadsheet.values.set作为参数传递?

b) 在所有值下方插入一行

我会使用这篇文章中找到的方法:Shift Cell Range in Google Sheets

问题:这似乎是一个好方法,但我感觉它会导致奇怪的行为。我的电子表格中有一个“标题”行(没有实际数据),我担心这样做会覆盖它。此外,获取实际插入新行的行号的最佳方法是什么?


我将不胜感激有关如何解决此问题的一些指导。谢谢!

编辑 1

我设法拼凑了这段代码。我正在尝试制作CutPasteRequst,但我无法弄清楚语法以及如何使其工作。

var spreadsheetId = 'My sheet ID';

sheets.spreadsheets.values.batchUpdate({
    auth: client, // 'client' is already authorised
    spreadsheetId: spreadsheetId,

    requestBody: {
        source: 'Words to display!A3:D',
        destination: 'Words to display!A2',
        pasteType: 'pasteValues.PASTE_VALUES'
    }
},
function(err, response) {
    if (err) {
        console.log('API error: ' + err);
    }
});

API 错误:

2019-09-18T05:33:03.209240+00:00 app[web.1]:API 返回错误:错误:

Invalid JSON payload received. Unknown name "source": Cannot find field.
Invalid JSON payload received. Unknown name "destination": Cannot find field.
Invalid JSON payload received. Unknown name "paste_type": Cannot find field.

标签: javascriptnode.jsgoogle-apigoogle-sheets-api

解决方案


  • 您想使用带有 Node.js 的 googleapis 来实现以下情况。

    • 1   Alpha   Beta    Gamma   Delta
      2   a1      b1      c1      d1
      3   a2      b2      c2      d2
      4   a3      b3      c3      d3
      5   a4      b4      c4      d4
      6   a5      b5      c5      d5
      
    • 1   Alpha   Beta    Gamma   Delta
      2   a2      b2      c2      d2
      3   a3      b3      c3      d3
      4   a4      b4      c4      d4
      5   a5      b5      c5      d5
      
  • 您已经能够使用 Sheets API 为电子表格放置和获取值。

如果我的理解是正确的,那么这个示例脚本怎么样。

模式1:

在此模式中,使用了带有电子表格.batchUpdate 方法的 cutPaste 请求。“A3:D”的值被复制到“A2:D”。

示例脚本:

const spreadsheetId = "###";  // Please set Spreadsheet ID.
const sheetId = ###;  // Please set sheet ID.

sheets.spreadsheets.batchUpdate(
  {
    auth: client,
    spreadsheetId: spreadsheetId,
    requestBody: {
      requests: [
        {
          cutPaste: {
            source: {
              sheetId: sheetId,
              startRowIndex: 2,
              startColumnIndex: 0,
              endColumnIndex: 4
            },
            destination: { sheetId: sheetId, rowIndex: 1 },
            pasteType: "PASTE_NORMAL"
          }
        }
      ]
    }
  },
  function(err, response) {
    if (err) {
        console.log('API error: ' + err);
    }
});

模式 2:

在此模式中,使用了带有电子表格.batchUpdate 方法的 deleteDimension 请求。第 2 行被删除。

示例脚本:

const spreadsheetId = "###";  // Please set Spreadsheet ID.
const sheetId = ###;  // Please set sheet ID.

sheets.spreadsheets.batchUpdate(
  {
    auth: client,
    spreadsheetId: spreadsheetId,
    requestBody: {
      requests: [
        {
          deleteDimension: {
            range: {
              sheetId: sheetId,
              startIndex: 1,
              endIndex: 2,
              dimension: "ROWS"
            }
          }
        },
        {
          appendDimension: {
            sheetId: sheetId,
            dimension: "ROWS",
            length: 1
          }
        }
      ]
    }
  },
  function(err, response) {
    if (err) {
        console.log('API error: ' + err);
    }
});
  • 在此示例脚本中,删除一行后,使用 appendDimension 请求添加新行。

笔记:

  • 在电子表格.batchUpdate的方法中,请使用不是a1Notation 的GridRange。
  • 使用此脚本时,如果出现错误,请使用最新版本的googleapis。现在最新版本是 43.0.0。

参考:


推荐阅读