MENU

GASでGoogleフォームの事前入力URLを作る

当ページのリンクには広告(PR)が含まれていることがあります。
GASでGoogleフォームの事前入力URLを作る。毎回同じ入力、事前入力URL、開いた値を確認の処理例。

申請のたびに部署名を入力してもらう代わりに、値が入った状態のGoogleフォームを開くURLを用意できます。GASでは回答を送信せずにFormResponseを作り、toPrefilledUrlで事前入力URLを取得します。

事前入力は、その値を回答者が変更できないようにする機能ではありません。また、URLに値が含まれるため、住所や個人情報などを不用意に埋め込まないことが大切です。部署名の再入力を省く用途と、本人や部署を確定する用途を分けます。

目次

練習用の質問IDを確認する

練習用フォームに、記述式の質問「部署名」を1つ作ります。質問の名前だけで選ぶと、同じ名前の質問が増えた場合に対象を決められないため、質問IDで指定します。

最初にlistPracticeTextItemsを実行して、記述式質問のIDと名前を確認します。これは質問の一覧を読むだけで、フォームの項目や設定は変更しません。ログに出す質問名も練習用のものを使ってください。

公式のFormResponseでは、項目の回答を組み合わせ、事前入力URLを生成するメソッドが説明されています。文字列をURLへ自作で連結するより、対象の質問型に対応した回答を使う形です。

送信しない回答からURLを作る

FORM_IDとITEM_IDは作った練習用フォームと質問の値へ置き換えます。ITEM_IDの0は例の目印で、実際のIDが0とは限りません。

function listPracticeTextItems() {
  const form = FormApp.openById('練習用フォームID');
  console.log(JSON.stringify(form.getItems(FormApp.ItemType.TEXT)
    .map(item => ({id: item.getId(), title: item.getTitle()}))));
}

function buildDepartmentUrl(form, itemId, department) {
  if (!Number.isSafeInteger(itemId) || typeof department !== 'string' ||
      department.trim() === '') throw new Error('質問IDと部署名を確認してください');
  const item = form.getItemById(itemId);
  if (!item || item.getType() !== FormApp.ItemType.TEXT) {
    throw new Error('指定した記述式質問がありません');
  }
  const answer = item.asTextItem().createResponse(department);
  return form.createResponse().withItemResponse(answer).toPrefilledUrl();
}

function previewDepartmentUrl() {
  const FORM_ID = '練習用フォームID';
  const ITEM_ID = 0;
  console.log(buildDepartmentUrl(FormApp.openById(FORM_ID), ITEM_ID, '営業部'));
}

コードにsubmit()はありません。作ったURLを開き、指定した質問に「営業部」が入っているかを確認します。この段階でフォームの回答一覧へ新しい回答が増えていないことも見てください。回答者が実際に送信するまで、事前入力URLを作っただけの状態です。

質問の型と回答の検査

記述式の質問にはTextItemのcreateResponseを使っています。TextItem資料を基にした例です。選択式へ変えた質問を、記述式のまま扱うコードは使い回しません。

質問を削除して同じ名前で作り直すと、以前の質問IDとは別になります。URL作成でエラーになったときは、名前の表記だけを合わせるのではなく、現在のIDと型を確認します。入力規則がある場合は、埋め込む部署名がその条件を満たすかも試します。

フォームのアクセス範囲や回答の受付状態も別の条件です。URLが作れたことは、送り先の人が開けることを保証しません。実際に使う人と同じ条件のアカウントで開いて確かめます。

URLを配る前に確認する

事前入力された文字はURLをコピーした相手にも伝わる可能性があります。社内資料へ置いたURLを外へ転送してよいか、何を埋め込むかを決めます。部署名の事前入力だけで、回答者の所属確認が済んだとは判断しないようにします。

ローカルでは代用フォームで、質問IDと型の照合、空の部署名の拒否、回答の組み立て、submitを呼ばないことを確認しました。Google上のURL形式や表示、公開・回答受付設定は未実行です。

回答が送信された後の処理はフォーム回答の受付と転記、閲覧者や実行者の範囲はGASの権限と共有と分けて設計できます。

この記事を書いた人

Watanabeのアバター Watanabe サイト運営者

2020年よりブログ開始。
SEOが思いのほか性にあっていたようで現在に至る。
モットーは「勝率の高い選択をする」
AIは活用するが吉、最後は人間が息を吹き込む。
アートと科学を追求し、日々精進。
―――
収益:6~7桁をウゴウゴ。
サイト:ペラサイト~中規模サイトまで運営中。
案件:1000円以上の案件をメインに取組中。
打ち手:ブラックSEO~ホワイトSEOまで
―――

目次