我想跟蹤的SelectionChanged上述解決辦法是聰明,但我相信它可以讓你在事件之間的競爭條件射擊。我測試了上述解決方案,並且看起來SelectionChange在DataChanged事件之前觸發,這意味着您將抓取當前選定的單元格而不是先前的單元格。我不認爲你能避免這種競爭狀態,因爲事件是異步但可能你可以跟蹤過去和當前的選擇是這樣的:
myBinding.addHandlerAsync(Office.EventType.BindingSelectionChanged, onSelectionChange);
var startRow, rowCount, startColumn, columnCount;
var previousStartRow, previousRowCount, previousStartColumn, previousColumnCount;
function onSelectionChange(eventArgs){
// save "previous" selected cell into previous variables
previousStartRow = startRow;
previousRowCount = rowCount;
previousStartColumn = startColumn;
previousColumnCount = columnCount;
// re-assign the current selected to the eventArgs
startRow = eventArgs.startRow;
rowCount = eventArgs.rowCount;
startColumn = eventArgs.startColumn;
columnCount = eventArgs.columnCount;
}
function onBindingDataChange(eventArgs){
eventArgs.binding.getDataAsync({
startRow: previousStartRow,
rowCount: previousRowCount,
startCol: previousStartColumn,
columnCount: previousColumnCount
}, function(result){
// Do whatever you need with result.value.
// You might want to compare and update your in-memory representation of the data.
});
}
我測試了它和它的作品......不是很好,並可能有更好的跟蹤多個層面的方式,但它似乎工作。理想情況下,DataChanged事件可以在像VSTO這樣的EventArgs中實現。手指穿過它的到來很快:)
注 - 它似乎有複製&粘貼工作,但這種解決方案將需要加強,以處理以下情況:
- 細胞拖動ñ」降帶「+」號。
- 多個小區中選擇,然後更新單個細胞用鍵盤和輸入
更新1 - 另一種情況
- 當更新綁定的邊緣細胞,並按下回車鍵就會造成選擇在綁定範圍之外。在選擇更改事件沒有揭開序幕,並在上述解決方案將失敗
1.用戶拖放操作如何工作?這些事件是否總是一個接一個地出現?此外,它看起來像多個用戶在工作表上時,所有用戶都將獲得'BindingSelectionChanged'事件。如何區分在這種情況下更改的選擇。 – renil
您有兩種選擇:或者等到用戶在拖放操作之後更改其選擇(這適用於上面的解決方案),或者修改解決方案以檢查*當前*選定範圍的更改。 –
您能否詳細解釋選項2?我們如何跟蹤大型Excel表中的變化?任何推薦的方法?第一個選項對用戶有很大的依賴性,除非辦公室api觸發拖動結束事件。 – renil