GoogleスプレッドシートからGoogleフォームの回答を入力します
-
21-12-2019 - |
質問
私はこのウェブサイトから拾ったアイテムを使ってGoogleのフォームに移入することを試みています(そして私がこのウェブサイトから拾ったアイテムを使ってGoogleスプレッドシートとMogsdad
-
Logger.log(URL)スプレッドシートに格納されているすべてのデータのURLをログに記録します。最後のエントリをログに記録してこれを使用してURLを生成することはできますか?
-
事前記入されたURLがデータで入力されたら、プリフィルムのURLが可能ですか?私はこの役に立つ記事を見つけましたこれはこれができることを示唆していますか?
-
Googleスプレッドシートに格納されているデータは、他のGoogleフォームからキャプチャされたデータです。これは、すべてのセルをデータを1つにマージするための連結式を持つExcel(インターネット接続の欠如)を使用する必要があるためです。これは次にこのスクリプトをこのスクリプトを搭載しています。列によるデータは、質問に答える準備ができています。これは、提出が行われたときに自動提出に必要なトリガーに影響を与えますか?
これについての理解を深めることを私は追加することができますので、これがやややりやすいようです!
解決
最後のエントリを記録してこれを使用してURLを生成することは可能ですか?
ここであなたに従うわけではありません - その他の答えでは、Logger.log()
ステートメントはそれを配布したいのであれば、正しいURLを生成できることを実証しました。ログに記録する代わりに、変数url
の内容を使用するだけです。
しかし、これがあなたの道を少し離れていると思いますので、進みましょう。
データがデータに一度入力されたら、プリフィルプのURLを自動送信するのは可能ですか?
より良い開始点があります。 は、スプレッドシートからGoogleフォームに情報を送信することができますか? SURE! フォームを開くためのアプリのスクリプトを使用する選択を選択してください。それはあなたが投稿する "URLのトリック"にあるものよりも仕事をするためのより信頼性の高い方法です。
「自動提出」の場合、またはフォームの提出をシミュレーションする場合は、まったく記入されたURLについて心配する必要はありません。それは厄介な人間の近道です。希望するものは、代わりにpayload
要求のためにPOST
をまとめて、コンピュータがフォームUIを完全にバイパスさせることです。
Excelについて...この影響は、提出が行われたときに自動提出に必要なトリガーに影響を与えますか?
(好きな音...)あなたはForm1を使用してSpreadSheet1にデータを取得してから、機械1の(人間?)Form1の提出を行うことでForm1の(人間の?)提出を期待しています。 >
ええ、列分割が行われる前に列分割が行われるように注意する必要があります。
私はあなたがForm1から受信した文字列を分割するスプレッドシート1のフォーム送信トリガー機能を扱うことをお勧めします。それから直ちにPOSTをForm2に送信します。その後、このアクションが発生したという事実を記録しました。 a>。
他のヒント
- データが入力されたら、プリフィルURLを自動送信するのは可能ですか?私はこの役に立つ記事を見つけましたこれはこれができることを示唆していますか?
Mogsdadとして
より良い開始点があります。スプレッドシートからGoogleフォームに情報を送信することができますか?承知しました!
アプリスクリプトを使用してフォームを開き、選択を作成し、ペイロード/ POSTメソッドは廃止されました。代替手段はフォームAppサービスを使用することです。以下は、IFILBETTERBUILURLS 1 mogsdad 登録されたURLの作成の代わりに応答を送信し、スタンドアロンのGoogleスクリプトプロジェクトファイルで使用されます。
変更された元のコード行はコメントアウトされています。水平スクロールバーを避けるためにいくつかのブレークラインを挿入しました。
/**
* Use Form API to populate form
*
* Addapted from https://stackoverflow.com/a/26395487/1677912
*/
function populateFormResponses() {
//var ss = SpreadsheetApp.getActive();
var id = '11KDxp1C6jAZaTMNlGHke8zEzQ7aZrFSFGABdwUHEV80';
var ss = SpreadsheetApp.openById(id);
var sheet = ss.getSheetByName("Form Responses 1");
var data = ss.getDataRange().getValues(); // Data for pre-fill
var headers = data[0]; // Sheet headers == form titles (questions)
var formUrl = ss.getFormUrl(); // Use form attached to sheet
var form = FormApp.openByUrl(formUrl);
var items = form.getItems();
//var urlCol = headers.indexOf("Prefilled URL"); // If there is a column labeled this
// way, we'll update it
// Skip headers, then build URLs for each row in Sheet1.
for (var row = 1; row < data.length; row++ ) {
//Logger.log("Generating pre-filled URL from spreadsheet for row="+row);
Logger.log("Generating response from spreadsheet for row="+row);
// build a response from spreadsheet info.
var response = form.createResponse();
for (var i=0; i<items.length; i++) {
var ques = items[i].getTitle(); // Get text of question for item
var quesCol = headers.indexOf(ques); // Get col index that contains this
// question
var resp = ques ? data[row][quesCol] : "";
var type = items[i].getType().toString();
Logger.log("Question='"+ques+"', resp='"+resp+"' type:"+type);
// Need to treat every type of answer as its specific type.
switch (items[i].getType()) {
case FormApp.ItemType.TEXT:
var item = items[i].asTextItem();
break;
case FormApp.ItemType.PARAGRAPH_TEXT:
item = items[i].asParagraphTextItem();
break;
case FormApp.ItemType.LIST:
item = items[i].asListItem();
break;
case FormApp.ItemType.MULTIPLE_CHOICE:
item = items[i].asMultipleChoiceItem();
break;
case FormApp.ItemType.CHECKBOX:
item = items[i].asCheckboxItem();
// In a form submission event, resp is an array, containing CSV strings. Join
// into 1 string.
// In spreadsheet, just CSV string. Convert to array of separate choices, ready
// for createResponse().
if (typeof resp !== 'string')
resp = resp.join(','); // Convert array to CSV
resp = resp.split(/ *, */); // Convert CSV to array
break;
case FormApp.ItemType.DATE:
item = items[i].asDateItem();
resp = new Date( resp );
break;
case FormApp.ItemType.DATETIME:
item = items[i].asDateTimeItem();
resp = new Date( resp );
break;
default:
item = null; // Not handling DURATION, GRID, IMAGE, PAGE_BREAK, SCALE,
// SECTION_HEADER, TIME
break;
}
// Add this answer to our pre-filled URL
if (item) {
var respItem = item.createResponse(resp);
response.withItemResponse(respItem);
}
// else if we have any other type of response, we'll skip it
else Logger.log("Skipping i="+i+", question="+ques+" type:"+type);
}
// Submit response
response.submit();
// Generate the pre-filled URL for this row
//var editResponseUrl = response.toPrefilledUrl();
// If there is a "Prefilled URL" column, update it
//if (urlCol >= 0) {
// var urlRange = sheet.getRange(row+1,urlCol+1).setValue(editResponseUrl);
//}
}
};
.