スクリプトを使用してGoogleスプレッドシートのGoogleフォームからの回答を編集するために使用されるURLを表示する


11

Googleフォームの編集URLを、添付されている応答Googleシートに自動的に入力しようとしています。私はこれを既に見ので使いたいのですが、スクリプトをどこに置くべきか正確に理解しようとして問題があります。

URLを表示したいGoogleスプレッドシートのスクリプトエディターに配置しようとしましたが、そこからどこに行くべきかわかりません。スクリプトエディターで、アドオンとしてテストしてみましたが、うまくいきませんでした。

Googleスプレッドシートのスクリプトとスクリプトエディタの使用経験はほとんどありません。最後に、同じGoogleスプレッドシートでAutoCratという別のアドオンを使用しています。


コードのソースへのリンクに加えて、コードとテストを実行するために実行した手順を含めることをお勧めします。
ルベン・

回答:


16

短い答え

リンク 2つの答えを持っているQ&Aのポイントが、それら以外のappropiateであることを私には見えます。IEのいずれかの回答のコードは不完全であり、どちらもメールを送信するため、導入は複雑すぎて開始点として使用できません。

以下は、より簡単に採用できるスクリプトです。

指示

  1. テストフォームを作成し、フォームID(URL 間../d//editURL内)をメモします新しいフォーム

  2. 新しいスプレッドシートに応答を送信するようにフォームを設定します。 スプレッドシートを接続する

  3. 新しいスプレッドシートにリダイレクトされます。アクティブなシート名をメモし(必要に応じて名前を変更)、応答編集URLを保持するために使用するヘッダーを列に追加しますEdit Url。注:大文字と小文字は非常に重要なので、どのように書くかには十分注意してください。 回答スプレッドシート

  4. に移動しTools > Script editorて、スプレッドシートにバインドされたGoogle Apps Scriptプロジェクトを追加します。 スプレッドシートスクリプト

  5. デフォルトのコードを以下のコードに置き換えます(必要に応じて、グローバル変数を編集してください)。 スクリプトコード

  6. プロジェクトを保存して、インストール可能なフォームサミットトリガーを追加します([承認が必要]ダイアログが表示された場合は、[権限の確認]をクリックしてから[許可]をクリックします)。 フォーム送信トリガー

  7. ソリューションをテストするためにいくつかのサンプル応答を送信します。

コード

/*
 * Global Variables
 */

// Form URL
var formURL = 'https://docs.google.com/forms/d/form-id/viewform';
// Sheet name used as destination of the form responses
var sheetName = 'Form Responses 1';
/*
 * Name of the column to be used to hold the response edit URLs 
 * It should match exactly the header of the related column, 
 * otherwise it will do nothing.
 */
var columnName = 'Edit Url' ;
// Responses starting row
var startRow = 2;

function getEditResponseUrls(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues(); 
  var columnIndex = headers[0].indexOf(columnName);
  var data = sheet.getDataRange().getValues();
  var form = FormApp.openByUrl(formURL);
  for(var i = startRow-1; i < data.length; i++) {
    if(data[i][0] != '' && data[i][columnIndex] == '') {
      var timestamp = data[i][0];
      var formSubmitted = form.getResponses(timestamp);
      if(formSubmitted.length < 1) continue;
      var editResponseUrl = formSubmitted[0].getEditResponseUrl();
      sheet.getRange(i+1, columnIndex+1).setValue(editResponseUrl);
    }
  }
}

追加のリソース

質疑応答の内容で要旨を作成しました。このb / c私は、コードを作成するエンドユーザー間でのコラボレーションを改善する方法を模索しています。


1
わかりました。シート名で、URLの最後にある「/ viewform」を取り出しました。本当にありがとう!
ニック

1
@Rubén-私は自分でフォローしたときにいくつかの手順に苦労していたので、私は自由にあなたの素晴らしいチュートリアルにもう少し詳細を追加しました。
Sphinxxx 2017

1
OK。コードを変更した主な理由は、将来GoogleのURL形式が変更された場合FormApp.openById()FormApp.openByUrl()備えて、URL全体ではなくフォームIDのみで使用できることを示すためでした。代わりに、要点にコメントを残しておきます。
Sphinxxx

3
私のグーグルスクリプトウィンドウでは、「現在のプロジェクトのトリガー」が「編集」の下にありました。
dvb

1
@HoangTrinh参照canEditResponse()
ルベン・
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.