【问题标题】:TypeError: Cannot find function getHours in object 17TypeError:在对象 17 中找不到函数 getHours
【发布时间】:2012-11-29 13:04:12
【问题描述】:

我有一个 Google 应用脚本停止工作并抛出错误“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;
}

非常感谢!

【问题讨论】:

  • 可以发一下row的内容吗?我猜date var 正在隐式转换为Date,但tstarttstop 没有。

标签: javascript google-apps-script


【解决方案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 + ":");
}

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

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

【讨论】:

    【解决方案2】:

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

    var tstart = row[3];
    var startHour = tstart.getHours(); // Number object has no function getHours()
    

    【讨论】:

      【解决方案3】:

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

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

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

      所以,检查最近的单元格值,我很确定你会发现有人输入了错误的值,并且电子表格未能将其转换为日期值。

      【讨论】:

        猜你喜欢
        • 2018-06-04
        • 2015-09-27
        • 2018-03-31
        • 1970-01-01
        • 1970-01-01
        • 2023-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多