0

我很难弄清楚这一点。我想从一个工作表中提取数据并将其复制到另一个 Google 工作表中。首先,当我尝试使用 getvalues 时出现错误,这在以前没有发生过。另外,当我尝试将 setValue 用于我的“类型”变量时,我遇到了错误。我正在尝试从“sourceCC”中获取数据并将其放入“destSS”中的各个单元格中。任何帮助将不胜感激。

function sendData() {

  var sourceSS = SpreadsheetApp.getActiveSpreadsheet();
  var dataSheet = sourceSS.getSheetByName("Data");
  var dataLastRow = dataSheet.getLastRow();
  var dataValues = dataLastRow.getRange("A"+(dataLastRow)+":G"+(dataLastRow)).getValues();

  var emailSheet = sourceSS.getSheetByName('Emails');
  var recipient = emailSheet.getRange('B2:B22').getValues();
  var orgUnit = emailSheet.getRange('A2:A22').getValues();


  var destSS = SpreadsheetApp.openById('SHEETID');
  var destSheet = destSS.getSheetByName('Sheet1');
  var destLastRow = destSheet.getLastRow();
  var type = destLastRow[0].setValue('NEW');
  var ID = destLastRow[1];

}
4

1 回答 1

4

在 Javascript 中(因此在 Google Apps 脚本中),只有在目标对象“具有”该方法时才能调用该方法。您收到错误是因为您混淆了一些对象 - 对象类型不支持您正在使用的方法。(同意 Serge 的评论!)

您遇到的错误是:

  1. 在第三行代码中,dataLastRow = dataSheet.getLastRow()产生一个数字,然后尝试dataLastRow.getRange(). 不过,.getRange()是一种Sheet方法。

  2. 稍后,destLastRow = destSheet.getLastRow()产生另一个数字。下一行有两个错误。首先是这个 Number 被视为一个 Array destLastRow[0],.

  3. 该行中的第二个错误是调用Range.setValue()未定义的值。(它是未定义的,因为数组索引不正确。)

  4. 在此之下,var ID = destLastRow[1]重复错误 #2。

此编辑版本删除了这些错误。它可能在逻辑上有其他错误,它肯定不完整,但它运行。添加了注释以显示每个语句返回的对象类型。

function sendData() {

  var sourceSS = SpreadsheetApp.getActiveSpreadsheet();      //= Spreadsheet
  var dataSheet = sourceSS.getSheetByName("Data");           //= Sheet
  var dataLastRow = dataSheet.getLastRow();                  //= Number
  var dataValues = dataSheet.getRange("A"+(dataLastRow)+":G"+(dataLastRow)).getValues();
                                                             //= Array [[]]

  var emailSheet = sourceSS.getSheetByName('Emails');        //= Sheet
  var recipient = emailSheet.getRange('B2:B22').getValues(); //= Array [[]]
  var orgUnit = emailSheet.getRange('A2:A22').getValues();   //= Array [[]]

  var destSS = SpreadsheetApp.openById('SHEETID');           //= Spreadsheet
  var destSheet = destSS.getSheetByName('Sheet1');           //= Sheet
  var destLastRow = destSheet.getLastRow();                  //= Number
  var type = destSheet.getRange(destLastRow, 0);             //= Range
  type.setValue('NEW');                                      //= Range (for chaining)
  var ID = destSheet.getRange(destLastRow, 1);               //= Range

}

自动完成作为缺陷删除工具

在这种情况下,Apps 脚本编辑器的自动完成功能是您的朋友。当编辑器能够确定您正在处理的对象类型时,它将提供支持的方法列表。如果您开始输入,您会看到以下内容var dataValues = dataSheet.getR...

带有自动完成功能的屏幕截图

你一输入.,编辑器就提供了一长串方法。随着输入的字符越多,列表越短——此时您会看到各种Sheet.getRange()方法。

另一方面,当我们键入时会发生以下情况var dataValues = dataLastRow.

在此处输入图像描述

不多。编辑器没有为此类型提供自动完成方法,Number. 如果您在编辑时调整到此行为,则可以避免许多简单的错误,这些错误可能会在以后产生高 PITA 因子。

于 2013-08-02T02:15:14.363 回答