[英]Reusing range object in Excel.run for apps for office
我是 OFFICE 應用程序的新手
我正在嘗試一個簡單的代碼來驗證 Excel 數據。 因此,與其一次又一次地在 ctx.sync() 中嵌套東西,我正在編寫這樣的代碼:-
// **json** object used beneath is somewhat like:
{"Field":[
{"FieldName":"Field1", "FieldDesc":"Field 1 desc", "MappedTo":"B2", "IsMandatory":"true", "LOV":"1,2,3"}]}
// **LOV** in above json data means:- the field data can only be among the values given.
//********** MY PIECE OF CODE**************
var fieldData = "";
$.each(json, function (index, field) {
range = ctx.workbook.worksheets.getActiveWorksheet().getRange(field.MappedTo + ":" + field.MappedTo);
range.load('text');
ctx.sync();
fieldData = range.text;
if(field.IsMandatory == true && (fieldData == "" || fieldData == null))
{
headerValidation = headerValidation + "Data is required for Field : " + field.FieldDesc + "\n";
}
else if(field.LOV != "" )
{
if($.inArray(fieldData, field.LOV.split(',')) == -1)
{
headerValidation = headerValidation + "Data not among LOV for Field : " + field.FieldDesc + "\n";
}
}
range = null;
});
可以看出,我需要一次又一次地讀取范圍對象。 所以我每次都使用具有不同地址的范圍對象並首先調用“load()”然后調用“ctx.sync()”。
如果我調試緩慢,一切正常,但在運行應用程序時,我會時不時地出現錯誤:-
屬性“文本”不可用。 在讀取屬性的值之前,調用包含對象的 load 方法,並在關聯的請求上下文上調用“context.sync()”。
請指導我如何處理這個問題? 另外,我的方法正確嗎?
就錯誤而言,錯誤位於您的 ctx.sync() 語句旁邊。 你需要它
ctx.sync()
.then(function() {
fieldData = range.text;
...
});
我也不會忘記最后的 .catch(function(error) { ... }) 。
至於是否重用變量,這真的無關緊要。 通過執行“range = ctx.workbook....”,您實際上是在創建一個全局范圍變量,這被認為是不好的做法。 最好做“var range = ctx.workbook....”。 而且您無需擔心最后將其設置為 null。
需要注意的一件事是,由於您是在 for-each 循環中執行此操作,請注意並發 .sync() 的數量是有限的(我相信大約在 50-60 之間)。 因此,如果您要擁有大量字段,則可能需要調整算法。
最后,您可以通過同步刪除所有范圍對象,一次加載它們,然后執行單個“.sync”,從而使此代碼更加高效。
var ranges = [];
$.each(json, function (index, field) {
var range = ctx.workbook.worksheets.getActiveWorksheet().getRange(field.MappedTo + ":" + field.MappedTo);
range.load('text');
ranges.push(range);
});
ctx.sync()
.then(function() {
// iterate through the read ranges and do something
})
希望這有幫助,
~ Michael Zlatkovsky,MSFT Office 可擴展性團隊的開發人員
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.