保存工作簿的初始状态
Save the initial state of a workbook
我想在开始时保存工作簿(或 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,Office 可扩展性团队开发人员,MSFT
我想在开始时保存工作簿(或 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,Office 可扩展性团队开发人员,MSFT