簡體   English   中英

如何阻止 Google 工作表生成重復的表單?

[英]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());
}

有一個表格鏈接到此表格,並且每次表格都會重復。 我如何阻止這種情況發生? 我希望每個備份副本都以相同的形式鏈接。 我如何使用 Google Script 做到這一點?

如果不可能,有沒有其他方法可以生成備份,這樣表單就不會被復制?

將相同的表單鏈接到每個電子表格

我希望每個備份副本都以相同的形式鏈接。 我如何使用 Google Script 做到這一點?

不幸的是,這是不可能的。 一個表單一次只能鏈接到一個電子表格。

選項 1:復制單個工作表

防止重復表單的一種方法:不是創建電子表格的副本,而是創建一個新的空白電子表格,然后將單個工作表(或多個工作表)復制到該電子表格中。

/**
 * 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
}

當您只復制單個工作表時,該副本不會鏈接到任何表單——它只是工作表上數據的副本。

選項 2:復制后刪除表單

您可以將其附加到現有代碼中。 它將遍歷備份副本上的所有工作表,並取消鏈接——然后刪除——鏈接到每個工作表的任何表單。

// 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表單鏈接並使用onFormSubmit將表單數據發布到各種電子表格,而無需依賴內置的表單-電子表格鏈接。 在此處查看示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM