Time 如何使用谷歌应用程序脚本在谷歌电子表格中读取时间?
在花了几个小时来确定一个合理的或解决方案之后,我的希望现在与这个社区在一起 我正在尝试获取(“读取”)用户在google spreasheet中输入的时间,并在google应用程序脚本中正确使用它,例如创建google日历事件 所需格式为“HH:mm” 我的出发点是上提供的google apps脚本示例 在本例中,我使用“”说明修改了spreasheet的参数(对不起,法语!): 我还更改了列“C”和“D”的显示格式,使其在初始示例中不显示AM/PM:Time 如何使用谷歌应用程序脚本在谷歌电子表格中读取时间?,time,google-apps-script,datetime-format,Time,Google Apps Script,Datetime Format,在花了几个小时来确定一个合理的或解决方案之后,我的希望现在与这个社区在一起 我正在尝试获取(“读取”)用户在google spreasheet中输入的时间,并在google应用程序脚本中正确使用它,例如创建google日历事件 所需格式为“HH:mm” 我的出发点是上提供的google apps脚本示例 在本例中,我使用“”说明修改了spreasheet的参数(对不起,法语!): 我还更改了列“C”和“D”的显示格式,使其在初始示例中不显示AM/PM: Start Time End Time
Start Time End Time
13:00:00 14:55:00
13:00:00 14:55:00
...
为了在脚本编辑器中启用调试,我在setUpConference(第14行)的末尾删除了“3;”
我在debug中启动了脚本“setUpConference”,以检查从数据表读取的值。
我感到惊讶的是,第一条数据线
Ethics for monsters 5/15/2013 13:00:00 14:55:00 Rm 323: Minotaur's Labyrinth
变量“session”的对应数据
而会话[2]
在脚本编辑器中显示为:
1899年12月30日星期六13:50:39 GMT+0100(CET)
我知道只有“时间”(HH:mm),日期是不完整的(所以是1899天),但如何获得时间“13:00:00”而不是这个奇怪的“13:50:39”
注:我的日历时区也是GMT+0100(CET)
包含更多信息的某些编辑:
- 我用它来做测试
- 我简化了我的谷歌应用程序脚本的代码,以关注这个问题(最初的代码是谷歌在
/**
*当电子表格打开时插入自定义菜单的特殊功能。
*/
函数onOpen(){
var菜单=[{name:'设置会议',functionName:'设置会议'}];
SpreadsheetApp.getActive().addMenu('会议',菜单);
}
/** *使用电子表格中的会议数据创建 *Google日历事件、Google表单和允许脚本的触发器 *作出反应以形成反应。 */ 功能设置会议(){ /*if(ScriptProperties.getProperty('calId')){ Browser.msgBox('您的会议已经设置好。请在Google Drive中查找!'); }*/ var ss=SpreadsheetApp.getActive(); var sheet=ss.getSheetByName(“会议设置”); var range=sheet.getDataRange(); var values=range.getValues(); 设置日历(值、范围); } /** *创建一个Google日历,其中包含中每个会议会话的事件 *电子表格,然后将事件ID写入电子表格以供将来使用。 * *@param{String[][]}值电子表格范围的单元格值。 *@param{Range}Range包含会议数据的电子表格范围。 */ 功能设置日历(值、范围){ //用于调试的注释cal //var cal=CalendarApp.createCalendar(“测试会议日历”); 对于(变量i=1;i
var values=range.getValues();
更改为var values=range.getDisplayValues();
这将迫使它将单元格值作为字符串抓取
按以下方式更改日期联接函数将使其能够处理字符串(可能需要确保电子表格中的日期具有前导零):
请看一看您是否可以分享(1)电子表格中存在的时间值,(2)用于访问该值的确切代码,以及(3)用于显示“Sat Dec 30 1899 13:50:39 GMT+0100(CET)”的代码?感谢Casper&Diego的关注和初步回答。我正在编辑我的初始问题以添加元素。@Casper我尝试使用
实用程序.formatDate()
格式化,但数据似乎已经不是我在脚本中等待的数据:((“C2中的13:00:00”被脚本视为“13:50:39”)@Diego回答您的观点:(1)13:00:00(2)描述中更新的代码(3)“Sat Dec 30 1899 13:50:39 GMT+0100(CET)”是调试模式下在线脚本编辑器中的数据,我还添加了Logger.log输出:'[]I=1-会话[2]=Sat Dec 30 1899 13:50:39 GMT+0100(CET)|会话[3]=Sat Dec 30 1899 15:45:39 GMT+0100(CET)[]formattedHour=13:50'看看这篇文章,这也是我问题的完美答案。非常感谢Jared!让我疯狂的是,最初的代码取自谷歌官方教程:!
["Ethics for monsters", (new Date(1368568800000)), (new Date(-2209115361000)), (new Date(-2209108461000)), "Rm 323: Minotaur's Labyrinth"]
/**
* A set-up function that uses the conference data in the spreadsheet to create
* Google Calendar events, a Google Form, and a trigger that allows the script
* to react to form responses.
*/
function setUpConference() {
/* if (ScriptProperties.getProperty('calId')) {
Browser.msgBox('Your conference is already set up. Look in Google Drive!');
}*/
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName('Conference Setup');
var range = sheet.getDataRange();
var values = range.getValues();
setUpCalendar(values, range);
}
/**
* Creates a Google Calendar with events for each conference session in the
* spreadsheet, then writes the event IDs to the spreadsheet for future use.
*
* @param {String[][]} values Cell values for the spreadsheet range.
* @param {Range} range A spreadsheet range that contains conference data.
*/
function setUpCalendar(values, range) {
// comment cal for debug
//var cal = CalendarApp.createCalendar('Test Conference Calendar');
for (var i = 1; i < values.length; i++) {
var session = values[i];
var title = session[0];
Logger.log("i= "+i+" - "+ "session[2]= " + session[2] + " | session[3] =" + session[3] );
// This formats the date as Greenwich Mean Time in the format
// year-month-dateThour-minute-second.
var formattedHour = Utilities.formatDate(session[2], "GMT+1", "HH:mm");
Logger.log("formattedHour = "+formattedHour);
var start = joinDateAndTime(session[1], session[2]);
var end = joinDateAndTime(session[1], session[3]);
var options = {location: session[4], sendInvites: true};
// comment cal and event creation
/*var event = cal.createEvent(title, start, end, options)
.setGuestsCanSeeGuests(false);
session[5] = event.getId();*/
}
range.setValues(values);
}
/**
* Creates a single Date object from separate date and time cells.
*
* @param {Date} date A Date object from which to extract the date.
* @param {Date} time A Date object from which to extract the time.
* @return {Date} A Date object representing the combined date and time.
*/
function joinDateAndTime(date, time) {
date = new Date(date);
date.setHours(time.getHours());
date.setMinutes(time.getMinutes());
return date;
}
function joinDateAndTime(date, time) {
var t = new Date(date);
t.setHours(parseInt(time.substring(0, 2)));
t.setMinutes(parseInt(time.substring(3, 5)));
return t;
}