首页 文章

如何在Google工作表API中写入特定范围的工作表

提问于
浏览
2

这是我第一次使用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?

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

2 回答

  • 3

    你得到错误的唯一原因

    无法调用方法getRange为null

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

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

    Standalone scripts
    SpreadsheetApp#getActiveSpreadsheet

  • 0

    第一个问题

    这个修改怎么样?

    修改点:

    • teamNumbers 被声明为数组 . 但它被用作字符串 .

    • 为了使用Sheets API将值导入电子表格,必须将 teamNumbers 用作二维数组 .

    • 如果要在一个单元格中导入字符串值,

    • 如果使用Sheets API,请使用 teamNumbers = [[value]] .

    • 如果使用 SpreadsheetAppsetValue(teamNumbers) ,请使用 teamNumbers = value .

    • 如果要使用 SpreadsheetApp.getActiveSpreadsheet().getRange(pasteRange).setValues(teamNumbers) ,则需要 pasteRangeteamNumbers 的行和列大小匹配 .

    • 如果要使用 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处看到示例 .

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

相关问题