Google apps script 如何在GoogleSheetsAPI中写入工作表的特定范围

Google apps script 如何在GoogleSheetsAPI中写入工作表的特定范围,google-apps-script,google-sheets-api,Google Apps Script,Google Sheets Api,这是我第一次使用GoogleSheetsAPI,我正在尝试编写一个脚本,接收一些数据并对其进行处理,这是可行的,然后我想将处理后的数据写入一个已经存在的工作表中的列,这正是我需要帮助的地方 是否有更好的方法将数组置于特定范围内 错误消息说无法获取null的范围,这是我目前为止的代码,不属于块的行是问题所在: function getList() { var spreadsheetId = '1BjnZ-SPBVcCdITxcvEX1nCPecvGdYSKQ0m_GiaKduZQ';

这是我第一次使用GoogleSheetsAPI,我正在尝试编写一个脚本,接收一些数据并对其进行处理,这是可行的,然后我想将处理后的数据写入一个已经存在的工作表中的列,这正是我需要帮助的地方

是否有更好的方法将数组置于特定范围内

错误消息说无法获取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);
   
    }
}
函数getList(){
var电子表格ID='1BjnZ-SPBVCCDITXVEX1NCPECVGDYSKQ0M_GiaKduZQ';
var rangeName='粘贴在这里!I1:GZ6';
var PasterRange='货物!B3:B1000';
var values=Sheets.Spreadsheets.values.get(spreadsheetId,rangeName).values;
变量宽度=值[0]。长度;
var teamNumbers=[];
如果(!值){
Logger.log('未找到数据');
}否则{
对于(变量列=1;列<宽度;列+=2){
对于(变量行=0;行
还有,第二个问题,如何将某个对象的范围设置为变量,以便从参数中获取I1:GZ6

非常感谢您的帮助,提前谢谢

关于你的第一个问题 这次修改怎么样

修改点:
  • teamNumbers
    被声明为数组。但它被用作字符串。
    • 为了使用Sheets API将值导入电子表格,
      TeamNumber
      必须用作二维数组
    • 如果要在一个单元格中导入字符串值,
      • 如果使用工作表API,请使用
        teamNumbers=[[value]]
      • 如果使用
        SpreadsheetApp
        setValue(teamNumbers)
        ,请使用
        teamNumbers=value
  • 如果要使用
    SpreadsheetApp.getActiveSpreadsheet().getRange(PasterRange).setValues(teamNumbers)
    PasterRange
    需要与
    teamNumbers
    的行和列的大小相匹配
  • 如果要使用
    var rangeName=”请粘贴在此处!I1:GZ6'
    ,您可以使用Sheets API的
    Sheets.Spreadsheets.Values.update()。
    
    • 在本次修改中,使用了这一点
修改脚本:
函数getList(){
var电子表格ID='1BjnZ-SPBVCCDITXVEX1NCPECVGDYSKQ0M_GiaKduZQ';
var rangeName='粘贴在这里!I1:GZ6';
var PasterRange='货物!B3:B1000';
var values=Sheets.Spreadsheets.values.get(spreadsheetId,rangeName).values;
变量宽度=值[0]。长度;
var teamNumbers=[];
如果(!值){
Logger.log('未找到数据');
}否则{
对于(变量列=1;列<宽度;列+=2){
对于(变量行=0;行
注:
  • 如果出现与API相关的错误,请再次确认是否在高级Google服务和API控制台启用了Sheets API
参考:
关于你的第二个问题 如果要将gridrange转换为a1表示法,可以在和处看到示例


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

你会出错的唯一原因

无法调用
null的
getRange
方法

如果您使用的是独立脚本而不是绑定脚本,则从第
SpreadsheetApp.getActiveSpreadsheet()
行开始。独立脚本必须使用
SpreadsheetApp.openById(“某些id”)
才能访问电子表格

有关差异的更多信息,请参阅应用程序脚本文档



将脚本的语言也添加为标记谢谢!对于第二个问题,我的意思是如何将变量传递到范围中,例如A1:I5'表!A1:I5'@NightOwl4321使用不同的
getRange
签名:如果变量
theRangeStringVariable
中已经有A1符号字符串,则调用
getRange(theRangeStringVariable)
将起作用。
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
  }
}