我有一个代码应该输入一个日历事件,然后在单元格中输入一个注释“Inputted”。这部分有效,但只是在一定程度上。
如果我有多个事件(在不同的行上),它会在第一个事件上说出“输入”。但是对于其他人来说,它会创建一个10行而不是1行的注释。查看我的代码,我看不到任何会导致它执行此操作的内容 - 因为日历事件是完美创建的。我相信它位于var Comment
部分 - 但那里没有乘法!
谁能看到我哪里出错?!
function CalendarInput() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // First row of data to process
var numRows = 3; // Number of rows to process
var dataRange = sheet.getRange(startRow, 1, numRows, 26); //What data will be used
var data = dataRange.getValues();
var cal = CalendarApp.getDefaultCalendar(); //Gets the correct calendar
for (i in data) {
var row = data[i];
var title = row[2]; // Column with Title
var desc = row[8]; // Column with Description
var date = row[3]; //Column with Date
var edate = row[4] //Column with end date
var loc = row[9]; //Column with Location
var invite = row[11] //Column with Invite List
var sent = row[12] //Check Sent
var check = row[7]
var Comment = sheet.getRange(i+startRow, 7).setNote("Inputted")
cal.createAllDayEventSeries(title, new Date(date), CalendarApp.newRecurrence().addDailyRule().until(new Date(edate)), {description:desc,location:loc,guests:invite})
答案 0 :(得分:0)
有关使用for..in
循环遍历数组的文档警告,例如,请参阅this Description on MDN。
您看到的问题是由for..in
在应用脚本中的工作方式引起的。
此测试功能将演示.setComment()
行i + startRow
时发生的情况:
function test() {
var data = [ [2,3,4,5],[5,4,3,2],[6,7,8,9],[9,8,7,6] ];
var startRow = 2;
var i;
Logger.log("for (var i in data)");
for (i in data) {
Logger.log( i + startRow );
}
Logger.log(typeof i);
Logger.log("for (var i = 0; i < data.length ; i++)");
for (i = 0; i < data.length ; i++) {
Logger.log( i + startRow );
}
Logger.log(typeof i);
}
[13-06-01 22:41:10:046 EDT] for (var i in data)
[13-06-01 22:41:10:046 EDT] 02
[13-06-01 22:41:10:046 EDT] 12
[13-06-01 22:41:10:046 EDT] 22
[13-06-01 22:41:10:046 EDT] 32
[13-06-01 22:41:10:047 EDT] string
[13-06-01 22:41:10:047 EDT] for (var i = 0; i < data.length ; i++)
[13-06-01 22:41:10:047 EDT] 2.0
[13-06-01 22:41:10:047 EDT] 3.0
[13-06-01 22:41:10:047 EDT] 4.0
[13-06-01 22:41:10:047 EDT] 5.0
[13-06-01 22:41:10:047 EDT] number
当使用for..in
循环时,循环变量i
是一个字符串 - 循环变量i
的类型为String - 因此您可以获得像{{{}这样的运算符的字符串行为1}}。执行+
时,i + startRow
被强制转换为字符串,然后连接到startRow
,这已经是一个字符串。
另一方面,在i
循环中,同一语句导致数学运算,因为两个操作数都是数字类型。
它很短,通常有效,但打破习惯。
请改用:
for