找回密码
 立即注册

QQ登录

只需一步,快速开始

CloudJSTI

金牌服务用户

36

主题

98

帖子

332

积分

金牌服务用户

积分
332

[已处理] 公式无效?

CloudJSTI
金牌服务用户   /  发表于:2023-4-27 13:42  /   查看:915  /  回复:7
B单元格的值根据A单元格的值变化,这种情况用户自己在A单元格输入的时候可以触发B单元格的公式,但是代码对A单元格赋值的话,就触发不了B单元格的公式
这个是B单元格的公式


  1. =IF(D19="","",IFERROR(INDEX(B28:B51,MATCH(D19,A28:A51,0)),""))
复制代码
公式追踪不太好,因为我的excel是动态展示的,我不清楚是对哪个单元格进行了setDataSource,也不知道哪个单元格引用了setDataSource后的单元格

ValueChanged也无法监听这种代码赋值,这种情况下,有没有通用的方法区监听,然后重新进行公式计算呢

7 个回复

倒序浏览
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-4-27 15:55:42
沙发
您好,
“但是代码对A单元格赋值的话,就触发不了B单元格的公式”
您的意思是,代码对单元格赋值后,公式并没有重新计算吗?
这边本地写了一个公式模拟此问题,通过setValue修改单元格值后,公式是会自动更新的。
如果是我理解有误,您结合一个具体的demo详细说明下,复现此问题的步骤以及期待的结果,这边再验证看看。
image.png620169677.png
回复 使用道具 举报
CloudJSTI
金牌服务用户   /  发表于:2023-4-27 15:58:50
板凳
  1. this.spread.getSheet(i).setDataSource(dataSource);
复制代码

我使用的是setDataSource去设置单元格的值,单元格是使用了数据源绑定;
下面是我的自适应行高的方法
  1. autoFitRowOnSetDataSource: function (sheet) {
  2.       const rowCount = sheet.getRowCount(GC.Spread.Sheets.SheetArea.viewport);
  3.       for (let i = 0; i < rowCount; i++) {
  4.         sheet.autoFitRow(i);
  5.       }
  6.     },
复制代码
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-4-27 18:29:05
地板
本帖最后由 Lynn.Dou 于 2023-4-27 18:30 编辑

setDataSource设置值,但引入此单元格的公式没有重算吗?
这边测试也没有出现此问题呀,如下图:
image.png730565795.png
您直接提供一个可复现此问题的demo吧,这边结合您的代码分析下是什么原因。
或者您可以试下 sheet.recalcAll() ,该接口的作用是让公式重算。
回复 使用道具 举报
CloudJSTI
金牌服务用户   /  发表于:2023-4-28 09:24:26
5#
附件里面是我的ssjson和spreadjs引入后处理的vue页面方法

1682644836995(1).jpg398048095.png
您打开ssjson后,可以看到C20单元格是个下拉选项,初始化的时候,会给这个C20单元格赋一个值,D20单元格会随着C20变化,依据公式展示出来对应的值;
我现在的情况就是对C20赋值后,D20单元格公式不变化,
image.png238828734.png
C20单元格使用了数据绑定,
image.png249795836.png
vue文件 中,这段代码是绑定数据源赋值的操作

detailsFilling.vue

21.64 KB, 下载次数: 19

重量偏差.ssjson

171.08 KB, 下载次数: 26

回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-4-28 14:32:04
6#
根据您提供的资料整理了一个demo(如附件),测试是可以正常计算公式的。如下图:

image.png715006408.png
猜测您是不是将数据源中的value写成字符串类型了,即“18”,修改为数值类型 18 再测试看看。

demo.zip

10.43 KB, 下载次数: 23

回复 使用道具 举报
CloudJSTI
金牌服务用户   /  发表于:2023-4-28 15:56:24
7#
谢谢,确实是这个原因
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-4-28 16:05:20
8#
您客气了, 问题解决了就好,那本帖就先结贴了,有问题欢迎另开新帖交流。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部