使用Sheets API v4仅在公式后附加新行

时间:2018-10-12 11:11:29

标签: javascript google-apps-script google-sheets-api

我对Sheets API还是很陌生,并且遇到了很多错误。

我想根据最后一行将新行追加到工作表。这将包括使用自动填充而不是值复制格式和粘贴公式。

这是我使用应用脚本编写的内容。 我确定我目前没有使用最好的方法,

  • 检索范围为SUCCESS的公式
  • 使用autoFillRequest尝试用10列填充下一行(尝试一下)。失败

我已在类似getFormulas的请求中添加了注释,并向您展示了autoFill请求当前所拥有的内容。

我收到以下错误:

  

接收到无效的JSON有效负载。 “ requests [0]”处的未知名称“ source_and_destination”:找不到字段。

function insertNewRow(){
  var ssId = "my_spreadsheet_id"
  /*var params = {
    ranges: ['Feuille1!21:21'],
    valueRenderOption: 'FORMULA'
  };
  var values = Sheets.Spreadsheets.Values.batchGet(ssId, params);
  var valueRange = Sheets.newValueRange();
  valueRange.majorDimension = "ROWS";
  valueRange.values = values.valueRanges[0].values;
  Logger.log(values.valueRanges[0].values[0].length);
  valueRange.range= 'Feuille1!22:22'
  //var req = Sheets.Spreadsheets.Values.update(valueRange , ssId, 'Feuille1!22:22', {
  //  valueInputOption: 'USER_ENTERED'
  //})*/
  var AFreq = Sheets.newAutoFillRequest();

  AFreq.range = Sheets.newGridRange();
  AFreq.range.startRowIndex = 1;
  AFreq.range.startColumnIndex = 0;
  AFreq.range.endRowIndex = 2;
  AFreq.range.endColumnIndex = 10;
  AFreq.range.sheetId = 0;

  AFreq.sourceAndDestination = Sheets.newSourceAndDestination();
  AFreq.sourceAndDestination.dimension = "ROWS";
  AFreq.sourceAndDestination.fillLength = 10;

  AFreq.sourceAndDestination.source = Sheets.newGridRange();
  AFreq.sourceAndDestination.source.startRowIndex = 0;
  AFreq.sourceAndDestination.source.startColumnIndex = 0;
  AFreq.sourceAndDestination.source.endColumnIndex = 10   
  AFreq.sourceAndDestination.source.endRowIndex = 1;
  AFreq.sourceAndDestination.source.sheetId = 0;

  var req = Sheets.newBatchUpdateSpreadsheetRequest();
  req.requests = [AFreq];
  Sheets.Spreadsheets.batchUpdate(req, ssId);
  }

如果我错了,请告诉我,但我将任务分为多个请求

  1. 抓取公式
  2. 插入新行
  3. 从原处复制/粘贴到新行
  4. 粘贴公式

我朝着正确的方向前进吗? 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

问题:

  • Request对象在请求正文中丢失。
  • AutoFillRequest有两个联合区域字段,而正好是一个。
  • 在GridRange中选择空范围。

解决方案:

  • 修复上述语法错误
  • 使用普通的JSON请求正文轻松识别此类错误

示例脚本:

function autoFill() {
  var ssId = 'my_spreadsheet_id';
  var req = {//request body    
    requests: [ //requests array    
      {//request Object
        autoFill: { //autoFill request
          //range OR sourceAndDestination;
          //equal to selecting Sheet1!A1:J10 and clicking autoFill from menu
          range: {//GridRange
            sheetId: 0,
            startRowIndex: 0,
            endRowIndex: 10, //end exclusive
            startColumnIndex: 0,
            endColumnIndex: 10,
          },
        },
      },
    ],
  };
  Sheets.Spreadsheets.batchUpdate(req, ssId);
}

参考文献: