0

Google スプレッドシートの名簿から Google カレンダーのイベントを作成するスプレッドシートを作成しました。

私はこの 1 か月間、チームでこれをうまく使用してきましたが、現在、すべての恐ろしい日付型で問題が発生しています。

.getValue() のような関数を使用する場合、日付を決定するためにスプレッドシートのタイム ゾーンが全面的に使用されることを理解しています。ここで、11 月の名簿のカレンダー イベントを送信しようとすると、2012 年 11 月 12 日から 2012 年 11 月 13 日に変更されるまで正常に動作します。

スクリプトは 12/11/2012 (var type: Date) という日付を正しく取得し、それを使用してイベントを作成します。次の日付を取得しようとすると、単に空の文字列が返されます。次に、Utilities.formatDate() 関数は、String 変数をフォーマットできないことを示すエラーをスローします。

以下の画像は、11 月 10 日のコードとデバッグ情報を示しています。これは、正しく機能していれば、13 番目も同様に見えるはずです。 ここに画像の説明を入力

以下の画像は、11 月 13 日のコード、エラー、およびデバッグ情報を示しています。getDate が空の文字列であるのに対し、10 日は日付であることがわかります。(getDate 変数の後の変数情報は、最後の反復から残っています) ここに画像の説明を入力

私はこれを説明するために頭を悩ませてきました。.getValue() が参照している両方のセルには、有効なオーストラリアの日付が含まれています。これは 10 月中ずっと機能しており、日付が 2012 年 11 月 13 日より後の場合にのみ問題になります (2012 年 11 月 17 日を使用してテストしても同じ結果が得られました)。

.getValue は 13/11/2012 を返しますが、スクリプトはこれをアメリカの日付と見なしています。したがって、13 番目の月がないと判断し、空の文字列に戻ります。この説明は、10 月のイベントでの正しい使用法を説明していません。スクリプトは 13/10/2012 を問題なく処理します。

何か提案があれば、それを提供してください。

編集: リクエストに応じてコードを追加:

function sendInvites() {
  // Gather Prelim Information
  var splash = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Splash");
  var nameRange = splash.getRange("A6:B26"); // Need to change this to be the full staff list in Splash

 // var inviteSheet = Browser.inputBox("Sheet to send invites from (Number)", Browser.Buttons.OK_CANCEL)
  var days = SpreadsheetApp.getActiveSpreadsheet().getSheets()[2];
  var dayRange;

  //Initiate iteration through Names, according to the Splash sheet
  for(nameRow=nameRange.getRow(); nameRow<=26; nameRow++){ //Change to Corresponding iterate
    // Gather Name and Email information for the each person
    var col = nameRange.getColumn();
    var row = nameRow;
    var name = splash.getRange(row, col).getValue();
    var email = splash.getRange(row, col+1).getValue();
    var eventChoice = splash.getRange(row, col+2).getValue();

    //Proceed if all information and permission exists
    if(name != "" && email != "" && eventChoice == "Yes"){
      var cal = CalendarApp.getCalendarById(email);

      //Initiate iteration through Days, according to the Roster
      for(i=0; i<=6; i++){
        //Specify Day Ranges
        switch(i){
          case 0: //Saturday
            dayRange = days.getRange("A1:O6"); break;
          case 1: //Sunday
            dayRange = days.getRange("A10:O15"); break;
          case 2: //Monday
            dayRange = days.getRange("A19:O41"); break;
          case 3: //Tuesday
            dayRange = days.getRange("A45:O67"); break;
          case 4: //Wednesday
            dayRange = days.getRange("A71:O93"); break;
          case 5: //Thursday
            dayRange = days.getRange("A97:O119"); break;
          case 6: //Friday
            dayRange = days.getRange("A123:O145"); break;
        }

        //Find Name in dayRange
        for(dayRow=dayRange.getRow(); dayRow<=dayRange.getLastRow(); dayRow++){
          var searchCol = dayRange.getColumn();
          var searchRow = dayRow;        
          var searchName = days.getRange(searchRow, searchCol).getValue();

          if (name==searchName){
            // Gather and format Date and Time information for invitation
            var eventName = "Library & IT Help";
            var getDate = dayRange.getValue();

            var date = Utilities.formatDate(getDate, "GMT+1000", "EEE MMM dd yyyy");
            var startCell = days.getRange(searchRow, searchCol+1).getValue();
            var endCell = days.getRange(searchRow, searchCol+2).getValue();

            if (startCell != ""){
              var startTime = date + " " + Utilities.formatDate(startCell, "GMT+1000", "HH:mm:ss");
              var endTime = date + " " + Utilities.formatDate(endCell, "GMT+1000", "HH:mm:ss");
              //Create a calendar event with the details above
              cal.createEvent(eventName, new Date(startTime), new Date(endTime));
            }
          }
        }
      }
    }
  }
}
4

1 に答える 1

1

スクリプト自体が、使用しているロケールを使用していることを確認する必要があります。これは、[スクリプト エディター] > [ファイル] > [プロパティ] (メモリから) で設定できます。

于 2012-11-01T05:22:12.730 に答える