我想在开头保存工作簿(或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
会打印工作表的当前状态而不是初始值。
有谁知道实现这一目标的最佳做法是什么?
答案 0 :(得分:1)
上下文不存储工作簿状态(它怎么可能呢?它是一个与文档完全分开的JavaScript对象)。上下文仅仅是一个管道(或者,如果你愿意,还有一个命令的累加器),它可以分配什么动作。
除了使用它作为从同一上下文创建两个对象的方式(例如,range1.getIntersection(range2)
)之外,没有真正的理由可以挂起到上下文对象,因为对象必须来自相同的上下文互动)。但除此之外,环境的生活可以(并且通常应该)尽可能快。这就是为什么在Excel.run
中我们总是为您创建一个新的上下文,并在最后处置它。
在相关的说明中,并且出于同样的原因,执行Excel.run
并且不使用它提供的上下文(或使用不同的上下文,就像在您的示例中那样)是没有意义的。您可以轻松地在没有Excel.run
的情况下运行您的代码,如果您重新使用现有的上下文,那么它就不会让您在Excel.run
块中获取任何内容(请注意您赢得了#39} ; t得到一个干净的Excel.run
)的自动对象跟踪。
希望这有帮助!
~Michael Zlatkovsky,Office Extensibility团队的开发人员,MSFT