2017-05-09 2 views
-1

Ich habe ein Feedback-Formular erstellt und möchte es in mehreren Tabellen öffnen und teilen. Ich habe eine überarbeitete Version des Codes in dem folgenden Post Single Google Form for multiple Sheets verwendet.Gemeinsame Nutzung desselben Google-Formulars für mehrere Tabellen

Das Formular wird wie erwartet als IFRAME geöffnet, erlaubt es mir (oder einem Benutzer) jedoch nicht, die Felder aufzufüllen und eine Antwort zu erstellen. Was vermisse ich?

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

Es wäre nützlich, den Teil des Codes zu teilen, den Sie zum Anzeigen des Formulars verwenden. –

+0

Ich habe den Code zum ursprünglichen Beitrag hinzugefügt. –

Antwort

0

Anstatt die Webseite und das Erzeugen der HTML-Inhalte zugreifen und serviert es wieder, Sie iframe-Tag mit src zu Ihrer URL für Sie tun können.

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); 
} 

vorgefüllter Form zu haben, in Ihrem Skript verwendet werden:
1) Holen Sie sich ein vorgefüllter Formulare, durch here
2) Für eine Form wie diese, die wie folgt vorgehen:

enter image description here die vorgefüllter uRL wird wie folgt aussehen:

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" 

ich habe die einzelnen Optionen getrennt, so dass es einfacher ist, mit einem Eintrag in der Form zu vergleichen. Um nun den Eintrag zu ändern, müssen Sie lediglich den Wert nach '=' für jeden Eintrag ändern. So ändern Sie den Namen, den Sie tun würden:

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

In ähnlicher Weise können Sie jede Eingabe ändern, indem Sie die URL ändern. Der folgende Code ändert den Eintrag für ein bestimmtes Formular, das ich gehostet habe. Sie müssen ändern, wenn nach Ihren Bedürfnissen

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); 
} 

Hoffentlich wird dies Sie in die richtige Richtung gestartet werden.

+0

Das funktioniert, vielen Dank; sehr geschätzt. Die einzige verbleibende Frage ist, wie bestimmte Felder vorab ausgefüllt werden sollen, wenn das Formular im IFRAME geöffnet wird, z. B. die E-Mail-Adresse des Benutzers, der die Antwort erstellt, ein Datumsfeld auf das aktuelle Datum und 3 vom Anrufer übergebene Parameter. –

+0

@MVega Aktualisiert die Antwort, um zu erklären, wie das Feld –

+0

vorab ausgefüllt wird, es funktioniert sehr gut. –

Verwandte Themen