range.address抛出与上下文相关的错误

时间:2017-02-23 10:48:58

标签: excel office365 office-js

我们使用Excel JavaScript API开发已经有好几个月了。我们遇到了与上下文相关的问题,这些问题因未知原因而得到解决。我们无法复制这些问题,并想知道它们是如何得到解决的。最近类似的问题又开始出现了。 我们一直得到错误:

  

属性'地址'不可用。在阅读酒店之前   value,调用包含对象的load方法并调用   关联请求上下文中的“context.sync()”。

我们认为,由于我们已经定义了多个函数来模块化项目中的代码,因此这些函数之间的上下文可能会被忽视。因此,我们提出了通过JavaScript模块模式实现的单一上下文解决方案。

    var ContextManager = (function () {
        var xlContext;//single context for entire project/application.
        function loadContext() {
            xlContext = new Excel.RequestContext();
        }
        function sync(object) {
            return (object === undefined) ? xlContext.sync() : xlContext.sync(object);
        }
        function getWorksheetByName(name) {
            return xlContext.workbook.worksheets.getItem(name.toString());
        }
        //public
        return {
            loadContext: loadContext,
            sync: sync,
            getWorksheetByName: getWorksheetByName
        };
    })();

注意:上面的代码缩短了。还添加了其他方法以确保在整个应用程序中使用单个上下文。 在实施单一上下文的同时,我们已经能够复制该问题。

    Office.initialize = function (reason) {
        $(document).ready(function () {
            ContextManager.loadContext();
            function loadRangeAddress(rng, index) {
                rng.load("address");
                ContextManager.sync().then(function () {
                    console.log("Address: " + rng.address);
                }).catch(function (e) {
                    console.log("Failed address for index: " + index);
                });
            }
            for (var i = 1; i <= 1000; i++) {
                var sheet = ContextManager.getWorksheetByName("Sheet1");
                loadRangeAddress(sheet.getRange("A" + i), i);//I expect to see a1 to a1000 addresses in console. Order doesn't matter.
            }
        });
    }

在上述情况下,只有“A1”作为范围地址打印到控制台。我看不到任何其他地址(A2到A1000)正在打印。只执行catch块。谁能解释为什么会这样? 虽然我上面写了循环,但这不是我的用例。在实际使用情况下,这种情况发生在函数a中的一个范围对象需要加载范围地址的情况下。同时另一个函数b也想加载范围地址。函数a和函数b在单独的任务上异步工作,例如创建表对象(表需要地址)和其他将数据粘贴到工作表(有调试语句以查看数据的粘贴位置)。

这是我们团队无法找到或找到解决方案的。

0 个答案:

没有答案