2017-01-16 2 views
0

ein Ich habe ein Skript eingerichtet, um vorhandene Antworten in mein Google Formular aus einem Google-Blatt einzufügen (indem Sie den Code aus this answer anpassen). Ich habe es in die Forms Scripts eingefügt und es funktioniert, wenn alle Felder im Sheet gefüllt sind. Die Art des Formular-Fragebogens ist jedoch so, dass bestimmte Abschnitte übersprungen werden können, so dass einige Felder im Blatt leer bleiben. Ich würde gerne ein solches Sheet einfügen, das einige seiner Antwortfelder leer lassen.So fügen Sie leere Felder beim Einfügen von Antworten aus Google Sheet in Formular

Das Skript funktioniert, wenn alle Felder im Sheet gefüllt sind, aber nicht, wenn es auf ein leeres Feld trifft (was bedeutet, dass die erste Zeile der Antworten, die ein leeres Feld enthält, die Ausführung des Skripts stoppt)).

Was ich gerne wissen würde ist, wie man meinem Skript erklärt, dass es nur leere Antworten akzeptieren und sie als solche einfügen soll? Hier

ist das Skript:

function ApendResponses() { 
    var form = FormApp.openById("1M-mTBlZPRj44jXs_YHj-cNa9yHjU25ItEWBuKtUvKZo"); 
    var sheet = SpreadsheetApp.openByUrl("https://ocs.google.com/spreadsheets/d/1Jc9NVlN-Wcmd87E-FnyocHgl5Vx2WXqOGPTkhvXjCFU/"); 
    var rows = sheet.getDataRange(); 
    var numRows = rows.getNumRows(); 
    var values = rows.getValues(); 

    for (var x = 0; x < values.length; x++) { 

    var formResponse = form.createResponse(); 
    var items = form.getItems(); 

    var row = values[x]; 

    var formItem = items[0.0].asTextItem(); 
    var response = formItem.createResponse(row[1]);  
    formResponse.withItemResponse(response); 

    var formItem = items[1.0].asTextItem(); 
    var response = formItem.createResponse(row[2]);  
    formResponse.withItemResponse(response); 

    var formItem = items[2.0].asListItem(); 
    var response = formItem.createResponse(row[3]);  
    formResponse.withItemResponse(response); 

    var formItem = items[3.0].asPageBreakItem();  
    formResponse.withItemResponse(response); 

    var formItem = items[4.0].asListItem(); 
    var response = formItem.createResponse(row[4]);  
    formResponse.withItemResponse(response); 

    var formItem = items[5.0].asPageBreakItem();  
    formResponse.withItemResponse(response); 

    var formItem = items[6.0].asListItem(); 
    var response = formItem.createResponse(row[5]);  
    formResponse.withItemResponse(response); 

    var formItem = items[7.0].asPageBreakItem();  
    formResponse.withItemResponse(response); 

    var formItem = items[8.0].asTextItem(); 
    var response = formItem.createResponse(row[6]);  
    formResponse.withItemResponse(response); 

    formResponse.submit(); 
    Utilities.sleep(500); 

    } 

}; 

Beispiel Form is here mit seinem accompanying Sheet here (I ein leeres Feld in der dritten Reihe zu Prüfzwecken links). Hier

Antwort

0

ist eine Lösung, die funktioniert:

function ApendResponses() { 
    var form = FormApp.openById("1M-mTBlZPRj44jXs_YHj-cNa9yHjU25ItEWBuKtUvKZo"); 
    var sheet = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1Jc9NVlN-Wcmd87E-FnyocHgl5Vx2WXqOGPTkhvXjCFU/"); 
    var rows = sheet.getDataRange(); 
    var numRows = rows.getNumRows(); 
    var values = rows.getValues(); 

    for (var x = 0; x < values.length; x++) { 

    var formResponse = form.createResponse(); 
    var items = form.getItems(); 

    var row = values[x]; 

    var formItem = items[0.0].asTextItem(); 
    if (!isempty(row[1])){ 
    var response = formItem.createResponse(row[1]); 
    formResponse.withItemResponse(response);} 

    var formItem = items[1.0].asTextItem(); 
    if (!isempty(row[2])){ 
    var response = formItem.createResponse(row[2]); 
    formResponse.withItemResponse(response);} 

    var formItem = items[2.0].asListItem(); 
    if (!isempty(row[3])){ 
    var response = formItem.createResponse(row[3]); 
    formResponse.withItemResponse(response);} 

    var formItem = items[3.0].asPageBreakItem();      
    formResponse.withItemResponse(response); 

    var formItem = items[4.0].asListItem(); 
    if (!isempty(row[4])){ 
    var response = formItem.createResponse(row[4]); 
    formResponse.withItemResponse(response);} 

    var formItem = items[5.0].asPageBreakItem(); 
    formResponse.withItemResponse(response); 

    var formItem = items[6.0].asListItem(); 
    if (!isempty(row[5])){ 
    var response = formItem.createResponse(row[5]); 
    formResponse.withItemResponse(response);} 

    var formItem = items[7.0].asPageBreakItem(); 
    formResponse.withItemResponse(response); 

    var formItem = items[8.0].asTextItem(); 
    if (!isempty(row[6])){ 
    var response = formItem.createResponse(row[6]); 
    formResponse.withItemResponse(response);} 

    formResponse.submit(); 
    Utilities.sleep(0.01); 

    } 

} 

function isempty(entry) { 
    if (entry == undefined) 
    { 
    return true; 
    } 

    if (entry == null){ 
    return true; 
    } 
    var tempstr = entry.toString(); 

    tempstr = tempstr.replace(/[\r\n\t\s]+$/,""); 
    tempstr = tempstr.replace(/^[\r\n\t\s]+/,""); 
    if (tempstr.length == 0){ 

    return true; 
    } else { 

    return false; 
    } 

} 

Diese Lösung hat zwei Probleme:

  1. Es hört nicht auf, das heißt, nachdem das Skript die letzte Zeile verarbeitet, hält sie auf Hinzufügen leere Zeilen. Dies kann leicht behoben werden: Das Skript muss gestoppt werden, nachdem die korrekte Anzahl an Antworten eingegeben wurde. Überzählige Antworten können einzeln aus dem Tab "Antworten" der Formulare gelöscht werden.

  2. Es gibt ein Zeitlimit von 6 Minuten beim Ausführen von Skripts. Daher kann dieses Skript nicht viele Antworten verarbeiten (definitiv nicht mehr als 500). Workarounds können durch besseres Scripting (Stopp, aufgezeichnete Antworten aufzeichnen, dann wieder von dort aus ausgeführt werden, bis der Job abgeschlossen ist) oder durch Aufteilen der Antworten in mehrere Blätter und nacheinander ausgeführt werden.

Source.

Verwandte Themen