在现有数据中间插入一行

时间:2018-07-09 15:48:52

标签: node.js google-sheets-api google-api-nodejs-client

我正在尝试使用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文档。

2 个答案:

答案 0 :(得分:0)

根据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
}

答案 1 :(得分:-2)

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);