在现有数据中间插入一行

Insert a row in the middle of existing data

我正在尝试使用 node.jsGoogle Sheets API v4 在电子表格中间插入一个空行。这几天我到处研究,但找不到任何关于它的文档。

Google 电子表格文档仅讨论 .append(),它在电子表格的末尾 附加了一行 。这不是我想要的哈哈

有没有办法在数据中间插入一个空行?


所以..这是我到目前为止编辑的内容。

function newRow() {
  return new Promise((resolve, reject) => {
    return getAuthorizedClient().then(client => {
      const sheets = google.sheets({
        version: 'v4',
        auth: client
      });
      var requests = [];

      requests.push({
        insertDimension: {
          range: {
            sheetId: MY_SHEET_ID,
            dimension: 'row',
            startIndex: 50,
            endIndex: 1
          },
          inheritFromBefore: false
        }
      });
      var batchUpdateRequest = { requests: requests };

      sheets.spreadsheets.values.batchUpdate({
        spreadsheetId: CONFIG_SHEET_ID,
        resource: batchUpdateRequest
      });
    });
  });
}

getAuthorizedClient是我为auth做的一个函数。不管怎样,我遇到的问题是

Error: Invalid JSON payload received. Unknown name "requests": Cannot find field.

我不太确定我做错了什么 - 我直接从 Google API 文档中获取信息。

Google Apps 脚本文档非常适合这类事情。

https://developers.google.com/apps-script/reference/spreadsheet/sheet

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];

// This inserts a row after the first row position.
sheet.insertRowAfter(1);

根据表格 API 参考,要插入行,您需要发送 InsertDimensionRequest with a valid DimensionRange 属性.

确实,您的这部分代码是正确的:

{
  insertDimension: {
    range: {
      sheetId: MY_SHEET_ID,
      dimension: 'ROWS',
      startIndex: 50,
      endIndex: 1
    },
    inheritFromBefore: false // Use start (true) or end (false) index to set defaults.
  }
}

(尽管我相信您希望结束索引为 51 而不是 1。然后会在第 50 个索引处插入一行,其中第 1 行是索引 0。)

来自错误信息

Error: Invalid JSON payload received. Unknown name "requests": Cannot find field.

我们可以确定您的特定 batchUpdate 请求不正确。句法。请注意,工作表 API 中有多个 class 实现了 batchUpdate 方法:spreadsheets.batchUpdate and spreadsheets.values.batchUpdate。只有 spreadsheets 资源的 batchUpdate 方法是一个输入数组 Requests 一个有效参数 - values 资源的批量更新需要一个 data 参数(即要写入目标单元格的值)。

因此,解决方法是更改​​用于构造 batchUpdate 请求的 class:

function newRow(sheets, config, options) {
  var newRowRequest = {
    insertDimension: {
      range: {
        sheetId: options.sheetId,
        dimension: 'ROWS',
        startIndex: options.start,
        endIndex: options.start + options.howMany
      },
      inheritFromBefore: options.inheritBefore
    }
  };

  var batchUpdateRequest = {
    requests: [newRowRequest]
    // includeSpreadsheetInResponse: ...,
    // responseRanges: [...],
    // responseIncludeGridData: ...
  };
  return sheets.spreadsheets.batchUpdate({
    spreadsheetId: config.spreadsheetId,
    resource: batchUpdateRequest
  }); // Returns AxiosPromise
}