2017-06-21 2 views
1

In Google Tabellen habe ich ein Skript, mit dem ich ein neues Blatt für jedes übermittelte Google Form-Formular erstelle. Es soll ein neues Blatt mit dem Namen basierend auf der letzten Spalte, Spalte G (die keine Formularübergabespalte ist) erstellen. Dann werden die Informationen aus der letzten Zeile und der Überschriftszeile übernommen und in die ersten beiden Zeilen des erstellten Arbeitsblatts kopiert. Es fügt auch Formeln zu Zellen hinzu, um die Informationen in Spalten zu bringen (Transponieren) und basierend auf einem erstellten Blatt zu formatieren.Erstellen eines neuen Blattes mit dem Namen basierend auf der Formularübergabe

Im Moment erstellt es das Blatt und kopiert die Formeln und das Format, aber nicht geben Sie ihm den richtigen Namen oder ziehen Sie die letzte Zeile Informationen.

Bitte helfen! ~ Charles

Ich habe den Code unten kopiert:

function onFormSubmit() { 
    // onFormSubmit 
    // get submitted data 
    var ss = SpreadsheetApp.openById(
    '...'); 
    var sheet = ss.getSheetByName("Responses"); 
    var headings = sheet.getRange(1,1,1, 
sheet.getLastColumn()).getValues(); 
    var lastRow = sheet.getRange(sheet.getLastRow(),1,1, 
sheet.getLastColumn()).getValues(); 
    var studentUsername = lastRow[0][6]; 
    // check if username has sheet 
    if(ss.getSheetByName(studentUsername)){ 
    var userSheet = ss.getSheetByName(studentUsername); 
    // if not make 
    } else { 
    var userSheet = ss.insertSheet(studentUsername); 
    userSheet.getRange(1,1,1, 
headings[0].length).setValues(headings); 
    } 
    // copy submitted data to user's sheet 
    userSheet.appendRow([lastRow]); 
    userSheet.appendRow(['=CONCATENATE(B6," ",B5)']); 
    userSheet.appendRow(['=TRANSPOSE(B1:2)']); 
    userSheet.hideRows(1,2); 
    userSheet.setColumnWidth(1, 500); 
    userSheet.setColumnWidth(2, 500); 
    var FormatSheet = ss.getSheetByName("Format"); 
    var FormatRange = FormatSheet.getRange("a3:b28"); 
    FormatRange.copyFormatToRange(userSheet,1,3,3,28); 
} 
+0

Ich glaube, Sie wäre besser, diese von ID zu öffnen. 'var ss = SpreadsheetApp.getActiveSpreadsheet();' Wird es Zeiten geben, in denen Sie Formular-Submits bekommen und das Spreadsheet nicht aktiv ist? – Cooper

+0

Ich denke, Sie könnten appendRow hier verwenden: 'userSheet.getRange (userSheet.getLastRow() + 1,1,1, lastRow [0] .length) .setValues ​​(lastRow);' – Cooper

+0

Ich denke, vielleicht diese 'userSheet.getRange (userSheet.getLastRow() + 1,1,1, lastRow [0] .length) .setValues ​​(lastRow); 'sollte dies sein' userSheet.getRange (userSheet.getLastRow() + 1,1,1, lastRow.length) .setValues ​​(lastRow); ' – Cooper

Antwort

1

Mit etwas Hilfe von den Kommentaren und Herumspielen, dachte ich den Code aus ich brauche. Vielen Dank an @Cooper!

Hier ist sie:

function onFormSubmit() { 
    // onFormSubmit 
    // get submitted data 
    var ss = SpreadsheetApp.openById(
    'Sheet_ID'); 
    var sheet = ss.getSheetByName("Responses"); 
    var row = sheet.getLastRow(); 
    var Col = sheet.getLastColumn(); 
    var headings = sheet.getRange(1,1,1, 
Col).getValues(); 
    var lastRow = sheet.getRange(row, 1, 1, Col); 
    var studentUsername = sheet.getRange(row, Col).getValue(); 
    // check if username has sheet 
    if(ss.getSheetByName(studentUsername)){ 
    var userSheet = ss.getSheetByName(studentUsername); 
    // if not make 
    } else { 
    var userSheet = ss.insertSheet(studentUsername); 
    userSheet.getRange(1,1,1, 
headings[0].length).setValues(headings); 
    } 
    // copy submitted data to user's sheet 
    userSheet.appendRow(lastRow.getValues()[0]); 
    userSheet.appendRow(['=CONCATENATE(B6," ",B5)']); 
    userSheet.appendRow(['=TRANSPOSE(B1:2)']); 
    userSheet.hideRows(1,2); 
    userSheet.setColumnWidth(1, 500); 
    userSheet.setColumnWidth(2, 500); 
    var FormatSheet = ss.getSheetByName("Format"); 
    var FormatRange = FormatSheet.getRange("a3:b28"); 
    FormatRange.copyFormatToRange(userSheet,1,3,3,28); 
} 
+0

Weg zu gehen Charles – Cooper

Verwandte Themen