保存工作簿的初始状态

时间:2016-06-16 22:58:50

标签: ms-office office-js

我想在开头保存工作簿(或Excel应用程序)的初始状态,这样无论我的加载项对工作簿进行任何修改,我都可以随时返回它。

我在Home.js中尝试了以下代码:

(function() {
    "use strict";

    Office.initialize = function(reason) {
        $(document).ready(function() {
            app.initialize();
            initial();
            $('#getInitial').click(getInitial);
        });
    };

    var ctxInitial;

    function initial () {
        ctxInitial = new Excel.RequestContext();
    }

    function getInitial() {
        Excel.run(function () { 
            var wSheetName = 'Sheet1';
            var worksheet = ctxInitial.workbook.worksheets.getItem(wSheetName);
            var usedRange = worksheet.getUsedRange();
            usedRange.load(["values"]);
            return ctxInitial.sync().then(function() {
                document.getElementById("area").value += usedRange.values.toString();
            });
        });
    }
})();

在一开始,我的测试打印出工作表的初始值。但是,在对某些单元格值进行一些手动修改后,getInitial会打印工作表的当前状态而不是初始值。

有谁知道实现这一目标的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

上下文不存储工作簿状态(它怎么可能呢?它是一个与文档完全分开的JavaScript对象)。上下文仅仅是一个管道(或者,如果你愿意,还有一个命令的累加器),它可以分配什么动作。

除了使用它作为从同一上下文创建两个对象的方式(例如,range1.getIntersection(range2))之外,没有真正的理由可以挂起到上下文对象,因为对象必须来自相同的上下文互动)。但除此之外,环境的生活可以(并且通常应该)尽可能快。这就是为什么在Excel.run中我们总是为您创建一个新的上下文,并在最后处置它。

在相关的说明中,并且出于同样的原因,执行Excel.run并且不使用它提供的上下文(或使用不同的上下文,就像在您的示例中那样)是没有意义的。您可以轻松地在没有Excel.run的情况下运行您的代码,如果您重新使用现有的上下文,那么它就不会让您在Excel.run块中获取任何内容(请注意您赢得了#39} ; t得到一个干净的Excel.run)的自动对象跟踪。

希望这有帮助!

~Michael Zlatkovsky,Office Extensibility团队的开发人员,MSFT