見出し画像

Google フォームで日時を編集不可で表示させる方法

こんにちは @wezardnet です。Qiita アウトプットから note に移行して 1 年が経ちましたが、テーマが技術に限定されず自由に書けるので気楽です♫

さて、出退勤打刻を Google フォームで入力したいけど、日時を固定表示させたいという要件がありました。

Google フォームは、編集不可の項目は作れないし、フロント(JavaScript)で動的にラベル表示させることもできない… さてどうしたものか??
いろいろ悩んでいたところ、ある日に突然アイデアが閃きました 💡

まず Google フォームの編集画面で以下のように題名だけの項目を設置します。

画像1

次に Google Apps Script のプロジェクトを作り、以下のようにスクリプトを書きます。{フォームのID} の部分は対象の Google フォームの ID で置き換えてください。

function onTimerSetFormDate(e) {
	var form = FormApp.openById('{フォームのID}');
	var items = form.getItems();
	items[0].setTitle(Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd HH:mm'));
}

かんたんに解説をすると、対象フォームの質問項目を取得します。今回はめんどうなので、日時を表示する題名だけの項目を一番上に配置しておき、最初に取得した質問項目の題名に現在日時をセットするようにしてます。

次に時間主導型、分ベースのトリガー作ります。
フォームには日時を表示したいので 1 分おきに実行するようにしておきます。

FormDateDiplay - プロジェクトのトリガー - Apps Script 2020-09-10 19-59-35

こうすることで 1 分おきに自動的にフォームに日時がセットされるので、回答者側からはフォームに日時がラベル表示(編集不可)で見えるようになります。

画像4

要は動的にフォームを作るイメージですね。

経費精算-仕組み案① のコピー


ちなみにフォーム回答先のスプレッドシートには、回答項目でない、題名だけの項目は出力されず、以下のようになります。

実験用(回答) - Google スプレッドシート 2020-09-10 20-11-18


とりあえず、これで要件は満たせそうな気がします...


『何事に対しても “できる” という方向で考えないと、物事は進まないのである。“できる” という方向から攻めると、思わぬアイデアが生まれるものだ』 by 谷川浩司

この記事が気に入ったらサポートをしてみませんか?