vuexcel-utils
Version:
Utils for vuexcel
70 lines (64 loc) • 2.27 kB
text/typescript
import RequestContext = Excel.RequestContext;
import SelectionChangedEventArgs = Excel.SelectionChangedEventArgs;
import Workbook = Excel.Workbook;
/**
* 监听当前的格子变化,实时返回给handler
* @param {function} handler - 回调
* */
let eventResult: any = null
export function addMonitor(handler: Function): void {
// 移除后添加
removeMonitor(function () {
Excel.run(function (ctx: RequestContext) {
eventResult = ctx.workbook.onSelectionChanged.add(function (event: SelectionChangedEventArgs) {
return Excel.run(function (context: RequestContext) {
let workbook: Workbook = context.workbook
let selectedRange: Excel.Range = workbook.getSelectedRange()
selectedRange.load('address')
return context.sync()
.then(function () {
handler(null, selectedRange.address, eventResult)
return context.sync()
})
})
})
console.info('Event handler is running')
return ctx.sync()
// // 给targetAddress初始化
// let workbook: Workbook = ctx.workbook
// let selectedRange: Excel.Range = workbook.getSelectedRange()
// selectedRange.load('address')
// return ctx.sync().then(function () {
// handler(null, selectedRange.address, eventResult)
// return ctx.sync()
// })
})
.catch((e: Error) => {
handler(e)
})
})
}
/**
* @param {EventResult} eventResult - 事件对象
* @param {Function} handler - 回调函数
* */
export function removeMonitor(handler?: Function): void {
if (eventResult && eventResult.context) {
Excel.run(eventResult.context, function (context) {
eventResult.remove();
return context.sync()
.then(function () {
handler()
eventResult = null
})
}).catch(e => {
handler(e)
})
} else {
handler()
}
}
export default {
addMonitor,
removeMonitor
}