【问题标题】:How to write to a specific range of a sheet in google sheets API如何在谷歌表格 API 中写入特定范围的表格
【发布时间】:2018-04-17 04:48:40
【问题描述】:

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

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

错误消息说无法获取 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?

非常感谢任何帮助,在此先感谢!

【问题讨论】:

  • 将脚本的语言也添加为标签

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


【解决方案1】:

关于你的第一个问题

这个修改怎么样?

修改点:

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

修改后的脚本:

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 相关错误,请再次确认是否在 Advanced Google Services 和 API 控制台中启用了 Sheets API。

参考:

关于你的第二个问题

如果您想将 gridrange 转换为 a1notation,您可以在 the documentthis gist 看到示例。

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

【讨论】:

  • 非常感谢!我对第二个问题的意思是如何将变量传递到范围中,例如 A1:I5 'sheet!A1:I5'
  • @NightOwl4321 使用不同的getRange 签名:developers.google.com/apps-script/reference/spreadsheet/… 如果您已经在变量theRangeStringVariable 中有A1Notation 字符串,那么调用getRange(theRangeStringVariable) 将起作用。
【解决方案2】:

你会得到错误的唯一原因

无法调用getRange的方法null

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

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

Standalone scripts
SpreadsheetApp#getActiveSpreadsheet

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2019-07-08
    • 1970-01-01
    • 2019-06-29
    • 2021-06-22
    • 1970-01-01
    • 2018-10-26
    相关资源
    最近更新 更多