找回密码
 立即注册

QQ登录

只需一步,快速开始

Yu-Xian

注册会员

8

主题

42

帖子

170

积分

注册会员

积分
170
Yu-Xian
注册会员   /  发表于:2024-5-16 13:18  /   查看:247  /  回复:8
1金币
本帖最后由 Richard.Huang 于 2024-5-22 14:20 编辑

产品:SpreadJS
版本:V16.2.2

您好:目前excel有使用【数组公式】,也就是说数组公式只需要在公式输入完成后按Ctrl+Shift+Enter组合键,系统会自动将大括号加上举例来说L3这一个字段 使用此功能
image.png818846435.png

目前也有加上此段程序spread.options.allowDynamicArray= true
将档案上传到SpreadJS前端画面时
image.png59910887.png

再点击该字段一次 该字段会变成#N/A
image.png747786864.png
看该字段公式中原有数组公式{}部分已不见,只剩下公式
image.png186168517.png
请问目前是否支持数组公式这功能呢或者是需要什么处理才能正常运行再麻烦老师们协助
谢谢

image.png145502623.png
image.png748814086.png

8 个回复

倒序浏览
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-5-16 13:42:53
沙发
您好,请您导入文件后,再执行spread.options.allowDynamicArray= true,看能否解决您的问题。猜测是因为您导入文件后,原本设置在工作簿上的属性被覆盖了,因此出现了该问题
回复 使用道具 举报
Yu-Xian
注册会员   /  发表于:2024-5-21 10:20:57
板凳
老师您好:
目前指定数组公式为true后,查询带出原版档案时可正常显示公式计算结果。
image.png981419372.png


只是点击两下字段后再移到别的字段会导致#N/A情况
image.png473820800.png

image.png42025145.png



Excel发生此问题时是点击该单元格后按下Ctrl-Shift-Enter即可
image.png494425658.png

但是目前使用spreadJS组件点击单元格后按下Ctrl-Shift-Enter并不会重算

希望达到的效果是 点击单元格后 按下Ctrl-Shift-Enter可以带出数组公式的结果

请问这边是否需要什么特别的处理吗?


谢谢

回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-5-21 11:49:04
地板
Yu-Xian 发表于 2024-5-21 10:20
老师您好:
目前指定数组公式为true后,查询带出原版档案时可正常显示公式计算结果。

针对您的问题,也许您可以参考注册一个Ctrl+Shift+Enter的快捷键,在该快捷键对应的指令中即设置动态公式开启,又重算当前位置的单元格
  1. var command = {
  2.   canUndo: true,
  3.   execute: function (context, options, isUndo) {
  4.     var Commands = GC.Spread.Sheets.Commands;
  5.     options.cmd = "recalculatedynamicarray";
  6.     if (isUndo) {
  7.       Commands.undoTransaction(context, options);
  8.       return true;
  9.     } else {
  10.       Commands.startTransaction(context, options);
  11.       context.options.allowDynamicArray = true; // 允许动态数组
  12.       var sheet = context.getSheetFromName(options.sheetName);
  13.       var ranges = sheet.getSelections();
  14.       // 获取ranges字符串
  15.       var rangesStr = options.sheetName + "!"+GC.Spread.Sheets.CalcEngine.rangesToFormula(
  16.         ranges
  17.       );
  18.       console.log(rangesStr);
  19.       spread.calculate(GC.Spread.Sheets.CalculationType.all, rangesStr);
  20.       Commands.endTransaction(context, options);
  21.       return false;
  22.     }
  23.   },
  24. };
  25. var commandManager = spread.commandManager();
  26. commandManager.register("recalculatedynamicarray", command);
  27. spread
  28.   .commandManager()
  29.   .setShortcutKey(
  30.     "recalculatedynamicarray",
  31.     GC.Spread.Commands.Key.enter,
  32.     true,
  33.     true,
  34.     false,
  35.     false
  36.   );
复制代码
回复 使用道具 举报
Yu-Xian
注册会员   /  发表于:2024-5-21 15:44:02
5#
老师您好:
所以目前数组公式的组件,若直接在单元格上进行Ctrl-Shift-Enter是不支持数组公式重算,若要达到这个需求只能自行客制处理是吗
还是说其实组件原本已具备重算功能,只是我们撰写上有问题导致无法重算呢
再麻烦老师协助,以便评估是否要自行开发
谢谢

回复 使用道具 举报
AKA_HSTS
注册会员   /  发表于:2024-5-21 16:58:40
6#
本帖最后由 AKA_HSTS 于 2024-5-21 17:45 编辑

楼主这个问题感觉有点没太理解,通过Ctrl+Shift+Enter 生成的公式叫 array formula。这是spreadjs产品本身也已经支持的一个功能。
用法是,选中一个单元格或者一个range,然后输入“=”进入编辑状态开始输入公式,等公式输入完成后,按Ctrl+Shift+Enter退出编辑状态,则自动出发array formula。这时候如果spread有绑定formula textbox(也就是类似excel中的公式编辑栏),可以看到在这里显示的公式也是加了大括号的。
另外楼主说的双击单元格然后点击其他单元格会导致#N/A, 猜测应该是这个array formula 生成的时候是选择了一个range来写这个公式的(验证方式就是可以看相邻单元格中公式跟它完全一样),然后双击后相当于进入了编辑状态,一旦进入编辑状态,大括号便会自动消失,这时候再点击其他单元格相当于是触发了编辑公式,使其回退成一个非 array formula, 这时候这个非array  formula 区域是位于当初设定array formula的区域中的,触发了非法操作导致的。你可以在dev console 给spread上绑定个GC.Spread.Sheets.Events.InvalidOperation 事件来看看。

评分

参与人数 1金币 +200 收起 理由
Richard.Huang + 200 很给力!

查看全部评分

回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-5-21 17:31:51
7#
AKA_HSTS 发表于 2024-5-21 16:58
楼主这个问题感觉有点没太理解,通过Ctrl+Shift+Enter 生成的公式叫 array formula。这是spreadjs产品本身 ...

回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-5-21 17:32:29
8#
您可以按照楼上同学的回复进行测试,看能否解决您的问题,如果依然存在问题,建议提供一份可供我们复现的demo,方便我们进行测试和调研
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:5 天前
9#
您好,请问楼主的问题是否得到解决,如果仍然存在问题,欢迎继续跟帖询问
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部