2017-05-09 18 views
-1

私は、フィードバックフォームを作成してから、それを開くと、複数のスプレッドシート間でそれを共有したいいます。私は、次の投稿Single Google Form for multiple Sheetsのコードの改訂版を使用しました。複数のスプレッドシート間で同じGoogleフォームを共有

フォームはIFRAMEとして期待として開きますが、私(または任意のユーザー)がフィールドに移入し、応答を作成することはできません。私は何が欠けていますか?

function onOpen() { 
 
    var ui = SpreadsheetApp.getUi(); 
 
    // Or DocumentApp or FormApp. 
 
    ui.createMenu('Data Architecture') 
 
     .addItem('Create File Note', 'menuItem1') 
 
     .addSeparator() 
 
     .addSubMenu(ui.createMenu('Feedback & Actions') 
 
      .addItem('Provide Feedback', 'provideFeedback') 
 
      .addItem('Create and Action', 'createAction'))   
 
     .addToUi(); 
 
} 
 

 
function provideFeedback() { 
 
    
 
    var documentName = SpreadsheetApp.getActive().getName(); 
 
    
 
    var dataentityName = SpreadsheetApp.getActiveRange().getCell(1, 1).getDisplayValue(); 
 
    
 
    launchForm(); 
 
    
 
    
 
} 
 

 
function createAction() { 
 
    
 
    var documentName = SpreadsheetApp.getActive().getName() 
 
    
 
    var documentID = SpreadsheetApp.getActive().getId() 
 
    
 
    var dataentityName = SpreadsheetApp.getActiveRange().getCell(1, 1).getDisplayValue() 
 
    
 
    launchForm(); 
 
    
 
} 
 

 
function launchForm(){ 
 

 
    var formID='1pmH3AWiMUczat5uIaZ5zaT--cmDjq9v3W9pePPjwGF0'; 
 
    var form = FormApp.openById(formID); 
 
    var formURL = form.getPublishedUrl(); 
 
    
 
    var response = UrlFetchApp.fetch(formURL); 
 
    var formHtml = response.getContentText(); 
 
    
 
    var htmlApp = HtmlService 
 
    .createHtmlOutput(formHtml) 
 
    .setSandboxMode(HtmlService.SandboxMode.IFRAME) 
 
    .setTitle('Feedback and action form') 
 
    .setWidth(800) 
 
    .setHeight(800); 
 
    
 
    SpreadsheetApp.getActiveSpreadsheet().show(htmlApp); 
 
}

+0

あなたのフォームを表示するために使用したコードの一部を共有することは有用であろう。 –

+0

元の投稿にコードを追加しました。 –

答えて

0

代わりのウェブページにアクセスし、HTMLコンテンツを生成して、もう一度それを提供する、あなたはあなたのためにそれを行うには、あなたのURLをSRCにiframeタグを使用することができます。

enter image description here プレフィルド:このような形のための手順
)を、以下のことで、
1)充填済みのフォームを取得します:

function launchForm(){ 

    var formID='1pmH3AWiMUczat5uIaZ5zaT--cmDjq9v3W9pePPjwGF0'; 
    var form = FormApp.openById(formID); 
    var formURL = form.getPublishedUrl()+ "?embedded=true" 

    var htmlApp = HtmlService 
    .createHtmlOutput('<iframe src="'+formURL+'" width="500" height="400" frameborder="0" marginheight="0" marginwidth="0"> </iframe>') 
    .setTitle('Feedback and action form') 
    .setWidth(400) 
    .setHeight(400); 

    SpreadsheetApp.getActiveSpreadsheet().show(htmlApp); 
} 

プレフィルドフォームを持っているが、あなたのスクリプトで使用しますURLは次のようになります。

var formURL = "https://docs.google.com/forms/d/e/{Publish ID}/viewform? 
usp=pp_url& 
entry.1739076204=Jack+Brown& 
entry.1869878870=2017-05-12& 
entry.799903038=Incorrect& 
entry.1996064114=I+am+the+best& 
entry.607023772=Select+Me" 

フォームのエントリと比較するのが簡単になるように、個々のオプションを分けました。エントリを変更するには、各エントリの '='記号の後に値を変更するだけです。したがって、名前を変更するには、次のようにします。

var name = "Chuck Norris" 
entry.1739076204='+name+' 

同様に、URLを変更することでそれぞれの入力を変更できます。以下のコードは、私がホストしている特定のフォームのエントリを変更します。あなたのニーズに応じて修正する必要があります

function launchForm(){ 

    var publishedURl = "https://docs.google.com/forms/d/e/1FAIpQLSdsHM53jTWJ0Eqn8VSxE5bWHjnD9KXsVBrqLsBwtyJIIsjpnA/viewform" 
    var name = "Chuck Not Norris" 
    var dt = Utilities.formatDate(new Date(), "GMT-05:00", "yyyy-MM-dd") 
    var options1 = ["Correct","Incorrect"] 
    var options2 = "Chuck Norris is google Apps Scripts" 
    var options3 = ["Select Me","Don't select me"] 
    var preEditUrl = publishedURl + '?usp=pp_url&entry.1739076204='+name 
        +'&entry.1869878870='+dt 
        +'&entry.799903038='+options1[0] 
        +'&entry.1996064114='+options2 
        +'&entry.607023772='+options3[0] 

    var htmlApp = HtmlService 
    .createHtmlOutput('<iframe src="'+preEditUrl+'" width="500" height="400" frameborder="0" marginheight="0" marginwidth="0"> </iframe>') 
    .setTitle('Feedback and action form') 
    .setWidth(400) 
    .setHeight(400); 

    SpreadsheetApp.getActiveSpreadsheet().show(htmlApp); 
} 

うまくいけば、これはあなたが正しい方向に開始されることを望みます。

+0

これは動作します、ありがとうございます。とても有難い。唯一残った疑問は、フォームは、このような応答を作成するユーザーの電子メールアドレスとして、IFRAMEで開いたときに現在の日付に日付フィールドをデフォルト設定、特定のフィールドを事前移入、および呼び出し側から渡された3つのパラメータにする方法です。 –

+0

@MVegaはする方法を事前に取り込むフィールド、それは非常にうまく機能 –

+0

感謝を説明するための答えを更新しました。 –

関連する問題