找回密码
 立即注册

QQ登录

只需一步,快速开始

Andy.C

注册会员

16

主题

62

帖子

186

积分

注册会员

积分
186
Andy.C
注册会员   /  发表于:2024-4-2 10:55  /   查看:2912  /  回复:11
背景:

在后端有一个较大的Excel,前端需要按需读取sheet,且保持公式完整.
此时如果只返回单个sheet,sheet中存在跨sheet引用(包含公式引用,数据验证引用),那么在计算时会出现ref错误。
但是如果把所有关联sheet一起返回,则又存在性能上不必要的浪费。
期望结果:
能单独返回sheet,且不会出现ref错误

11 个回复

倒序浏览
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-4-2 13:52:46
沙发
您是期望保留公式引用的sheet,其他sheet删除,然后将工作簿返回吗?

如果是的话 ,可以参考这篇文章,找到所有依赖的sheet .
https://gcdn.grapecity.com.cn/showtopic-202323-1-1.html

如果不是上述需求,可以再详细描述下。
回复 使用道具 举报
Andy.C
注册会员   /  发表于:2024-4-2 14:04:08
板凳
Ellia.Duan 发表于 2024-4-2 13:52
您是期望保留公式引用的sheet,其他sheet删除,然后将工作簿返回吗?

如果是的话 ,可以参考这篇文章, ...

不是,我是希望不返回其他sheet的时候公式不会出现ref错误。  
回复 使用道具 举报
AKA_HSTS
注册会员   /  发表于:2024-4-2 15:27:45
地板
Andy.C 发表于 2024-4-2 14:04
不是,我是希望不返回其他sheet的时候公式不会出现ref错误。

期望公式计算不出现ref错误就需要去判断公式引用的内容,这个可能需要通过sheet.getPrecedents(row, col) 接口来实现,判断这个接口返回的值中sheetName 是否跟当前sheet同名。
然后再对筛选后的满足需求的单元格调用spread.calculate()传入对应的计算范围来计算。
回复 使用道具 举报
Andy.C
注册会员   /  发表于:2024-4-2 17:42:22
5#
AKA_HSTS 发表于 2024-4-2 15:27
期望公式计算不出现ref错误就需要去判断公式引用的内容,这个可能需要通过sheet.getPrecedents(row, col) ...

并不是我想要的。
回复 使用道具 举报
Andy.C
注册会员   /  发表于:2024-4-2 17:48:32
6#
Ellia.Duan 发表于 2024-4-2 13:52
您是期望保留公式引用的sheet,其他sheet删除,然后将工作簿返回吗?

如果是的话 ,可以参考这篇文章, ...

我测试了下用相同名称的空sheet去代替有数据的引用sheet,在不修改数据的情况下,结果是对的
但又一个新的问题,如果我有一个公式 B2 =引用sheet!A1+B1,   当在前端页面修改B1后,B2就等于B1了,因为引用sheet在前端是个空值,我期望的结果是,引用sheet虽然不返回,但是计算的时候还存在
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-4-3 09:26:49
7#
您好,我整理下您的问题与需求:
问题:只返回一个sheet ,如果此sheet存在其他sheet的公式引用,此时会报错ref错误

需求:所以您希望,在只返回一个sheet,公式不报错且可以正常计算。

对此,解决方案如楼上热心用户所说,您可以先判断出ref错误的公式,然后通过sheet.getPrecedents(row, col) 接口获取所引用的单元格,
如果接口返回的sheetName与当前sheetName不一致,此时创建新的sheet ,并将此单元格的值/公式写入。 并进行递归。


回复 使用道具 举报
不吐葡萄皮
注册会员   /  发表于:2024-4-3 12:16:32
8#
我感觉楼主可以使用返回一个完整sheet+关联(或剩下所有)的Sheet只保留value。这样应该那个sheet的公式完整可计算,并且性能上应该也可以。

评分

参与人数 1金币 +200 收起 理由
Ellia.Duan + 200

查看全部评分

回复 使用道具 举报
Andy.C
注册会员   /  发表于:2024-4-3 14:06:24
9#
不吐葡萄皮 发表于 2024-4-3 12:16
我感觉楼主可以使用返回一个完整sheet+关联(或剩下所有)的Sheet只保留value。这样应该那个sheet的公式完 ...

现在用的就是这种方式哈,  但是关联sheet 只保留value对我来说还是太慢了哈,因为这个只保留value就可能存在很多对我无用的数据。   期望的是只返回跟我这个完整sheet有关的数据
回复 使用道具 举报
不吐葡萄皮
注册会员   /  发表于:2024-4-3 15:08:35
10#
本帖最后由 不吐葡萄皮 于 2024-4-3 17:49 编辑
Andy.C 发表于 2024-4-3 14:06
现在用的就是这种方式哈,  但是关联sheet 只保留value对我来说还是太慢了哈,因为这个只保留value就可能 ...

那就是用其他人回复的那个getPrecedents来只加载完整sheet计算需要的关联sheet.
但是我感觉这个方案和加载所有value的做法相比优化率不大。楼主可以先试试把其他sheet的所有数字置0,文本置为"",看看优化了多少。
我这边实践发现的是公式占用了大多内存,格式和value内存占用不大。

评分

参与人数 1金币 +200 收起 理由
Ellia.Duan + 200

查看全部评分

回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部