保存工作簿的初始状态



我想在开始时保存工作簿(或 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打印工作表的当前状态,而不是初始值。

有谁知道实现这一点的最佳实践是什么?

上下文不存储工作簿状态(怎么可能?它是一个 JavaScript 对象,与文档完全分开)。上下文只是要调度的操作的管道(或者,如果您愿意,还可以是命令的累加器)。

没有真正的理由坚持上下文对象,除了将其用作从同一上下文创建两个对象的一种方式(例如,range1.getIntersection(range2),因为对象必须来自同一上下文才能交互)。但除此之外,上下文的生命可以(并且通常应该)尽可能快。这就是为什么在Excel.run我们总是为您创建一个新的上下文,并在最后处理它。

在相关的说明中,出于相同的推理,做一个Excel.run而不使用它提供的上下文(或使用不同的上下文,就像你在示例中所做的那样)是没有意义的。您可以在没有Excel.run的情况下轻松运行代码,如果您重用现有上下文,则将其放在Excel.run块中不会给您带来任何好处(请注意,您将无法获得干净的Excel.run的自动对象跟踪)。

希望这有帮助!

~ Michael Zlatkovsky,MSFTOffice扩展性团队的开发人员

最新更新