LoginSignup
terasima712
@terasima712 (ゆき 寺島)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

getItemResponsesが動作しない

GASにおいて、Google スプレッドシートからGoogle Formを作成し、その回答をまたスプレッドシートに書き込むようなコードを書いています。
その中で、Googleスプレッドシートに書かれているGoogle formのURLから回答を取得するコードを書いています。

発生している問題・エラー

TypeError: formResponses.getItemResponses is not a function
Writetosp	@ write_in_sp_from_res.gs:29

該当するソースコード



//回答があった時に実行されるトリガーにしたい
function Writetosp() {
  // quizからURLをもらってその回答をまとめる
  const sheet = SpreadsheetApp.openByUrl('スプレッドシートのURL')
  .getSheetByName('シート1');

  var rowIndex = sheet.getLastRow();
  const form_ans_url = sheet.getRange(rowIndex, 3);
  Logger.log(form_ans_url.isBlank());

  //最後の行の3つ目のデータ(edit用のGoogleformURL)があったら動く
  if(!(form_ans_url.isBlank())){

    //最後の行の2つ目のデータ(URL)を取得
    var form_edit_URL = sheet.getRange(rowIndex, 3).getValue();
    // Sheetオブジェクト.getRange(行番号, 列番号, 行数, 列数)
    Logger.log(form_edit_URL);

    //google formを開く
    const form = FormApp.openByUrl(form_edit_URL);

    // フォームの回答を取得
    var formResponses = form.getResponses();
    Logger.log(formResponses);
    var answer = formResponses.getItemResponses();

    // スプレッドシートに書き込むデータ
    const data = {
      この画像に点数を0から9で付けてください: "",
    };

    // 回答内容を取得
    for (let i = 0; i < answer.length; i++) {
      const title = answer[i].getItem().getTitle();

      // 必要であれば、シートに書き込むデータを加工
      data[title] = answer[i].getResponse();
    }


    // 指定したシートに回答内容を書き込む
    sheet.getRange(sheet2.getLastRow(),4).setValue(data);
  }
}

途中のLogger.logでURLが正しく送られているかと、formResponsesの型を確認しています。

トリガーの再設定もしました。
プロジェクトの OAuth スコープは https://www.googleapis.com/auth/forms.currentonly
https://www.googleapis.com/auth/forms
https://www.googleapis.com/auth/spreadsheets
の三つです。

0

1Answer

This answer has been deleted for violation of our Terms of Service.

Your answer might help someone💌