我创建了一个电子表格,可以从Google电子表格列表中创建Google日历活动。
过去一个月我在团队中成功使用了这个,现在我遇到了所有可怕日期类型的问题。
据我了解,电子表格时区将全面用于确定使用.getValue()等函数的日期。现在,当我尝试发送11月份名单的日历活动时,它可以正常工作,直到2012年11月12日到2012年11月13日为止。
该脚本将正确获取日期12/11/2012(var type:Date),并将使用它来创建事件。当它试图获得下一个日期时,它将只返回一个空白字符串。然后,Utilities.formatDate()函数抛出一个错误,指出它无法格式化String变量。
下图显示了11月10日的代码和调试信息。如果它正常工作,这就是第13个应该如何看待。
下图显示了11月13日的代码,错误和调试信息。你可以看到getDate是一个空白字符串,而在10日它是一个日期。 (getDate变量之后的任何变量信息都是从上一次迭代中遗留下来的)
我一直绞尽脑汁解释这一点。 .getValue()引用的单元格都包含有效的澳大利亚日期。它已经适用于整个十月份,并且仅在日期晚于13/11/2012时才出现问题(我也使用17/11/2012进行了相同的结果测试)。
这就是我的想法:.getValue返回13/11/2012,但后来脚本将此视为美国日期。因此,它决定没有第13个月并且回落到空字符串。此解释并未考虑10月事件的正确使用。该脚本处理13/10/2012就好了。
如果您有任何建议,请提供给我们,我在我的智慧结束!
编辑:根据请求添加代码:
function sendInvites() {
// Gather Prelim Information
var splash = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Splash");
var nameRange = splash.getRange("A6:B26"); // Need to change this to be the full staff list in Splash
// var inviteSheet = Browser.inputBox("Sheet to send invites from (Number)", Browser.Buttons.OK_CANCEL)
var days = SpreadsheetApp.getActiveSpreadsheet().getSheets()[2];
var dayRange;
//Initiate iteration through Names, according to the Splash sheet
for(nameRow=nameRange.getRow(); nameRow<=26; nameRow++){ //Change to Corresponding iterate
// Gather Name and Email information for the each person
var col = nameRange.getColumn();
var row = nameRow;
var name = splash.getRange(row, col).getValue();
var email = splash.getRange(row, col+1).getValue();
var eventChoice = splash.getRange(row, col+2).getValue();
//Proceed if all information and permission exists
if(name != "" && email != "" && eventChoice == "Yes"){
var cal = CalendarApp.getCalendarById(email);
//Initiate iteration through Days, according to the Roster
for(i=0; i<=6; i++){
//Specify Day Ranges
switch(i){
case 0: //Saturday
dayRange = days.getRange("A1:O6"); break;
case 1: //Sunday
dayRange = days.getRange("A10:O15"); break;
case 2: //Monday
dayRange = days.getRange("A19:O41"); break;
case 3: //Tuesday
dayRange = days.getRange("A45:O67"); break;
case 4: //Wednesday
dayRange = days.getRange("A71:O93"); break;
case 5: //Thursday
dayRange = days.getRange("A97:O119"); break;
case 6: //Friday
dayRange = days.getRange("A123:O145"); break;
}
//Find Name in dayRange
for(dayRow=dayRange.getRow(); dayRow<=dayRange.getLastRow(); dayRow++){
var searchCol = dayRange.getColumn();
var searchRow = dayRow;
var searchName = days.getRange(searchRow, searchCol).getValue();
if (name==searchName){
// Gather and format Date and Time information for invitation
var eventName = "Library & IT Help";
var getDate = dayRange.getValue();
var date = Utilities.formatDate(getDate, "GMT+1000", "EEE MMM dd yyyy");
var startCell = days.getRange(searchRow, searchCol+1).getValue();
var endCell = days.getRange(searchRow, searchCol+2).getValue();
if (startCell != ""){
var startTime = date + " " + Utilities.formatDate(startCell, "GMT+1000", "HH:mm:ss");
var endTime = date + " " + Utilities.formatDate(endCell, "GMT+1000", "HH:mm:ss");
//Create a calendar event with the details above
cal.createEvent(eventName, new Date(startTime), new Date(endTime));
}
}
}
}
}
}
}
答案 0 :(得分:1)
您需要确保脚本本身正在使用您正在使用的区域设置。您可以在脚本编辑器中设置&gt;文件&gt;属性(来自内存)。