ご訪問ありがとうございます。
Googleシートマスターのひろしです。
前回
Googleフォーム プルダウン(ドロップダウン)リストの項目をスプレッドシートから読み込んで追加する方法
今回は、とっても価値の高い方法をお伝えします。
これを知ることであなたは、
- スプレッドシートからGoogleフォームの複数のプルダウンの項目を変更する方法がわかります。
- プルダウンの項目を定期的に更新する方法がわかります。
なので、サクッとマスターして
と答えてあげてください。
ご質問
B列(プルダウン形式)とF列(プルダウン形式)の選択肢それぞれが共にプルダウン形式のためAddGFormItems_Listという関数を使用して設定することになるかと思うのですが、ITEMNAMEは1つしか設定できないようです。 トリガー設定はそれぞれ違う関数名で設定が必要かと思いました。 動的に更新されるようトリガー設定をB列は一ヶ月に一回1日の0~1時で設定したいです。 F列は毎分の更新頻度にしたいです。 プルダウン形式で設定したい項目が複数あり、それぞれが違う更新頻度の場合のGASスクリプトの変更箇所を教えて頂けましたら幸いです。
動画はこちら
シートはこちら
*クリックすることでシートが開きます。(コピーしてお使いください)
スクリプト
const FORM_ID = "★★フォームID★★" // ★フォームIDを入力
const SP_ID = '★★スプレッドシートID★★' //★スプレッドシートID
// 選択肢リストを追加 ===
const SH_NAME = "選択肢リスト" //★名前付き範囲のシート名
const ITEMNAME_F = '初回ご相談希望日時' //★② 項目のタイトル&名前付き範囲の名称
const ITEMNAME_B = 'ご利用希望月' //★② 項目のタイトル&名前付き範囲の名称
//③以下のいずれかを呼び出す
//AddGFormItems_List //プルダウン
//AddGFormItems_Check //チェックボックス
//AddGFormItems_Radio //ラジオボタン
const ITEM_LIST = 1
const ITEM_CHEKBOX = 2
const ITEM_RADIO = 3
//項目Bを追加する
function AddGFormItems_List_B() {
AddGoogleFormItems(ITEM_LIST, ITEMNAME_B)
}
//項目Fを追加する
function AddGFormItems_List_F() {
AddGoogleFormItems(ITEM_LIST, ITEMNAME_F)
}
function test() {
const itemName = ITEMNAME_F
let section = SpreadsheetApp.openById(SP_ID).getRangeByName(SH_NAME+'!'+itemName).getValues()
// let section = SpreadsheetApp.getActiveSpreadsheet().getRangeByName(itemName).getValues()
console.log(section)
// AddGoogleFormItems(ITEM_LIST,ITEMNAME_F)
}
// ラジオボタンの項目を追加する
function AddGFormItems_Radio() {
AddGoogleFormItems(ITEM_RADIO)
}
// プルダウンの項目を追加する
function AddGFormItems_List() {
AddGoogleFormItems(ITEM_LIST)
}
// チェックボックスの項目を追加する
function AddGFormItems_Check() {
AddGoogleFormItems(ITEM_CHEKBOX)
}
/**
* AddGoogleFormItems
* Googleフォームのプルダウンリスト、チェックボックス、リストボックスに項目を追加する
*
* @param {integer} itemkind 項目の種別
* @param {string} itemName - Googleformにおける項目の名前
* @return
* @customfunction
* */
function AddGoogleFormItems(itemkind, itemName) {
const form = FormApp.openById(FORM_ID)
const items = form.getItems()
let section = SpreadsheetApp.openById(SP_ID).getRangeByName(SH_NAME+'!'+itemName).getValues()
section = section.filter(v => v[0])
for (let i = 0; i < items.length; i++) {
const item = items[i]
// const itemName = item.getTitle()
const itemId = item.getId()
if (item.getTitle() == itemName) {
switch (itemkind) {
case ITEM_LIST:
console.log(section)
items[i].asListItem().setChoiceValues(section) //プルダウンメニュー
break
case ITEM_CHEKBOX:
items[i].asCheckboxItem().setChoiceValues(section) //チェックボックス
break
case ITEM_RADIO:
items[i].asMultipleChoiceItem().setChoiceValues(section) //ラジオボタン
break
}
}
}
}
ポイント
トリガーからは、getActiveSheet()が使用できないので
openById()を使用してスプレッドシートを取得します。
ところが、openById()でスプレッドシートを取得すると
getRangeByName()指定時にシート名が必要となります。
なので
ss.getRangeByName(SH_NAME + “!” + itemName).getValues()
こんな感じにする必要があります。
最後までご覧いただきありがとうございます。
つぎはこちら
Googleフォーム 選択項目の日付を自動的に切り替える方法
コメント