GASでオーナーのはずのGoogle Formにpermissionがない
Q&A
Closed
GASでFormのオーナーなのにpermissionがない
GASにおいて、Google スプレッドシートからGoogle Formを作成し、その回答をまたスプレッドシートに書き込むようなコードを書いています。
発生している問題・エラー
Exception: No item with the given ID could be found. Possibly because you have not edited this item or you do not have permission to access it.
Writetosp()内のFormApp.openByUrlにおいて、「そのようなGoogle FormのURLは存在しないか権限がない」と言われます。Google FormはGASをもちいて生成したものですが、GASもGoogle Formもスプレッドシートもオーナーは私なのでアクセス権もあるはずです。
一列目に画像、二列目にGoogle FormのURL,三列目に回答を記載したいです。
以下はGASのスクリプトです。
GoogleFormに回答があった時にスプレッドシートに記入するコード
function Writetosp() {
// quizからURLをもらってその回答をまとめよう
const sheet = SpreadsheetApp.openByUrl('既存のスプレッドシートのURL')
.getSheetByName('シート1');
//最後の行の2つ目のデータ(URL)を取得
var rowIndex = sheet.getLastRow();
var formURL = sheet.getRange(rowIndex, 2).getValues();
// Sheetオブジェクト.getRange(行番号, 列番号, 行数, 列数)
//google formを開く
//[0][0]なのはformURLが二次元配列だから
const form = FormApp.openByUrl(formURL[0][0]);
// フォームの回答を取得
const answer = form.response.getItemResponses();
// 回答編集ページのURLを取得
const editUrl = form.response.getEditResponseUrl();
// スプレッドシートに書き込むデータ
// プロパティ名はフォームのタイトル名と合わせてください
// お好みでタイムスタンプをつけたり、回答編集ページのURLをつけたりもできます
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(sheet.getLastRow(),3).setValue(data);
}
GASを用いてGoogle Formを自動生成するコードも置いておきます。
スプレッドシートに編集があった際にGoogleFormを作成するコード
// トリガーはシートが編集されたときにしている
function createfashionimageFor_from_sp(){
//シートの読み取り
var sheet = SpreadsheetApp.openById('既存スプレッドシートのID')
.getSheetByName('シート1');
//最終行の1列目にある画像URLを取得
var rowIndex = sheet.getLastRow();
var colStartIndex = 1;
var rowNum = 1;
var img_array = sheet.getRange(rowIndex, colStartIndex, rowNum, 1).getValues();
// Sheetオブジェクト.getRange(行番号, 列番号, 行数, 列数)
var form =FormApp.create('GAS_from_sp');
for (var i in img_array){
img = UrlFetchApp.fetch(img_array[i])
form.addImageItem()
.setImage(img);
//画像は今後複数表示する可能性があるのでforで書いておく
}
form.addListItem()
.setTitle('この画像に点数を0から9で付けてください') //プルダウンリスト
.setChoiceValues([0,1,2,3,4,5,6,7,8,9])
.setRequired(true);
// 公開用URLを取得
var tmp = form.getPublishedUrl();
// スプレッドシートに書き込み_内容を書き込み
sheet.getRange(rowIndex,2).setValue(tmp);
}
自分で試したこと
プロパティからスコープなども確認しましたが、Formもspreadsheetもありました。
追記
なぜか唐突に治りました、、、。