本帖最后由 小仙 于 2025-3-31 16:10 编辑
- class StatementF extends GC.Spread.CalcEngine.Functions.AsyncFunction {
- cellRequestMap: Map<string, CellRequest>;
- constructor(name: string) {
- super(name, 1, 255);
- this.cellRequestMap = new Map<string, CellRequest>();
- }
- defaultValue(): any {
- return "Loading";
- }
- evaluateAsync(context: GC.Spread.CalcEngine.AsyncEvaluateContext): any {
- const args = arguments;
- const p = arguments[0]
- console.log(context)
- const sheetId = p.ctx.source.id
- if (args.length != 3) {
- context.setAsyncResult("参数异常");
- return;
- }
- // 获取context的内存地址
- // 将请求参数收集到全局数组中
- this.cellRequestMap.set(sheetId + '-' + p.row + '-' + p.col, {
- formula: args[1],
- argStr: args[2],
- context: context
- });
- // 设置默认值,默认值是文本类型,和其他的一起的时候会报#NAME?
- context.setAsyncResult("Loading...");
- }
- }
复制代码 异步函数的实现如代码,现在有个问题,就是我用map收集请求的时候,多个sheet中相同行列的单元格会被覆盖,所以我加了一个sheetId,但貌似不是实际sheet的id,因为现在如果我有清除单元格的操作或者修改单元格内容的时候,我没法在map中找到对应sheet的对应单元格的请求去把它从map里删除,不然我把map中的请求统一发起的时候,还是会把已经清除了的单元格原来的请求触发
|