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

Google Spreadsheet文档只讨论.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是我为身份验证创建的功能。反正我来的问题是


  错误:接收到无效的JSON有效负载。未知名称“ requests”:找不到字段。


我不太确定自己在做什么错-我直接从Google API文档中进行跟踪。

最佳答案

根据Sheets API参考,要插入行,您需要发送带有有效InsertDimensionRequest属性的DimensionRange

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

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


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

从错误信息


  错误:接收到无效的JSON有效负载。未知名称“ requests”:找不到字段。


我们可以确定您的特定batchUpdate请求有误。句法。请注意,Sheets API中有多个实现batchUpdate方法的类:spreadsheets.batchUpdatespreadsheets.values.batchUpdate。仅对于batchUpdate资源的spreadsheets方法而言,输入数组Requests是有效参数-values资源的批量更新需要一个data参数(即,将值写入目标对象细胞)。

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

function newRow(sheets, config, options) {
  var newRowRequest = {
    insertDimension: {
      range: {
        sheetId: options.sheetId,
        dimension: 'row',
        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
}



Node.js API reference for Sheets REST API


spreadsheets.batchUpdate
spreadsheets.values.batchUpdate

09-16 08:30