找回密码
 立即注册

QQ登录

只需一步,快速开始

行云数据
金牌服务用户   /  发表于:2023-3-22 11:34  /   查看:2417  /  回复:6
本帖最后由 Lynn.Dou 于 2023-3-22 17:42 编辑

问题描述:(生产反馈问题
gcexcel获取excel表单和spreadjs显示不一致(Excel软件打开显示通过)。比如:


gcexcel获取excel表单sheet1中的B2单元格值为:不通过;但是通过spreadjs获取B2单元格只显示:通过;



问题DEMO(代码+excel底稿文件)详见附件;

FormulaPanel.zip

3.98 MB, 下载次数: 328

6 个回复

倒序浏览
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-3-22 17:30:04
沙发
您好,
问题已复现,已将此问题记录下来进一步调研原因,待有进展贴中通知您。
本贴先做保留处理。
回复 使用道具 举报
行云数据
金牌服务用户   /  发表于:2023-4-7 16:53:19
板凳
Lynn.Dou 发表于 2023-3-22 17:30
您好,
问题已复现,已将此问题记录下来进一步调研原因,待有进展贴中通知您。
本贴先做保留处理。

请问这个问题有进展了吗?我们生产环境又出现了
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-4-7 19:47:32
地板
收到,我们跟进一下。
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-4-11 17:29:56
5#
更新进展,经调研此问题属于浮点数问题的限制,
如果想保持计算结果一致,您可以在导入excel文件时设置setDoNotRecalculateAfterOpened(true),即导入后不重算公式。
示例代码如下:
  1. Workbook workbook = new Workbook();
  2.         XlsxOpenOptions options = new XlsxOpenOptions();
  3.         options.setDoNotRecalculateAfterOpened(true);
  4.         workbook.open("v33.xlsx",options);
复制代码

回复 使用道具 举报
行云数据
金牌服务用户   /  发表于:2023-4-18 14:42:57
6#
Lynn.Dou 发表于 2023-4-11 17:29
更新进展,经调研此问题属于浮点数问题的限制,
如果想保持计算结果一致,您可以在导入excel文件时设置set ...

这个设置处理逻辑是什么呢?会引发其他的问题么?
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-4-18 18:01:47
7#
行云数据 发表于 2023-4-18 14:42
这个设置处理逻辑是什么呢?会引发其他的问题么?

setDoNotRecalculateAfterOpened(true),即导入后不重算公式。
也就是不会对您导入工作簿的公式做重新计算。
举个例子,正常来说,您在SJS导出文件的时候,json中存储的已经是SJS计算后的公式值了。
如果此时导入GcExcel,GcExcel会根据公式字符串,走自己的计算引擎重新计算一遍。
由于“浮点数问题的限制”,出现了贴中所述情况。
如果setDoNotRecalculateAfterOpened(true),就不会再计算,会根据SJS导出文件的公式值来存储了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部