Gフォームのコード.gsでどうにかする

回答数や回答期限の締め切りいれてどうにかこうにかはまあまあggるとあるんだけど
某初回無料の有料アドオン、フォームチョイスリミッターな機能をGTPに聞いてどうにかならんかした結果できたので書き残そうと思って久々note開いた

IDとかこれ何どこにコピペすんのとかはすっとばしますね

var form_id = 'Google フォームの ID'; // Google フォームの ID
var question_title = 'チェックボックス質問のタイトル'; // チェックボックス質問のタイトル
var sheet_id = 'スプレッドシートの ID'; // スプレッドシートの ID
var options_sheet_name = '選択肢を取得するシート名'; // 選択肢を取得するシート名
var responses_sheet_name = '回答済み項目を取得するシート名'; // 回答済み項目を取得するシート名

function change_pulldown_list() {
  var form = FormApp.openById(form_id);
  var target_item;
  var items = form.getItems();
  
  for (var i = 0; i < items.length; i++) {
    if (items[i].getTitle() === question_title) {
      target_item = items[i];
      break;
    }
  }
  if (!target_item) {
    return; // 質問が見つからない場合は終了
  }

  // スプレッドシートから全選択肢と回答済みの項目を取得
  var ss = SpreadsheetApp.openById(sheet_id);
  var options_sheet = ss.getSheetByName(options_sheet_name);
  var responses_sheet = ss.getSheetByName(responses_sheet_name);
  
  // 「選択肢を取得するシート名」シートの A 列から全選択肢を取得
  var last_option_row = options_sheet.getLastRow();
  var all_options = options_sheet.getRange(1, 1, last_option_row, 1).getDisplayValues().flat().map(option => option.trim()).filter(option => option);

  // 「回答済み項目を取得するシート名」シートの 列から回答済みの項目を取得
  var last_response_row = responses_sheet.getLastRow();
  var answered_raw = responses_sheet.getRange(2, 5, last_response_row - 1, 1).getDisplayValues().flat();

  // 回答済みデータを分割して一意なリストを作成
  var answered_options = [];
  answered_raw.forEach(answer => {
    if (answer) {
      answered_options = answered_options.concat(answer.split(',').map(item => item.trim()).filter(item => item));
    }
  });

  // 回答済みの項目を除いた未回答の選択肢リストを作成
  var available_options = all_options.filter(option => {
    return !answered_options.includes(option);
  });

  // チェックボックスの選択肢を未回答の項目で更新
  target_item.asCheckboxItem().setChoiceValues(available_options);
}

// フォーム送信時に選択肢の更新を実行
function trigger_submit(event) {
  // フォーム送信後に最新の選択肢リストでフォームを更新
  change_pulldown_list();
}

作ったフォームのチェックボックスに1つでもチェックが入ったら以降のフォームから消える感じのをやりたかったっていうかそれまんまアドオンていうね

  1. フォーム作る

  2. スプシ連携する

  3. スプシに足したシートにフォームに入れたチェックボックス回答を全部並べる

  4. それぞれ該当IDを埋めた上のコードをコード.gsにぶち込んで保存

  5. トリガーには「trigger_submit」でフォーム起動時・送信時に設定

  6. 試すときはフォームをふたつ開いて片方でチェック入れて回答したのち、ブラウザ上で残ってる別フォームの同回答をチェックしてみるとよいぞ(解決済み)

というわけだったんですよ
ggって似た情報探して真似たがうまくうごかんで、GTP君に全部任せてコード書いてもらったのでこれで本当にいいのかどうかはえんじにゃーからしたらハア?なのもあるかもわからんね

Gフォームで回答された選択肢を自動削除する
とが一番適正なタイトルかもしれないね

料金ケチられたわりにGTPでどうにかしろいわれたのでしたけどケチくせえーてのを言いたかっただけかもしれない
GTPだってやすかなかろ…まあでもこゆのを自分らじゃわからんから外注に頼んで見積もりとって実装してテストして…のが金も時間も回るから経済てか金を回すなら全うじゃない?と思うんだけどこういうとこで仕事の密度だか練度だかごんごんあがってるのに昔よりいろいろ安く使い倒されてることがほげらない?っていう結局のところ愚痴りたいだけってことよ

いいなと思ったら応援しよう!