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);
}
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
Ich denke, Sie könnten appendRow hier verwenden: 'userSheet.getRange (userSheet.getLastRow() + 1,1,1, lastRow [0] .length) .setValues (lastRow);' – Cooper
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