我是 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()”。
如果我调试缓慢,事情确实工作正常,但在运行应用程序时,我时不时会遇到频繁的错误:-
The property 'text' is not available. Before reading the property's value, call the load method on the containing object and call "context.sync()" on the associated request context.
请指导我如何处理这个问题? 另外,我的方法正确吗?
最佳答案
就问题而言,错误位于 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 可扩展性团队开发人员
关于javascript - 在 Office 应用程序的 Excel.run 中重用范围对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36600342/