2016-06-16 54 views
0

我想在开始时保存工作簿(或Excel应用程序)的初始状态,以便无论修改工作簿的Add-在。保存工作簿的初始状态

我尝试了一些下面的代码在Home.js

(function() { 
    "use strict"; 

    Office.initialize = function(reason) { 
     $(document).ready(function() { 
      app.initialize(); 
      initial(); 
      $('#getInitial').click(getInitial); 
     }); 
    }; 

    var ctxInitial; 

    function initial() { 
     ctxInitial = new Excel.RequestContext(); 
    } 

    function getInitial() { 
     Excel.run(function() { 
      var wSheetName = 'Sheet1'; 
      var worksheet = ctxInitial.workbook.worksheets.getItem(wSheetName); 
      var usedRange = worksheet.getUsedRange(); 
      usedRange.load(["values"]); 
      return ctxInitial.sync().then(function() { 
       document.getElementById("area").value += usedRange.values.toString(); 
      }); 
     }); 
    } 
})(); 

在开始的时候,我的测试以及打印工作表的初始值。但是,在对某些单元格值进行了一些手动修改之后,getInitial将打印工作表的当前状态而不是初始值。

有没有人知道什么是最好的做法来实现这一点?

回答

1

上下文不存储工作簿状态(怎么可能?它是一个JavaScript对象,它与文档完全分离)。上下文仅仅是一个流水线(或者,如果你愿意的话,是一个命令的累加器)分派哪些动作。

没有真正的理由挂在上下文对象上,除了将它用作从同一上下文中创建两个对象的方式(例如,因为对象必须来自相同的上下文才能进行交互) 。但除此之外,情境的生活可以(并且通常应该)尽可能快。这就是为什么在Excel.run我们总是为你创造一个新的环境,并在最后处置它。

在相关说明中,出于同样的理由,执行Excel.run并且不使用它提供的上下文(或使用不同的上下文,就像在您的示例中那样)是没有意义的。你可以简单地在没有Excel.run的情况下运行你的代码,如果你正在重用一个已经存在的上下文,那么它就不会让你在Excel.run块中获得任何东西(并且注意你不会得到你想要的自动对象跟踪用干净的Excel.run)。

希望这会有所帮助!

〜迈克尔Zlatkovsky,在Office扩展团队开发,MSFT

+0

所以,在开始的时候,我应该怎么保存工作簿的初始状态?只是“工作簿”? – SoftTimur