现在有一个需求,我新建了一个模板文件,spread,里面设置了多个公式,但单元格的公式是形如ASUM("A1","yyyy,mm,xxxx"),其中ASUM是我定义好的异步函数,
A1是常量不需要管,yyyy是年,mm是月份,xxxx是code,异步函数需要把年月code都传到后端请求数据回来
- 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;
- console.log(args)
- const p = arguments[0]
- if (args.length != 3) {
- context.setAsyncResult("参数异常");
- return;
- }
- // 将请求参数收集到全局数组中
- this.cellRequestMap.set(p.row + '-' + p.col, {
- formula: args[1],
- argStr: args[2],
- context: context
- });
- // 设置默认值,默认值是文本类型,和其他的一起的时候会报#NAME?
- context.setAsyncResult("Loading...");
- }
- }
复制代码
然后我们想要做一个生成功能,基于上面的模板文件
生成过程理想情况:点击生成按钮,把模板文件加载,然后把表格中的单元格设置了公式并且公式的格式符合上面内容的,都替换成ASUM("A1","2025,3,1001"),
这能实现吗,能暴力遍历工作簿吗,还是有更好的api支持
|