LoginSignup
tanakaQiita
@tanakaQiita

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

【GAS】googleフォームに入力した内容の一部を、特定のシートの一部に反映させたいのですが、どこが間違えているか分かりますでしょうか?

解決したいこと

googleフォームに入力した内容の一部を、特定のシートの一部に反映させたいのですが、
上手く反映されません。
以下のプログラムのどこが間違ているか分かる方はいらっしゃいますでしょうか?
単純なミスのような気がするのですが、どこが間違えているか分からずに困っております。
よろしくお願いします。

★反映させたい内容:
googleフォームの1番目の質問の回答を、
スプレッドシートの「シート2」のA1部分に反映させたい。
また、メッセージボックスにも、同様の内容を反映させたい。

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

特にエラーは表示されないのですが、シートにもメッセージボックスにも、回答した内容が反映されません。

該当するソースコード


function submitForm() {

let formId = 'googleフォームのキーを記載';
var a = FormApp.openById(formId);

var itemResponses = a.response.getItemResponses();

var indexNum = itemResponses[0].getItem().getIndex();

var ss = SpreadsheetApp.openById("スプレッドシートキーを記載");

var sheet = ss.getSheetByName("シート2");

sheet.getRange("A1").setValue(indexNum);

Browser.msgBox(indexNum);

}

0

1Answer

使ったことないのですが,公式ドキュメントを読む限り,

- var itemResponses = a.response.getItemResponses();
+ var itemResponses = a.getResponses()[0].getItemResponses();

ではないのですか?
FormApp.openById(formId)aに代入したオブジェクトはFormですが,これにresponseというメソッド1なさそうです.代わりにgetResponses()ならありますので,これを利用します.また,getResponses()FormResponseの配列を返していますので,そこから各アイテムを抜き出すために上のように書き直すのだと思いました.

こちらでも試してみましたが,a.responsenullでした.

特にエラーは表示されないのですが

とのことですが,エラーは出ているはずです.a.responseすなわちnullにはgetItemResponses()は存在しませんので,TypeErrorが出るはずです.もし本当にエラーが出ていないのであれば,ここ以外に原因があるため,情報不足で解決案を提案できません.

また,上記コードでは1つしかアイテムを取得できていないので,全て取得したいのであれば次のコードが参考になりそうです.

ネット上のウンコードを信頼して書き写すより,公式ドキュメントを読んで書くことをお勧めします.


  1. もはやメソッドの書き方(カッコで終わるやつ)じゃなくて変数へのアクセスをするような書き方になっています...普通はここで異常に気づいてほしいところですね.もっと言うとGASを書いているときに出てくるコードヒント/補完に存在しないメソッドを記述していることに気づいてほしいです. 

0

Your answer might help someone💌