【GAS】一つのスプレッドシートに動的にgoogleフォームを紐づける方法_週報230328
結論:フォームID=フォームのファイルIDを利用する
removeDestination()の対象はフォームファイルだけど、フォームファイルのIDとフォームIDは同じなのでファイルIDを対象に取っても動く。
old_form = file.getId();
old_form.removeDestination();
よくあるコード書きブログでは下のようにフォームオブジェクトでIDを取得してからremoveDestinationやってるけど(というかそれ以外のことをやりたい場合のほうがない)、内部的な値としてはフォームIDもフォームのファイルIDも同じものっぽいから悪用する。
form.getId();
どうして俺はこんな無駄な時間を…
googleフォーム便利ですよね。
スプレッドシートの連携もできるので、スプレッドシートにGASを仕込んじゃえば色々データ弄れて、最高ですよね。
そしてスプレッドシートは自分で書いたhtmlも使えるので社内で使うくらいの自作アプリだったらサクッとコピペで作って完成ですよね。最高だ。
本当に限定的な用途ですが、「こんなんできるなら先に言っといてよおお」と思ったので覚書程度にメモを残しておこうと思います。普段は日記書いてるのにこんな実用的な記事があるなんて、いったい何を目指しているんだ。
こんな人向け:日次報告を毎日新しいフォームを作りたいけど集計は一つのスプレッドシートにしたい
日次報告用に毎日自動でgoogleフォームを作ってくれるスクリプトはある!
googleフォーム便利だし、html書かなくていいし、最高じゃん!
あとはこいつを自動でスプレッドシートに紐づけるようにして、っと
オイイイイイ!スプレッドシートにはフォームは一つしか紐づけられねえよ!
スプレッドシートに新しいフォームを紐づけるときは、スプレッドシートの紐付けを削除してから紐付けろ!!
と、googleに怒られてしまった人、いませんか。
そしてgoogleの公式リファレンスを見ると
「スプレッドシートはhtmlに対応してるんで!みんなもいっぱいコード書いて共有してgoogleワークスペースをもっと便利にしようね!」
って言われます。
めんどくせえええ。googleフォーム便利だし、毎日自動でフォーム作ってくれるスクリプトも書いちゃったし、html紐付けたりとかやったことないしそもそもhtml書くの色々めんどくせえええええ。そもそもそんなに力入れるようなもんでもないんだからちゃちゃっと終わらせてえんだよこっちはよお。なんとかgoogleフォームでうまいことできないですか????
できます
googleワークスペースの仕様を悪用すると出来ました。
フォームを作成する
フォームのファイルの場所を特定するか、指定して、フォームファイルのある場所をgasに書き込む
ファイルに対してgetId()でIDを取得
3で取得したIDはフォームオブジェクトとして使えるのでremoveDestination()をかけてスプシとフォームの連携を削除
連携を解除したら今日のフォームをスプシに連携させる
googleワークスペースマジ感謝。これを毎日勝手にやってくれるようにトリガーくんで完成や!
フォームIDとファイルIDがおんなじで、フォームオブジェクトのような振る舞いをしてくれるのでなんか色々と悪用できそうですが、そこまでやるようなもんでもない気がする。というかここまで辿り着くのに丸一日かかってるから。拡張性とか保守性とか考えたらもっとやる気出してhtml書こうね。まあ今回はこれで動いたからこれでええねん!googleワークスペース最強!ワークスペースを利用することによるコードの可用性を重視!以上!