【发布时间】:2021-04-23 10:13:13
【问题描述】:
我正在开发一个 Excel 插件,它允许使用表 onChanged 将更改的表单元格值与外部环境同步。并注意到非常烦人的结果,如果用户高速更改值,一些值会被跳过。我写了一个简单的 sn-p 用于在表格单元格更改后更改颜色,如果您键入的速度如此之快,有些单元格不会改变颜色。可以修复吗?
这是一个例子:
对于单元格 #15 和 #18 根本不会触发事件。
和代码sn-p:
public cellChange = async (event: Excel.TableChangedEventArgs): Promise<any> =>
{
try
{
await Excel.run({delayForCellEdit: true}, async context =>
{
try
{
context.runtime.enableEvents = false;
if (event.changeType === Excel.DataChangeType.rangeEdited)
{
let worksheet = context.workbook.worksheets.getActiveWorksheet();
let address = event.address;
let str = "Cell address: " + address + " START";
var start = new Date().getTime();
let rng = worksheet.getRange(address);
rng.format.fill.color = "#D0DC94";
await context.sync();
var end = new Date().getTime();
var time = end - start;
str = str + `-END:${time}ms`;
console.log(str);
}
}
catch (error)
{
let e: Error = error;
let mssg = e.message;
}
finally
{
context.runtime.enableEvents = true;
}
return context.sync();
});
}
catch (error)
{
let e: Error = error;
let mssg = e.message;
if (error instanceof OfficeExtension.Error)
{
console.log("Debug info: " + JSON.stringify(error.debugInfo));
}
}
}
【问题讨论】:
-
我注意到您调用了
context.runtime.enableEvents = false,因为我们在异步模式下运行,如果用户在您调用context.runtime.enableEvents = true之前进行了一些更改,该事件可能会被禁用
标签: javascript excel typescript office-js