0

動作を停止した Google App Script があり、「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 + ":");
}

キーは新しい日付を使用することですが、他のスクリプトでは 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

問題はスクリプトではなく、スプレッドシートにあります。行 [3] (おそらく列 D) に対応するセルをダブルクリックすることで簡単にテストでき、何が起こるかを確認できます。時間:分のみを表示する日付オブジェクトの場合、次のようなカレンダー ポップアップが表示されます。これ: ここに画像の説明を入力

それが「通常の」数値または文字列である場合、これらのステートメントは引数として日付オブジェクトを必要とするため、特別なことは何も起こらず、スクリプトはそれから時間または分を取得することはありません。

これは、スプレッドシートの危険性の 1 つであり、物事がそうでないように見えます。この場合、時間の値を時間と分で表示し、背後にあるオブジェクトは年、秒、ミリ秒の完全な日付の値です...忘れがちです。それ ;-)

したがって、最新のセル値を確認すると、誰かが間違った方法で値を入力し、スプレッドシートがそれを日付値に変換できなかったことがわかると確信しています。

于 2012-11-29T17:24:42.013 に答える