我有一个停止工作的Google App脚本并抛出错误“TypeError:在对象17中找不到函数getHours”。由于我们没有对代码进行任何更改,而且我对Google App Script / Javascript不太熟悉,我希望有人可以指出我正确的方向。
代码比这长得多,但我给出了一个getHours函数外观的例子(如果需要,我可以提供完整的代码):
if (action.indexOf("[") == -1 && action != "") { // Check if there is some operation to take action
var roomtype = row[1]; // Reading data from the table
var desc = row[8];
var date = row[2];
var tstart = row[3];
var tstop = row[4];
var name = row[5];
var company = row[9];
var short_title = RoomShortcuts[0][roomtype] + " " + name + " (" + company + ")"; // Creating title of the Calendar entry
if (action == "Tentative") { short_title = "PROV: " + short_title; } // This is for Tentative events
var year = date.getYear(); // Getting the date and time and transforming it for the calendar
var month = date.getMonth();
var day = date.getDate();
var startHour = tstart.getHours();
var startMinute = tstart.getMinutes();
var stopHour = tstop.getHours();
var stopMinute = tstop.getMinutes();
var startdate = new Date(year, month, day, startHour, startMinute);
var stopdate = new Date(year, month, day, stopHour, stopMinute);
if (roomtype == "Gallery") {
var repeat = 2;
cal_EventCalendar[0]['Gallery'] = CalendarApp.openByName("Hub SMR");
} else {
var repeat = 1;
}
非常感谢!
答案 0 :(得分:1)
我不知道row
是什么,或者它定义的位置。但是4th
元素是一个数字对象,其值为17,而不是您期望的任何对象。
var tstart = row[3];
var startHour = tstart.getHours(); // Number object has no function getHours()
答案 1 :(得分:1)
我有类似的问题。我能够在一个脚本中使用getHours,但在尝试从另一个脚本访问工作表时遇到了同样的错误。无论如何,看完之后:
http://www.w3schools.com/jsref/jsref_gethours.asp
我把以下解决方案放在一起:
function weeklyUpdater() {
var sheet = SpreadsheetApp.getActiveSheet();
var schedule = sheet.getRange(2, 2, sheet.getLastRow() + 1, 3).getValues();
var hours = new Date(schedule[0][2]); // parse string into date
var hoursX = hours.getHours();
Logger.log(hoursX + ":");
}
关键是使用新日期,而在我的其他脚本中,[0] [2] .getHours()有效!
无论如何,希望这有帮助。
答案 2 :(得分:0)
问题出在您的电子表格中,而不是在您的脚本中。 你可以通过双击对应于行[3]的单元格(很可能在D列中)来轻松测试它,看看会发生什么:如果它是一个只显示小时:分钟的日期对象,那么它会给你一个日历弹出窗口这个:
如果它是一个'普通'数字或字符串,那么没有什么特别的事情发生,你的脚本永远不会得到任何小时或分钟,因为这些语句需要一个日期对象作为参数。
这是电子表格的危险之一,使得事物看起来像它们不是,在这种情况下显示时间值以小时和分钟为单位,而后面的对象是具有年,秒和毫秒的完整日期值...人们经常忘记; - )
因此,检查最新的单元格值,我很确定您会发现有人以错误的方式键入值,并且传感器未能将其转换为日期值。