2016-06-16 7 views
0

ワークブック(またはExcelアプリケーション)の初期状態を最初に保存したいので、アドインによってワークブックの変更に関係なく常に元に戻すことができます。に。ワークブックの初期状態を保存する

私は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オブジェクトです)。コンテキストとは、ディスパッチするアクションのパイプライン(または、もしあれば、コマンドのアキュムレータ)に過ぎません。

同じコンテキストから2つのオブジェクトを作成する方法としてコンテキストオブジェクトを使用する点を除いて、コンテキストオブジェクトにハングする本当の理由はありません(たとえば、オブジェクトは対話するために同じコンテキストから来ている必要があります) 。しかしそれを超えて、文脈の人生はできるだけ早くできる(一般的にそうすべきである)。そのため、Excel.runでは常に新しいコンテキストを作成し、最後に処理します。

関連するノートでは、同じ理由でExcel.runを実行して、それが提供するコンテキストを使用しないでください(または、例のように別のコンテキストを使用する)。 Excel.runを使わずにコードを簡単に実行できるだけでなく、既存のコンテキストを再利用している場合は、Excel.runブロックに入れることはできません(また、自動的にオブジェクトを追跡することはできませんクリーンExcel.run)。

希望すると便利です。

〜マイケル・Zlatkovsky、Officeの拡張チームの開発者は、MSFT

+0

そうでは、初めに、私は、ブックの初期状態のために何を保存する必要がありますか?ちょうど「ワークブック」? – SoftTimur

関連する問題