首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >自动Google Sheets备份,无需复制附加到工作表的表单

自动Google Sheets备份,无需复制附加到工作表的表单
EN

Stack Overflow用户
提问于 2018-05-27 13:33:28
回答 1查看 2K关注 0票数 -1

如何创建一个脚本,将Google工作表作为备份复制到Google Drive中的备份文件夹中,而不是复制附加到工作表上的Google表单?

代码语言:javascript
复制
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+的拷贝。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-28 23:32:55

问得好。这对我的知识来说有点难,我抓住了它:)

无法在没有表单的情况下复制整个电子表格,因为它们神奇地连接在一起(神奇的==>连接在任何公共API下)。

您可以使用copy sheet to another spreadsheed功能。

我试过了,它不能创建表单的副本,耶!

但是对于这种情况,有Script & Drive笨重的API。结果看起来太老套了:

代码语言:javascript
复制
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 (parents.hasNext()) {
        var parent = parents.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]);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50549311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档