При использовании «New Sheets» ограничение на размер составляет примерно 2 миллиона ячеек в электронной таблице (а не 4 миллиона строк). Справочник.
Пример создания новой электронной таблицы и установки ее в качестве места назначения формы приведен в Справочник по скриптам приложений Forms:
// Open a form by ID and create a new spreadsheet.
var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz');
var ss = SpreadsheetApp.create('Spreadsheet Name');
// Update the form's response destination.
form.setDestination(FormApp.DestinationType.SPREADSHEET, ss.getId());
Эта более сложная эволюция этого сценария может автоматически создавать новый файл, когда достигается некоторая заранее установленная цель (например, каждые 100 ответов), и генерировать новые имена файлов в соответствии с соглашениями об именах Google Form:
/**
* Check number of responses and switch to new destination if needed.
* Set up as a trigger function to run on Form submission.
*/
function checkResponseCount(e) {
var form = e.source;
var numResponses = form.getResponses().length;
// Start a new destination spreadsheet after each 100 responses
if (numResponses % 100 == 0) {
startNewDestinationSpreadsheet();
}
}
/**
* Google Form script to start a new spreadsheet in the user's "root"
* directory, for the form's responses.
*
* If no new name is provided, it will be automatically created based on the
* name of the current spreadsheet destination, by incrementing the counter
* in a standard destination name, e.g. "My Form (Responses 5)".
*
* @param {string} OPTIONAL New spreadsheet name.
*
* @returns {string} ID of new spreadsheet
*/
function startNewDestinationSpreadsheet(ssName) {
var form = FormApp.getActiveForm();
var curDest = DriveApp.getFileById(form.getDestinationId());
var curName = curDest.getName();
// Expect that current name is either in standard form (ENGLISH - adjust as needed)
// or that a new name has been provided as ssName.
if (!ssName || ssName === '') {
if (curName.search(/\(Responses.*\)/) == -1) {
ssName = curName+" (Responses 2)";
}
else if (curName.indexOf("(Responses)") !== -1) {
ssName = curName.replace("Responses","Responses 2");
}
else {
// Increment number
ssName = curName.replace(/(\d+)+/g, function(match, number) {
return parseInt(number)+1;
});
}
}
// Create new spreadsheet, and set as form destination
var newSheetId = SpreadsheetApp.create(ssName).getId();
form.setDestination(FormApp.DestinationType.SPREADSHEET, newSheetId);
// The new destination just had ALL existing responses copied to it - wipe them
Utilities.sleep(10000); // Wait for sheet to be updated
var sheet = SpreadsheetApp.openById(newSheetId).getActiveSheet();
sheet.deleteRows(2, sheet.getMaxRows()-2); // Cannot delete all non-frozen rows, so leave one
return newSheetId;
}
Пусть покупатель будет бдителен
Однако есть проблема. Когда вы устанавливаете электронную таблицу в качестве места назначения для формы, все существующие ответы копируются в новое место назначения. Если вас беспокоит, что у вас закончится место в целевой электронной таблице, то это, очевидно, не поможет.
По этой причине ответ, который вы не хотите - скопируйте ответы на другой лист - действительно ваш лучший вариант.
person
Mogsdad
schedule
26.11.2014