TypeError:无法在对象17中找到函数getHours

时间:2012-11-29 13:04:13

标签: javascript google-apps-script

我有一个停止工作的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;
}

非常感谢!

3 个答案:

答案 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列中)来轻松测试它,看看会发生什么:如果它是一个只显示小时:分钟的日期对象,那么它会给你一个日历弹出窗口这个: enter image description here

如果它是一个'普通'数字或字符串,那么没有什么特别的事情发生,你的脚本永远不会得到任何小时或分钟,因为这些语句需要一个日期对象作为参数。

这是电子表格的危险之一,使得事物看起来像它们不是,在这种情况下显示时间值以小时和分钟为单位,而后面的对象是具有年,秒和毫秒的完整日期值...人们经常忘记; - )

因此,检查最新的单元格值,我很确定您会发现有人以错误的方式键入值,并且传感器未能将其转换为日期值。