2016-09-02 5 views
0
Excel.run(function (ctx) { 

       // Create a proxy object for the active sheet 
       var sheet = ctx.workbook.worksheets.getActiveWorksheet(); 
       var sampleRange2 = sheet.getRange(sampleRange.address); 
       sampleRange2.load(); 

       return ctx.sync() 
        .then(function() { 

         for (var i = 0; i < suggestion.OutputCellList.length; i++) { 

          if (!sampleRange2.values[i][sampleRange.values[0].length - 1]) { 
           sampleRange2.values[i][sampleRange.values[0].length - 1] = suggestion.OutputCellList[i]; 

          } 
         } 

         sampleRange2.format.fill.color = "blue"; 
         sampleRange2.format.font.bold = false; 

        }) 
        .then(ctx.sync) 
      }) 

このコードでは、ターゲット範囲の最後の列の値が更新され、新しい形式が適用されます。 ctx.syncの後では、新しい書式設定は機能しますが、値は使用できません。デバッグでは、値配列にすべての新しい値が正しく表示されます。しかし、ワークシート上のすべてのターゲットセルは、同期後も空白のままです。考えられる原因は?Excelのaddin:ctx.syncの後にワークシートの値が更新されない

答えて

2

2D配列の設定は、通常のプロパティとは少し異なります。オブジェクトのプロパティセットがトリガされるように、それらを「卸売」に設定する必要があります。それ以外の場合は、JavaScript配列を効果的に操作していますが、オブジェクトは変更を意識していません。 (それはハック感じているものの)

最も簡単な解決策は、右のあなたのforループの後

sampleRange2.values = sampleRange2.values; 

を固執することです。その解決策の問題は、このコードを見ている開発者の中には「どうして彼らはおそらくそれをしたのですか?」というメッセージが出る可能性があるということです。その後

var newValues = sampleRange.values; 

あなたnewValuesアレイ上で動作し、その後

sampleRange.values = newValues; 
+0

感謝を設定します。あなたのforループ、新しい変数を宣言する前に

少ないハック見えるソリューションは、です。できます。 –

関連する問題