我很难弄清楚这一点。我想从一个工作表中提取数据,然后将其复制到另一个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];
}
最佳答案
在Javascript中(因此在Google Apps Script中),只有在目标对象“具有”该方法的情况下才可以调用该方法。由于混合了一些对象,您会收到错误消息-对象类型不支持您所使用的方法。 (同意Serge的评论!)
您遇到的错误是:
在代码的第三行中,dataLastRow = dataSheet.getLastRow()
产生一个数字,然后尝试dataLastRow.getRange()
。但是,.getRange()
是Sheet
方法。
后来,destLastRow = destSheet.getLastRow()
产生另一个数字。下一行有两个错误。首先是将此数字视为数组destLastRow[0]
。
该行中的第二个错误是对未定义的值调用Range.setValue()
。 (这是未定义的,因为数组索引不正确。)
在此之下,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升高。