我想为用户在工作簿中选择的范围或单元格添加事件处理程序:如果用户选择另一个单元格或范围,则需要系统地执行某些操作。
我正在查看this reference,但我不知道将代码集成到整个加载项的位置。
例如,在我的Home.html
中,我有
<div id="content-main">
<div class = "padding" id="message"></div>
<div class="padding">
<button class="ms-Button" id="button">Click me!</button>
</div>
</div>
以下是Home.js
:
(function() {
"use strict";
Office.initialize = function(reason) {
$(document).ready(function() {
app.initialize();
$('#button').click(activateEventHandler);
});
};
function onBindingSelectionChanged(eventArgs) {
write(eventArgs.binding.id + " has been selected.");
}
function write(message) {
document.getElementById('message').innerText += message;
}
function activateEventHandler() {
Excel.run(function(ctx) {
var selectedRange = ctx.workbook.getSelectedRange();
selectedRange.addHandlerAsync(Office.EventType.BindingSelectionChanged, onBindingSelectionChanged);
return ctx.sync()
}).then(function() {
console.log("done");
}).catch(function(error) {
...
}
});
}
})();
我希望按钮可以激活监听器。然后,每次用户选择另一个单元格或范围时,系统地将消息附加到任务窗格。但是,上述代码会在Error: TypeError: selectedRange.addHandlerAsync is not a function
行引发错误selectedRange.addHandlerAsync(...
。
实际上,我甚至不确定这段代码的结构是否应该......有人知道如何修改代码来实现我的任务吗?
答案 0 :(得分:1)
错误的原因是您尝试在Range对象上调用函数addHandlerAsync。但处理程序只能添加到Binding对象或Document对象。您选择哪一个取决于您想要完成的目标。在您的情况下,我认为您并未尝试在特定范围内收听选择,而是实际上要在文档中收听任何地方的选择。所以你实际上会使用DocumentSelectionChanged event:
(function() {
"use strict";
Office.initialize = function(reason) {
$(document).ready(function() {
app.initialize();
$('#button').click(activateEventHandler);
});
};
function onMySelectionChanged(eventArgs) {
write(eventArgs.binding.id + " has been selected.");
doStuffWithNewSelection();
}
function write(message) {
document.getElementById('message').innerText += message;
}
function activateEventHandler(){
Office.context.document.addHandlerAsync(Office.EventType.DocumentSelectionChanged, onMySelectionChanged);
}
function doStuffWithNewSelection() {
Excel.run(function(ctx) {
var selectedRange = ctx.workbook.getSelectedRange();
// do other stuff with the selection as you wish, like read and display
}).then(function() {
console.log("done");
}).catch(function(error) {
...
}
});
}
})();