Автоматическое резервное копирование листов Google без копирования форм, прикрепленных к листам - PullRequest
0 голосов
/ 27 мая 2018

Как создать сценарий, который копирует лист Google в качестве резервной копии в папку резервных копий на диске Google, но не копирует формы Google, прикрепленные к листу?

function backUp() {

var formattedDate = Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd' 'HH:mm:ss");

var name = SpreadsheetApp.getActiveSpreadsheet().getName() + " Copy " + formattedDate;

var destination = DriveApp.getFolderById("1NNhZESRq_0_DVBwzA8fvxSYGMpOa6KC_");

var file = DriveApp.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId())

file.makeCopy(name, destination);
}

Этот файл автоматически копирует исходные файлы в папку резервного копирования, но также копирует формы Google, связанные с ним ... поэтому я получаю более 10 копий каждый день после сохранения.Пожалуйста, помогите мне и спасибо.

1 Ответ

0 голосов
/ 28 мая 2018

Отличный вопрос.Насколько мне было трудно, я понял:)

Невозможно скопировать всю электронную таблицу без формы, потому что они магически связаны (магически ==> подключение осуществляется любым публичным APIвозможности).

Вы можете использовать функцию copy sheet to another spreadsheed.

Я пробовал, и это не создает копию формы, да!

Но для этогобывает громоздким API Script & Drive.Результат выглядит слишком смешно:

function backUp() 
{
  //Open old spreadsheet
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

  //Prepare new name
  var formattedDate = Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd' 'HH:mm:ss");
  var name = spreadsheet.getName() + " Copy " + formattedDate;

  //Prepare file system objects
  var oldfile = DriveApp.getFileById(spreadsheet.getId());
  var destination = DriveApp.getFolderById("1NNhZESRq_0_DVBwzA8fvxSYGMpOa6KC_");

  //create new spreadsheet
  var newSpreadsheet = SpreadsheetApp.create(name);

  //move to destination folder (yep, it's hacky)
    var newFile = DriveApp.getFileById(newSpreadsheet.getId());
    var parents = newFile.getParents();
    while (folders.hasNext()) {
       var parent = folders.next();
       parent.removeFile(newFile); //remove from default folder
    }
    destination.addFile(newFile);

  //copy all sheets to new spreadsheet
  var sheets = spreadsheet.getSheets();
  sheets.forEach(function(sheet){
    sheet.copyTo(newSpreadsheet);
  });

  //remove empty sheet (created with new spreadsheet)
  newSpreadsheet.deleteSheet(newSpreadsheet.getSheets()[0]);
}

Наслаждайтесь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...