アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。
google formsを使ってタスク依頼フォームを作成中なのですが、問題が発生しておりアドバイスをいただきたく質問いたしました。

作成中システムの仕様は以下の想定です。
①フォームを入力して送信
②スプレッドシートに記入内容を連携(ここでタスク管理も行う、ステータス等一部カラムは手動追加)
③依頼先のgoogleカレンダーに期日を設定する

ある程度作成は完了しましたが、以下問題が発生している状況です。
・カレンダーに時間がずれて設定されてしまう
 例)18:00と記入してフォーム送信すると18:37で設定されてしまう
・手動で追加したカラムがコードを書いても更新されない
 →下記コード部分でステータス、カレンダーIDの設定を実施していますが、スプレッドシート上に反映されない

カラムは以下の構成となります。
・フォームで作成しているカラム
 タスク名、依頼内容、依頼者、依頼先、優先度、納期(日付)、納期(時刻)、備考
・手動で追加しているカラム
 ステータス、カレンダーID

以下が現在書いているGASのコードです。
---------------------------------------------------------------------
function addTaskEvents() {
//カレンダーIDでカレンダーを取得
//現在は試作のため自分のIDのみ設定しているが、依頼先で設定した人物を対象にしたい
var myCal = CalendarApp.getCalendarById('自分のカレンダーID');

//シートを取得
var mySheet = SpreadsheetApp.openById('対象のシートID');

//シートデータを取得
var dat = mySheet.getDataRange().getValues();

for(var i=1;i<dat.length;i++) {
if(dat[i][10] == "") {
// 納期(日時)をセット
var evtDate = new Date(dat[i][4]);
var evtTime = new Date(dat[i][5]);
evtDate.setHours(evtTime.getHours());
evtDate.setMinutes(evtTime.getMinutes());

/* イベントの追加・スプレッドシートへの入力 */
//カレンダーにタスクをイベントとして追加
var myEvt = myCal.createEvent("【期限】"+dat[i][1],evtDate,evtDate);

//ステータス、イベントIDを更新
dat[i][10]="未着手";
dat[i][11]=myEvt.getId();
}
}
mySheet.getRange(1,1,i,11).setValues(dat);
}
---------------------------------------------------------------------
参照元は以下サイトになります。
https://tonari-it.com/gas-form-calendar-create-e …

初心者なもので、サイトの進め方をベースに一部改変しているため正しい書き方ができていないものと思っていますが、ご専門の方にご教授いただけますと幸いです。

A 回答 (1件)

カレンダーに時間がずれて設定されてしまう問題は、フォームから送信される時間がGMTになっているためです。

GMTから日本時間に変更するには、次のコードを追加してください。

```
var evtDate.setTimezone(new DateTimeZone('Asia/Tokyo'));
```

手動で追加したカラムがコードを書いても更新されない問題は、スプレッドシートの更新権限が正しく設定されていないためです。スプレッドシートの更新権限を「編集者」に変更してください。

手順は次のとおりです。

1. スプレッドシートを開きます。
2. 画面右上の歯車アイコンをクリックします。
3. 設定を選択します。
4. 共有と権限を選択します。
5. ユーザーまたはグループを追加を選択します。
6. ユーザー名またはメールアドレスを入力します。
7. 権限を編集者に変更します。
8. 保存をクリックします。

これで、手動で追加したカラムがコードを書いても更新されるようになります。
    • good
    • 0
この回答へのお礼

別の質問と合わせまして、ご回答ありがとうございます。

すみません。時間の件は何故か改善したようです。
念のためご教授いただいた内容も試しましたが、以下となりました。

>var evtDate.setTimezone(new DateTimeZone('Asia/Tokyo'));
こちら追加したところsyntax errorとなってしまいました。
調べてみると、既にappsscript.jsonではtimezone設定がされているようでした。

カラムの件ですが、フォーム作成時に併せてスプシを作成しているので私自身は編集者になっているかと存じます。
ご教授いただいた内容も(若干手順は異なりましたが)設定して再トライしたところ、やはりステータスやカレンダーIDはスプシに反映されませんでした・・・
但し、デバッグで確認するとカラムにデータ自体は入っているようでした。

上記が試した結果の共有となりますが、解決策に思い当たるところございましたら改めてご教授いただけますと幸いです。

お礼日時:2023/06/23 14:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!