2016-06-16 89 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