2016-06-28 7 views
0

getStateは、JavaScript変数にブックの初期値と数式を保存し、setStateはJavaScript変数からブックの初期式と値を復元します。通常、私のアドインはgetStateの実行から開始し、範囲式と値を変更する可能性のある操作を行い、setStateを実行して終了します。大きなファイルの読み込みと書き込みの最適化と回避策

しかし、私は、これらの機能は、(1つのワークシートが行の数千を含んでいてもよい)、大きなExcelファイルのための内部エラーを上げることができることを実現します。ここ

enter image description here

例えばは、コードスニペットである:

var usedRanges; 

function getState() { 
    return Excel.run(function (ctx) { 
     usedRanges = []; 
     var worksheets = ctx.workbook.worksheets; 
     var usedRangesLocal = []; 
     worksheets.load('items'); 
     return ctx.sync() 
      .then(function() { 
       for (var i = 0; i < worksheets.items.length; i++) { 
        worksheets.items[i].load('name'); 
        usedRangesLocal[i] = worksheets.items[i].getUsedRange(); 
        usedRangesLocal[i].load(["address", "formulasR1C1", "values"]); 
       } 
      }) 
      .then(ctx.sync) 
      .then(function() { 
       for (var i = 0; i < worksheets.items.length; i++) { 
        usedRanges.push({ 
         sheet: worksheets.items[i].name, 
         address: usedRangesLocal[i].address, 
         formulasR1C1: usedRangesLocal[i].formulasR1C1, 
         values: usedRangesLocal[i].values 
        }); 
       } 
      }); 
    }); 
} 

function setState() { 
    return Excel.run(function (ctx) { 
     var worksheets = ctx.workbook.worksheets; 
     worksheets.load('items'); 
     return ctx.sync() 
      .then(function() { 
       for (var i = 0; i < worksheets.items.length; i++) { 
        var r = worksheets.items[i].getRange(usedRanges[i].address); 
        r.values = usedRanges[i].values 
        r.formulasR1C1 = usedRanges[i].formulasR1C1; 
       } 
      }); 
    }); 
} 

これらはManifest_remote.xmlHome.htmlHome.jsあります。 Home.jsでは、さまざまなプロパティの読み込みを分割していくつかの回避策を試みますが、結果はまだ良くありません。

だから私は、大規模なワークブックの異なるサブセットに対してExcel Onlineの下で、このアドインをテストします。テストでは、ワークブックが大きいほど機能が失敗する可能性が高いことが示されています(、特にsetStateは時間がかかり、Excel Windowsの下であっても非常に時間がかかります)。 3つのファイルがあります:GetNoAllNo.xlsxGetYesAllNo.xlsxGetYesAllYes.xlsxです。

これらのxlsxファイルは現実的であまり大きくありません。ですから、私は実際にgetStatesetStateをより良くするための解決策や回避策を探しています。

助けてもらえますか? http://dev.office.com/docs/add-ins/develop/resource-limits-and-performance-optimization

セクションの情報設計と実装技術は、この問題を解決する助けなければならない。

答えて

0

次のリンクは、Officeのパフォーマンスの最適化に関する貴重な情報アドインを持っています。

関連する問題