回答編集履歴

11

 

2022/02/22 10:36

投稿

退会済みユーザー
test CHANGED
@@ -57,9 +57,9 @@
57
57
  + let CalendarName = contents[i][calnameNum]; //設定するカレンダー名
58
58
  + let calender = CalendarApp.getCalendarsByName(CalendarName)[0];
59
59
  + if (calender == null) {
60
- console.log('カレンダー名の列が空欄、またはカレンダーを正常に取得できなかったため、デフォルトのカレンダーに記入します。');
60
+ + console.log('カレンダー名の列が空欄、またはカレンダーを正常に取得できなかったため、デフォルトのカレンダーに記入します。');
61
- calender = CalendarApp.getCalendarById(gAccount);
61
+ + calender = CalendarApp.getCalendarById(gAccount);
62
- }
62
+ + }
63
63
 
64
64
  //「済」っぽいのか、空の場合は飛ばす
65
65
  var status = contents[i][statusCellNum];

10

 

2022/02/22 10:34

投稿

退会済みユーザー
test CHANGED
@@ -55,7 +55,11 @@
55
55
 
56
56
  // googleカレンダーの取得
57
57
  + let CalendarName = contents[i][calnameNum]; //設定するカレンダー名
58
- + let calender = CalendarApp.getCalendarsByName(CalendarName)[0];
58
+ + let calender = CalendarApp.getCalendarsByName(CalendarName)[0];
59
+ + if (calender == null) {
60
+ console.log('カレンダー名の列が空欄、またはカレンダーを正常に取得できなかったため、デフォルトのカレンダーに記入します。');
61
+ calender = CalendarApp.getCalendarById(gAccount);
62
+ }
59
63
 
60
64
  //「済」っぽいのか、空の場合は飛ばす
61
65
  var status = contents[i][statusCellNum];

9

 

2022/02/21 22:56

投稿

退会済みユーザー
test CHANGED
@@ -14,10 +14,8 @@
14
14
  下記のようなコードになるでしょう。
15
15
 
16
16
  (仮に、カレンダー名を、A列ではなくJ列に入力する場合は、const lastCol=10 にした上で、
17
- const calnameNum = 0;
17
+ const calnameNum = 0;
18
-
19
- const calnameNum = 9;
20
- に変えてください。A列にカレンダー名を入力する場合は変える必要はありません。)
18
+ const calnameNum = 9;に変えてください。A列にカレンダー名を入力する場合は下記のコードから変える必要はありません。)
21
19
 
22
20
  ```diff
23
21
  /**

8

  

2022/02/21 22:56

投稿

退会済みユーザー
test CHANGED
@@ -10,14 +10,14 @@
10
10
  ※getCalendarsByName の戻り値は「配列」なので、[0]が必要です(カレンダー名に重複がない場合)
11
11
   
12
12
   
13
- 題意より、スプレッドシートの**1列目(A列)**に対象のカレンダー名を入力しているという想定だと、下記のようなコードになるでしょう。
13
+ 題意より、スプレッドシートの**1列目(A列)**に対象のカレンダー名を入力しているという想定だと、
14
+ 下記のようなコードになるでしょう。
14
15
 
15
- 仮に、J列にカレンダー名を入力している場合は、const lastCol=10 にした上で、
16
+ 仮に、カレンダー名を、A列ではなくJ列に入力る場合は、const lastCol=10 にした上で、
16
17
  const calnameNum = 0;
17
18
 
18
19
  const calnameNum = 9;
19
-
20
- に変えてください。
20
+ に変えてください。A列にカレンダー名を入力する場合は変える必要はありません。)
21
21
 
22
22
  ```diff
