0

我有一个 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;
}

非常感谢!

4

3 回答 3

2

我有一个类似的问题。我能够在一个脚本中使用 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 + ":");
}

关键是使用new Date而在我的其他脚本中 schedule[0][2].getHours() 有效!

无论如何,希望这会有所帮助。

于 2015-09-30T16:33:28.863 回答
1

我不知道row它是什么,也不知道它在哪里定义。但是该4th元素是一个数字对象,其值为 17,而不是您期望的任何对象。

var tstart = row[3];
var startHour = tstart.getHours(); // Number object has no function getHours()
于 2012-11-29T13:06:31.473 回答
0

问题出在您的电子表格中,而不是在您的脚本中。您可以通过双击对应于 row[3] 的单元格(很可能在 D 列中)轻松测试它并查看会发生什么:如果它是一个仅显示小时:分钟的日期对象,那么它会给您一个日历弹出窗口,例如这个: 在此处输入图像描述

如果它是一个“普通”数字或字符串,则不会发生任何特殊情况,并且您的脚本将永远不会从中获得任何小时或分钟,因为这些语句需要一个日期对象作为参数。

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

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

于 2012-11-29T17:24:42.013 回答