質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

1回答

3313閲覧

Googleフォームの回答に初期値をセットしたい

namunamunamu

総合スコア0

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

1クリップ

投稿2021/11/24 05:33

前提・実現したいこと

Googleフォームでアンケートを作成し、ログインしたアカウントによって、
昨年度のデータを回答欄にあらかじめ初期値としてセットしておきたいです。

以下の2通りを試してみましたがうまく出来ません。

1.GASで回答に値をセット。
どの関数を使用すればいいのでしょうか?
プルダウンの場合は、asListItem().setChoiceValues(); で出来たのですが、
text の場合の関数がわかりません。

2.フォームのURLで値をセットする方法。
~viewform?entry.1029177053=てすと のように固定の文字をセットできるのですが、
スプレッドシートのセルの値をセットする方法がわかりません。
viewform?entry.1029177053= "&A2&" では駄目でした。

発生している問題・エラーメッセージ

1.Exception: Unexpected error while getting the method or property openById on object SpreadsheetApp.
getList
@

2.値がセットされません

該当のソースコード

function getList() {

//スプレッドシートからプルダウンリストに設定する値を取得
let = SpreadsheetApp.openById('1mfXyDHu-8EdKmRhG18xvxvYzcl7LJ1g2c');
let sh = ss.getSheetByName('リスト');
let list = sh.getRange(2,3,4,1).getValues();

//フォームIDを取得
let formid = '1tgql373fQ5c0tOftwZndBnXr4sEIk';
//フォームの値を取得
let form = FormApp.openById(formid);

// メールアドレスを取得し、idを設定
let mail = Session.getActiveUser().getUserLoginId();
let id = mail.slice(0,8);

sh.getRange(2,1).setValue(id);

// 質問項目をすべて取得
let items = form.getItems();

let item1 = items[0];
let item2 = items[1];

//メールアドレスから取り出した id を質問1にセット
item1.astextitem().setChoiceValues(id);

//プルダウンリストに値をセット
item2.asListItem().setChoiceValues(list);

}

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

1.Exception: Unexpected error while getting the method or property openById on object SpreadsheetApp.

このエラーは、指定したスプレッドシートIDが存在しない、またはスプレッドシートが削除されているときに表示されます。
正しい(存在する)スプレッドシートIDが指定されているか、再確認してください。

2.フォームのURLで値をセットする方法。
~viewform?entry.1029177053=てすと のように固定の文字をセットできるのですが、スプレッドシートのセルの値をセットする方法がわかりません。
viewform?entry.1029177053= "&A2&" では駄目でした。

最終的なフォームURLの中のentryには、固定値しか入れられません。

(クリックさせる最終的なフォームURLの中に、特定のスプレッドシートの特定のセルの値を読み込む操作コマンドのようなものを入れることはできません)

また、ListItemは質問文記載のように、スクリプト内で動的に選択肢を設定できますが、
TextItemはスクリプト内で動的に値を設定することはできません。

したがって、フォームURLを表示するページをクッションとして置いておき
取得したログイン情報(おそらくgmailアカウントのメールアドレス?)に応じて、
そのページ内のフォームURLのentryの値を変更する、という方法になります。

投稿2021/11/24 11:45

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

namunamunamu

2021/11/29 04:57

ありがとうございます。 回答に動的に値を設定は出来ないのですね。 スクリプト内で、ログイン情報に応じてURLを作成し、自動で開けたらと思いましたがそれも無理ということですよね? やはりWebページを介さないとならないのでしょうか?
退会済みユーザー

退会済みユーザー

2021/11/29 11:55 編集

> スクリプト内で、ログイン情報に応じてURLを作成し、自動で開ける →少なくとも私の知る限りそのようなことはできません。 https://stackoverflow.com/questions/21737682/how-to-open-a-url-link-from-javascript-inside-a-google-apps-script-html-google-s また、スプレッドシートのスクリプトで、「自動で他のページにジャンプするダイアログを仕込んでおく」というテクニックをよく見かけますが、 仮にスプレッドシートのonOpen内に、自動でページをジャンプするダイアログを表示するコードを仕込んでも、 スプレッドシートを開いてonOpenが自動実行される際に、ユーザーインターフェースへのコンテキストがなくGetUiに失敗し、エラーになります。 (この場合、図形やカスタムメニュー等、スプレッドシートのUI要素に当該スクリプトの実行を割り当てる必要があります。 つまり、ユーザーがスプレッドシートを開いた後、用意された図形やメニューをクリックする必要があるということになり、質問者さんの「スクリプト内でURLを生成し自動でページを開く」という動作には該当しません) ---- また、GASのテンプレートを利用したWebアプリ(Webページ)を介するにしても、下記のようなデメリットがあります。  ・GASのWebアプリをモバイルのwebブラウザで表示しようとすると、権限エラーで開けない場合が多々ある。  ・仮に、URLの組み立てに必要なデータをデータ用のスプレッドシートから作成する場合、各ユーザーはアクセス初回時、スプレッドシート読み取りのための承認ダイアログを操作する必要がある。   別解としては、 1.GASとは別のサービスでアクセス用の共通ページを作る(Googleアカウントでログインさせ、ログイン情報をもとにそのサービス内でアカウント毎のGoogleフォームのURLを構築し、そのURLに自動遷移させる) 2.共通アクセスページへアクセスさせるのは諦めて、各ユーザーごとにパラメータを変えたフォームURLをあらかじめ作っておき、各ユーザーのメールアドレス宛にそのURLを送信する といった方法になると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問