有没有办法撤消谷歌应用程序脚本所做的更改?

时间:2013-11-04 22:43:38

标签: google-apps-script

所以我想知道如何通过谷歌应用程序脚本对文档进行可逆转换。 特别是我正在开发一个脚本,将自定义样式应用于Google文档中的文档中的选定元素。这不是一件难事。问题是脚本所做的更改不会反映在文档的历史记录中,因此无法撤消。据我所知,没有可逆编辑会议的概念。

那么有没有办法撤消脚本所做的更改?

function onOpen() {
  DocumentApp.getUi()
  .createMenu('Extras')
  .addItem('Apply code style', 'applyCodeStyle')
  .addToUi();
}

function applyCodeStyle() {
  var selection = DocumentApp.getActiveDocument().getSelection();
  if (selection) {
   var elements = selection.getSelectedElements();
   for (var i = 0; i < elements.length; i++) {
     var element = elements[i];

     // Only modify elements that can be edited as text; skip images and other non-text elements.
     if (element.getElement().editAsText) {
       var text = element.getElement().editAsText();

       // Bold the selected part of the element, or the full element if it's completely selected.
       if (element.isPartial()) {
         text.setBold(element.getStartOffset(), element.getEndOffsetInclusive(), true);
       } else {
         text.setBold(true);
       }
     }
   }
 }
}

1 个答案:

答案 0 :(得分:1)

最接近我可以想象它会在您修改文件时每隔5分钟左右在特定文件夹中创建一个文件的备份副本,因此您至少拥有此文档版本的副本。不理想,但它有效...

以下是一段代码,从您的代码开始我刚添加了计时器/副本,您可以通过更改文件夹ID来尝试。

编辑:为首次执行添加了try / catch而没有错误。

function applyCodeStyle() {
  var selection = DocumentApp.getActiveDocument().getSelection();
  try{
    var x = new Date().getTime()/60000-new Date(Utilities.jsonParse(ScriptProperties.getProperty('lastBKP'))).getTime()/60000 ;
  }catch(e){
    ScriptProperties.setProperty('lastBKP', Utilities.jsonStringify(new Date()));
    var x = 0
    }    
  Logger.log(x+' minutes')
  if (selection) {
    if(x > 5){
      var docId = DocumentApp.getActiveDocument().getId();
      DriveApp.getFileById(docId).makeCopy(DriveApp.getFolderById('0B3qSFd3iikE3NWd5TmRZdjdmMEk')).setName('backup_of_'+DocumentApp.getActiveDocument().getName()+'_on_'+Utilities.formatDate(new Date(),'GMT','yyyy-MMM-dd-HH-mm'));
      Logger.log("file copied because new Date().getTime()/3600-new Date(Utilities.jsonParse(ScriptProperties.getProperty('lastBKP'))).getTime()/3600 ="+x);
      ScriptProperties.setProperty('lastBKP', Utilities.jsonStringify(new Date()));
    }
    var elements = selection.getSelectedElements();
    for (var i = 0; i < elements.length; i++) {
      var element = elements[i];
      if (element.getElement().editAsText) {
        var text = element.getElement().editAsText();
        if (element.isPartial()) {
          text.setBold(element.getStartOffset(), element.getEndOffsetInclusive(), true);
        } else {
          text.setBold(true);
        }
      }
    }
  }
}