Obecnie używam następujący kod do słuchania zmianą Sheet1!A1:B2
:Słuchaj zmiany wartości wielu zakresach z opóźnieniu na
function addEventHandler() {
Office.context.document.bindings.addFromNamedItemAsync("Sheet1!A1:B2", "matrix", { id: "myBind" }, function (asyncResult) {
Office.select("binding#myBind").addHandlerAsync(Office.EventType.BindingDataChanged, onBindingDataChanged2016);
})
}
function onBindingDataChanged2016(eventArgs) {
Excel.run(function (ctx) {
var foundBinding = ctx.workbook.bindings.getItem(eventArgs.binding.id);
var myRange = foundBinding.getRange();
myRange.load(["address", 'values']);
return ctx.sync().then(function() {
console.log(JSON.stringify({ "address": myRange.address, "value": myRange.values }));
// costly reaction
})
})
}
Ponieważ moja reakcja na zmiany jest dość kosztowne, chcę Podejmij ją tylko wtedy, gdy jest to naprawdę konieczne. Mam dwa pytania:
1) Jeśli chcę słuchać wielu zakresów, czy możliwe jest zdefiniowanie tylko JEDNEGO słuchacza dla "Sheet1!A1:B2, Sheet1!A9:B10, Sheet1!A100:B120"
? Czy muszę dodać JEDNEGO nośnika dla KAŻDEGO zakresu?
2) Czy można wyrazić I listen only to the change of VALUES
, a nie formaty itp.?
Opcjonalnie pytanie:
Czy to możliwe, aby określić zwłoki czasowej gdzieś? Na przykład,
możemy zainicjować zegar z
0
jeśli słuchacz jest wyzwalany, możemy nagrać
binding id
o zmianie i ustawić zegar0
gdy osiągnie zegar
1 second
(tzn. Było cicho przez 1 sekundę), reagujemy na wszystkie zarejestrowane zmiany (tj. Ładujemy wszystkie zmienione zakresy i podejmujemy kosztowną reakcję)
nieczułości działa dobrze, dziękuję bardzo ... – SoftTimur
Inny przykład debouncing (nie z wydarzeniami dokumentów , ale zewnętrzne zdarzenia kliknięcia przyciskiem), patrz ten punkt: https://gist.github.com/Zlatkovsky/0dd0e7281e70af25d67bdb55cd4d7e4b. Możesz go załadować bezpośrednio do [Script Lab] (https://github.com/OfficeDev/script-lab/blob/master/README.md#import), aby uruchomić go za pomocą kilku kliknięć. –