23
23
  /**

7

 

2022/02/21 22:54

投稿

退会済みユーザー
test CHANGED
@@ -12,7 +12,7 @@
12
12
   
13
13
  題意より、スプレッドシートの**1列目(A列)**に対象のカレンダー名を入力しているという想定だと、下記のようなコードになるでしょう。
14
14
 
15
- ※仮に、J列にカレンダー名を入力している場合は、
15
+ ※仮に、J列にカレンダー名を入力している場合は、const lastCol=10 にした上で、
16
16
  const calnameNum = 0;
17
17
 
18
18
  const calnameNum = 9;
@@ -33,7 +33,7 @@
33
33
  const lastCol = 9;
34
34
 
35
35
  // 0始まりで列を指定しておく
36
- + const calnameNum = 0; // 追加(1列目[A列]にカレンダー名を入力しているという想定。仮に、J列にカレンダー名を入力している場合は、=0を=9に変える)
36
+ + const calnameNum = 0; // 追加(1列目[A列]にカレンダー名を入力しているという想定。仮に、J列にカレンダー名を入力している場合は、=0を=9に変える。さらに上のconst lastCol=9を=10 にする
37
37
  const statusCellNum = 1;
38
38
  const dayCellNum = 2;
39
39
  const startCellNum = 4;

6

念のため全文を表示

2022/02/21 22:51

投稿

退会済みユーザー
test CHANGED
@@ -10,7 +10,14 @@
10
10
  ※getCalendarsByName の戻り値は「配列」なので、[0]が必要です(カレンダー名に重複がない場合)
11
11
   
12
12
   
13
- 題意より、スプレッドシートの1列目に対象のカレンダー名を入力しているという想定だと、下記のようなコードになるでしょう。
13
+ 題意より、スプレッドシートの**1列目(A列)**に対象のカレンダー名を入力しているという想定だと、下記のようなコードになるでしょう。
14
+
15
+ ※仮に、J列にカレンダー名を入力している場合は、
16
+ const calnameNum = 0;
17
+
18
+ const calnameNum = 9;
19
+
20
+ に変えてください。
14
21
 
15
22
  ```diff
16
23
  /**
@@ -26,7 +33,7 @@
26
33
  const lastCol = 9;
27
34
 
28
35
  // 0始まりで列を指定しておく
29
- + const calnameNum = 0; // 追加(1列目にカレンダー名を入力しているという想定)
36
+ + const calnameNum = 0; // 追加(1列目[A列]にカレンダー名を入力しているという想定。仮に、J列にカレンダー名を入力している場合は、=0を=9に変える
30
37
  const statusCellNum = 1;
31
38
  const dayCellNum = 2;
32
39
  const startCellNum = 4;
@@ -51,5 +58,65 @@
51
58
  // googleカレンダーの取得
52
59
  + let CalendarName = contents[i][calnameNum]; //設定するカレンダー名
53
60
  + let calender = CalendarApp.getCalendarsByName(CalendarName)[0];
61
+
62
+ //「済」っぽいのか、空の場合は飛ばす
63
+ var status = contents[i][statusCellNum];
64
+ if (
65
+ status == "済" ||
66
+ status == "済み" ||
67
+ status == "OK" ||
68
+ contents[i][dayCellNum] == ""
69
+ ) {
70
+ continue;
71
+ }
72
+
73
+ // 値をセット 日時はフォーマットして保持
74
+ var day = new Date(contents[i][dayCellNum]);
75
+ var startTime = contents[i][startCellNum];
76
+ var endTime = contents[i][endCellNum];
77
+ var title = contents[i][titleCellNum];
78
+ // 場所と詳細をセット
79
+ var options = {location: contents[i][locationCellNum], description: contents[i][descriptionCellNum]};
80
+
54
- (以下略)
81
+ try {
82
+ // 開始終了が無ければ終日で設定
83
+ if (startTime == '' || endTime == '') {
84
+ //予定を作成
85
+ calender.createAllDayEvent(
86
+ title,
87
+ new Date(day),
88
+ options
89
+ );
90
+
91
+ // 開始終了時間があれば範囲で設定
92
+ } else {
93
+ // 開始日時をフォーマット
94
+ var startDate = new Date(day);
95
+ startDate.setHours(startTime.getHours())
96
+ startDate.setMinutes(startTime.getMinutes());
97
+ // 終了日時をフォーマット
98
+ var endDate = new Date(day);
99
+ endDate.setHours(endTime.getHours())
100
+ endDate.setMinutes(endTime.getMinutes());
101
+ // 予定を作成
102
+ calender.createEvent(
103
+ title,
104
+ startDate,
105
+ endDate,
106
+ options
107
+ );
108
+ }
109
+
110
+ //無事に予定が作成されたら「済」にする
111
+ sheet.getRange(topRow + i, 2).setValue("済");
112
+
113
+ // エラーの場合(今回はログ出力のみ)
114
+ } catch(e) {
115
+ Logger.log(e);
116
+ }
117
+
118
+ }
119
+ // ブラウザへ完了通知
120
+ Browser.msgBox("完了");
121
+ }
55
122
  ```

5

修正

2022/02/21 22:45

投稿

退会済みユーザー
test CHANGED
@@ -43,9 +43,13 @@
43
43
 
44
44
  //予定の一覧を取得
45
45
  var contents = sheet.getRange(topRow, 1, sheet.getLastRow(), lastCol).getValues();
46
+ // var calender = CalendarApp.getCalendarById(gAccount); //削除
47
+
48
+ //順に予定を作成(今回は正しい値が来ることを想定)
49
+ for (i = 0; i <= lastRow - topRow; i++) {
46
50
 
47
- // googleカレンダーの取得
51
+ // googleカレンダーの取得
48
- + let CalendarName = contents[i][calnameNum]; //設定するカレンダー名
52
+ + let CalendarName = contents[i][calnameNum]; //設定するカレンダー名
49
- + let calender = CalendarApp.getCalendarsByName(CalendarName)[0];
53
+ + let calender = CalendarApp.getCalendarsByName(CalendarName)[0];
50
54
  (以下略)
51
55
  ```

4

後続のコードが誤った綴りのため、エラーにならないように綴りを元に戻す

2022/02/21 12:50

投稿

退会済みユーザー
test CHANGED
@@ -46,6 +46,6 @@
46
46
 
47
47
  // googleカレンダーの取得
48
48
  + let CalendarName = contents[i][calnameNum]; //設定するカレンダー名
49
- + let calendar = CalendarApp.getCalendarsByName(CalendarName)[0];
49
+ + let calender = CalendarApp.getCalendarsByName(CalendarName)[0];
50
50
  (以下略)
51
51
  ```

3

念のため追加した分だけでも正しい綴りに修正

2022/02/21 12:49

投稿

退会済みユーザー
test CHANGED
@@ -45,7 +45,7 @@
45
45
  var contents = sheet.getRange(topRow, 1, sheet.getLastRow(), lastCol).getValues();
46
46
 
47
47
  // googleカレンダーの取得
48
- + let CalenderName = contents[i][calnameNum]; //設定するカレンダー名
48
+ + let CalendarName = contents[i][calnameNum]; //設定するカレンダー名
49
- + let calender = CalendarApp.getCalendarsByName(CalenderName)[0];
49
+ + let calendar = CalendarApp.getCalendarsByName(CalendarName)[0];
50
50
  (以下略)
51
51
  ```

2

 

2022/02/21 12:45

投稿

退会済みユーザー
test CHANGED
@@ -1,4 +1,4 @@
1
- カレンダー名カレンダーを取得する場合、[CalendarApp.getCalendarsByName](https://developers.google.com/apps-script/reference/calendar/calendar-app#getcalendarsbynamename)
1
+ カレンダー名を指定してカレンダーを取得する場合、[CalendarApp.getCalendarsByName](https://developers.google.com/apps-script/reference/calendar/calendar-app#getcalendarsbynamename)
2
2
  を使用します。
3
3
 
4
4
  例:「テストカレンダー」という名前のカレンダーを取得する場合

1

 

2022/02/21 12:45

投稿

退会済みユーザー
test CHANGED
@@ -26,7 +26,7 @@
26
26
  const lastCol = 9;
27
27
 
28
28
  // 0始まりで列を指定しておく
29
- +const calnameNum = 0; // 追加(1列目にカレンダー名を入力しているという想定)
29
+ + const calnameNum = 0; // 追加(1列目にカレンダー名を入力しているという想定)
30
30
  const statusCellNum = 1;
31
31
  const dayCellNum = 2;
32
32
  const startCellNum = 4;