请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

吴钦飞

注册会员

4

主题

8

帖子

30

积分

注册会员

积分
30
  • 168

    金币

  • 4

    主题

  • 8

    帖子

吴钦飞
注册会员   /  发表于:2025-4-3 14:09  /   查看:102  /  回复:6
10金币
需求:

    * 跨工作簿使用 VLOOKUP 公式

方案:

    VLOOKUP( value , array , colindex , approx )

    第二个参数(array),传入一个自定义异步公式,如下

    LwCrossWorkbookRef([文件的完整路径]工作表名!范围)

疑问:

    1. VLOOKUP 的第二个参数(array)可以使用异步自定义公式吗?
    2. 异步自定义公式 应该返回 什么结构的数据



最佳答案

查看完整内容

您好,可以参考以下代码实现: spread.options.allowDynamicArray = true; var result = [ ["苹果", 5], ["香蕉", 3], ["橙子", 8], ]; var Test = function () {}; Test.prototype = new GC.Spread.CalcEngine.Functions.AsyncFunction("Test"); Test.prototype.defaultValue = function () { return "Loading..."; }; Test.prototype.evaluateAsync = function (context, arg) { setTimeout(() = ...

6 个回复

倒序浏览
最佳答案
最佳答案
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2025-4-3 14:09:20
来自 6#
您好,可以参考以下代码实现:



spread.options.allowDynamicArray = true;

var result = [
  ["苹果", 5],
  ["香蕉", 3],
  ["橙子", 8],
];
var Test = function () {};
Test.prototype = new GC.Spread.CalcEngine.Functions.AsyncFunction("Test");
Test.prototype.defaultValue = function () {
  return "Loading...";
};
Test.prototype.evaluateAsync = function (context, arg) {
  setTimeout(() => {
    context.setAsyncResult(new GC.Spread.CalcEngine.CalcArray(result));
  }, 3000);
};
sheet.addCustomFunction(new Test());
sheet.setFormula(1, 1, "Test()");

sheet.setFormula(6, 1, '=VLOOKUP("苹果", Test(), 2, FALSE)')


image.png935103759.png
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2025-4-7 10:05:18
2#
您好,VLOOKUP 函数的第二个参数可以直接传入数据(数组常量),而不一定非要引用单元格区域。

比如:=VLOOKUP("苹果", {"苹果", 5; "香蕉", 3; "橙子", 8}, 2, FALSE)

image.png52569273.png

因此,理论上来说也可以结合异步公式使用,返回的结构参考上面的例子即可。
回复 使用道具 举报
吴钦飞
注册会员   /  发表于:2025-4-7 12:27:21
3#
本帖最后由 吴钦飞 于 2025-4-7 12:34 编辑

dummy-1234567890
回复 使用道具 举报
吴钦飞
注册会员   /  发表于:2025-4-7 12:33:16
4#
Joestar.Xu 发表于 2025-4-7 10:05
您好,VLOOKUP 函数的第二个参数可以直接传入数据(数组常量),而不一定非要引用单元格区域。

比如:=V ...

class LwCrossWorkbookRef extends GC.Spread.CalcEngine.Functions.AsyncFunction {
  // ...

  evaluateAsync(context) {
   
    // ...

    // Excel 中的数组常量为 {"苹果", 5; "香蕉", 3; "橙子", 8}

    // 那在异步函数里 “返回” 的 data 是怎样的数据类型呢?
    // 字符串?对象?数组?

    setTimeout(() => {
      context.setAsyncResult(data);
    }, 1000 * 3);
  }
}
回复 使用道具 举报
不吐葡萄皮
初级会员   /  发表于:2025-4-7 13:46:18
5#
context.setAsyncResult(new GC.Spread.CalcEngine.CalcArray([["苹果",1],["香蕉",2],["橙子",3]]));
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:昨天 09:34
7#
您好,由于本帖较长时间没有回复,本帖先做结贴处理了,后续如您有其他问题,欢迎您开新帖提问。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部