如何在 google sheets API 中写入 sheet 的特定范围

How to write to a specific range of a sheet in google sheets API

这是我第一次使用 google sheets API,我正在尝试编写一个脚本来接收一些数据并对其进行处理,这很有效,然后我想将处理后的数据写入已存在的 sheet 中的列,这是我需要帮助的。

是否有更好的方法将数组放在特定范围内?

错误消息说无法获取 null 的范围,这是我目前的代码,不属于块的行是问题所在:

function getList() {
    var spreadsheetId = '1BjnZ-SPBVcCdITxcvEX1nCPecvGdYSKQ0m_GiaKduZQ';
    var rangeName = 'Paste Here!I1:GZ6';
    var pasteRange = 'The Goods!B3:B1000';
    var values = Sheets.Spreadsheets.Values.get(spreadsheetId, rangeName).values;
    var width = values[0].length;
    var teamNumbers = [];
    if (!values) {
      Logger.log('No data found.');
    } else {
      for(var col = 1; col < width; col+=2) {
        for(var row = 0; row < values.length; row++) {
          teamNumbers += values[row][col].toString();
          teamNumbers += '\n'
        }
      }
  
SpreadsheetApp.getActiveSpreadsheet().getRange(pasteRange).setValues(teamNumbers);
   
    }
}

此外,第二个问题,如何使某个变量的范围成为变量,以便从参数中获取 I1:GZ6?

非常感谢任何帮助,提前致谢!

第一个问题

这个修改怎么样?

修改点:

  • teamNumbers 声明为数组。但它被用作字符串。
    • 为了使用表格 API 将值导入电子表格,必须使用 teamNumbers 作为二维数组。
    • 如果要在一个单元格中导入字符串值,
      • 如果使用表格API,请使用teamNumbers = [[value]]
      • 在使用SpreadsheetAppsetValue(teamNumbers)的情况下,请使用teamNumbers = value
  • 如果要使用SpreadsheetApp.getActiveSpreadsheet().getRange(pasteRange).setValues(teamNumbers)pasteRange需要匹配teamNumbers的行数和列数。
  • 如果要使用 var rangeName = 'Paste Here!I1:GZ6',可以使用 Sheets.Spreadsheets.Values.update() 的工作表 API。
    • 在本次修改中,使用了这个。

修改后的脚本:

function getList() {
  var spreadsheetId = '1BjnZ-SPBVcCdITxcvEX1nCPecvGdYSKQ0m_GiaKduZQ';
  var rangeName = 'Paste Here!I1:GZ6';
  var pasteRange = 'The Goods!B3:B1000';
  var values = Sheets.Spreadsheets.Values.get(spreadsheetId, rangeName).values;
  var width = values[0].length;
  var teamNumbers = [];
  if (!values) {
    Logger.log('No data found.');
  } else {
    for(var col = 1; col < width; col+=2) {
      for(var row = 0; row < values.length; row++) {
        teamNumbers.push([values[row][col].toString()]); // Modified
      }
    }
    var spreadsheetId = SpreadsheetApp.getActiveSpreadsheet().getId(); // Modified
    Sheets.Spreadsheets.Values.update({values: teamNumbers}, spreadsheetId, pasteRange, {valueInputOption: "RAW"}); // Modified
  }
}

注:

  • 如果出现与API相关的错误,请再次确认是否在高级Google服务和API控制台中启用了表格API。

参考:

关于你的第二个问题

如果要将网格范围转换为 a1notation,可以在 the document and this gist 查看示例。

如果我误解了你的问题,我很抱歉。

出现错误的唯一原因

Cannot call method getRange of null

来自行 SpreadsheetApp.getActiveSpreadsheet() 的是如果您使用的是独立脚本而不是绑定脚本。独立脚本必须使用 SpreadsheetApp.openById("some id") 才能访问电子表格。

有关差异的详细信息,请参阅 Apps 脚本文档

Standalone scripts
SpreadsheetApp#getActiveSpreadsheet