如何阻止 Google sheet 生成重复的表单?
How do I stop Google sheet from generating duplicating forms?
我正在使用以下 Google 脚本代码在每次打开文件时生成备份。
function copySheet() {
var formattedDate = Utilities.formatDate(new Date(), "GMT-6", "yyyy-MM-dd' 'HH:mm:ss");
var name = SpreadsheetApp.getActiveSpreadsheet().getName() + " Copy " + formattedDate;
var destination = DriveApp.getFolderById("18aW0o_L1jngSjZ56aKGjt29JwTE1OQZf");
var file = DriveApp.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId())
var sh = SpreadsheetApp.openById(file.makeCopy(name, destination));
var ss = sh.getSheets()[0];
ss.getRange(1,1,ss.getLastRow(),ss.getLastColumn()).setValues(ss.getRange(1,1,ss.getLastRow(),ss.getLastColumn()).getValues());
}
有一个链接到此 sheet 的表单,并且每次表单都会重复该表单。我该如何阻止这种情况发生?我希望每个备份副本都与相同的表格链接。我如何使用 Google 脚本来做到这一点?
如果不可能,是否有任何其他方法可以生成备份以使表单不会重复?
Link 每个传播的形式相同sheet
I want every backup copy to be linked with the same form. How can I do it using Google Script?
不幸的是,这是不可能的。一个表格一次只能链接到一个点差sheet。
选项 1:复制个人 sheets
防止重复表格的一种方法:不是创建跨页副本sheet,而是创建新的空白跨页sheet,然后复制单个 sheet(或 sheets) 到那个价差sheet.
/**
* Create a new spreadsheet in the folder, and copy the sheet to it.
*/
function duplicateSpreadsheetF(filename, sourceSpreadsheet, folder) {
// Create a new blank file
var spreadsheet = SpreadsheetApp.create(filename)
// Move to the folder
var file = DriveApp.getFileById(spreadsheet.getId())
file.moveTo(folder)
// Copy the sheets from the source
sourceSpreadsheet.getSheets().forEach(function(sheet){
sheet.copyTo(spreadsheet).setName(sheet.getName())
})
// Remove the default blank Sheet1
var blankSheet = spreadsheet.getSheetByName('Sheet1')
if (blankSheet) spreadsheet.deleteSheet(blankSheet)
return spreadsheet
}
当您只复制个人 sheet 时,副本不会链接到任何表格 -- 它只是 sheet 上数据的副本。
选项 2:复制后删除表格
您可以将其附加到您现有的代码中。它将遍历备份副本上的所有 sheet,然后取消链接——然后删除——链接到每个 sheet.
的任何表单
// Unlink and delete all forms that are linked to spreadsheet sh
sh.getSheets().forEach(function(sheet){
// Get form attached to sheet
var formUrl = sheet.getFormUrl(); // returns null if there is no linked form
if (formUrl) {
var form = FormApp.openByUrl(formUrl);
// Unlink the form
form.removeDestination();
// Delete the form
DriveApp.getFileById(form.getId()).setTrashed(true);
}
})
前面的回答是正确的。但是,可以取消链接表格并使用 onFormSubmit
of form to post form data to various spreadsheets without relying on the inbuilt form-spreadsheet link. See
我正在使用以下 Google 脚本代码在每次打开文件时生成备份。
function copySheet() {
var formattedDate = Utilities.formatDate(new Date(), "GMT-6", "yyyy-MM-dd' 'HH:mm:ss");
var name = SpreadsheetApp.getActiveSpreadsheet().getName() + " Copy " + formattedDate;
var destination = DriveApp.getFolderById("18aW0o_L1jngSjZ56aKGjt29JwTE1OQZf");
var file = DriveApp.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId())
var sh = SpreadsheetApp.openById(file.makeCopy(name, destination));
var ss = sh.getSheets()[0];
ss.getRange(1,1,ss.getLastRow(),ss.getLastColumn()).setValues(ss.getRange(1,1,ss.getLastRow(),ss.getLastColumn()).getValues());
}
有一个链接到此 sheet 的表单,并且每次表单都会重复该表单。我该如何阻止这种情况发生?我希望每个备份副本都与相同的表格链接。我如何使用 Google 脚本来做到这一点?
如果不可能,是否有任何其他方法可以生成备份以使表单不会重复?
Link 每个传播的形式相同sheet
I want every backup copy to be linked with the same form. How can I do it using Google Script?
不幸的是,这是不可能的。一个表格一次只能链接到一个点差sheet。
选项 1:复制个人 sheets
防止重复表格的一种方法:不是创建跨页副本sheet,而是创建新的空白跨页sheet,然后复制单个 sheet(或 sheets) 到那个价差sheet.
/**
* Create a new spreadsheet in the folder, and copy the sheet to it.
*/
function duplicateSpreadsheetF(filename, sourceSpreadsheet, folder) {
// Create a new blank file
var spreadsheet = SpreadsheetApp.create(filename)
// Move to the folder
var file = DriveApp.getFileById(spreadsheet.getId())
file.moveTo(folder)
// Copy the sheets from the source
sourceSpreadsheet.getSheets().forEach(function(sheet){
sheet.copyTo(spreadsheet).setName(sheet.getName())
})
// Remove the default blank Sheet1
var blankSheet = spreadsheet.getSheetByName('Sheet1')
if (blankSheet) spreadsheet.deleteSheet(blankSheet)
return spreadsheet
}
当您只复制个人 sheet 时,副本不会链接到任何表格 -- 它只是 sheet 上数据的副本。
选项 2:复制后删除表格
您可以将其附加到您现有的代码中。它将遍历备份副本上的所有 sheet,然后取消链接——然后删除——链接到每个 sheet.
的任何表单// Unlink and delete all forms that are linked to spreadsheet sh
sh.getSheets().forEach(function(sheet){
// Get form attached to sheet
var formUrl = sheet.getFormUrl(); // returns null if there is no linked form
if (formUrl) {
var form = FormApp.openByUrl(formUrl);
// Unlink the form
form.removeDestination();
// Delete the form
DriveApp.getFileById(form.getId()).setTrashed(true);
}
})
前面的回答是正确的。但是,可以取消链接表格并使用 onFormSubmit
of form to post form data to various spreadsheets without relying on the inbuilt form-spreadsheet link. See