2012-11-29 51 views
0

我有一個停止工作的Google App腳本,並在對象17中引發錯誤「TypeError:Can not find getHours in function 17.」。由於我們沒有對代碼進行任何更改,而且我對Google App Script/Javascript也不太熟悉,所以我希望有人能指出我的正確方向。TypeError:在對象17中找不到函數getHours

的代碼比這更長的時間,但我給調用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

你可以發佈'行'的內容嗎?我想隱式轉換爲'日期'是爲'日期'var發生,但不是'tstart'和'tstop'。 – bfavaretto

回答

1

我不知道row是什麼,或者它在哪裏定義。但4th元素是一個數字對象,值爲17,而不是您期望的任何對象。

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

該問題出現在您的電子表格中,而不是您的腳本中。 您可以通過雙擊對應於第[3]行的單元格(很可能在D列中)輕鬆地測試它,並且看看會發生什麼:如果它是一個只顯示小時數的分鐘對象:分鐘,那麼它會給你一個日曆彈出像這樣: enter image description here

如果是「普通」數字或字符串,然後沒有什麼特別會發生,你的腳本將永遠不會從中得到任何小時或分鐘,因爲這些語句需要一個Date對象作爲參數。

這是電子表格的危險之一,它使事物看起來像他們不是,在這種情況下顯示時間值以小時和分鐘爲單位,而背後的對象是具有年,秒和毫秒的完整日期值。 。經常會忘記的;-)

因此,請檢查最近的單元格值,我很確定您會發現有人以錯誤的方式輸入了值,並且未能將其轉換爲日期值。

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 ()的作品!

無論如何,希望這會有所幫助。

相關問題