找回密码
 立即注册

QQ登录

只需一步,快速开始

Remon
金牌服务用户   /  发表于:2023-3-8 10:46  /   查看:2557  /  回复:11
本帖最后由 Lynn.Dou 于 2023-3-9 10:10 编辑

现有一个已存在的ssjson文件,其中内容,通过桌面设计器打开一切正常,该ssjson的体积有83kb


我用GC读取该ssjson文件,并读取 名为【Results】的sheet里的B2和B3两个单元格的值

读取出来的值,和我用设计器打开肉眼看到的值, 是不一样的

=========================

在上述问题的前提下,我试着把读取到的workbook,重新写回到硬盘上,命名为一个新的ssjson文件, 新写出的ssjson体积只有17kb,并且使用桌面设计器打不开

demo见提供附件,附件中的ssjson为第一步提到的原始文件

demo中的java文件为测试类

复现测试时,请注意修改java类的package以及ssjson文件的根路径

我在GC5.1.1 遇到的问题,后来升级到6.0.0依然时相同的问题

ssjson问题.zip

5.71 KB, 下载次数: 169

11 个回复

倒序浏览
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-3-8 14:28:17
沙发
本帖最后由 Lynn.Dou 于 2023-3-9 10:10 编辑

您好,
问题1:
使用 官网组件版设计器 测试,对于公式 “=IF(差异比对_交通运输!F4<>0,0,1)”,组件版设计器的计算结果为0,而Gcexcel计算结果为1,二者出现不一致。
image.png140215453.png
从测试结果来看,Gcexcel计算结果是与Excel保持一致的,所以这边会从SpreadJS角度调研,如有进展会在贴中通知您。(SJS-17324)

问题2:
使用Gcexcel 6.0.0导出的ssjson(见附件),经测试可以在SpreadJS V15/ V16正常加载, 未复现您描述的加载不成功问题。
请问您所述的桌面版设计器是哪个版本呢?
您可以测试下附件ssjson文件,看是否可以正常加载。

after.ssjson

77.76 KB, 下载次数: 155

回复 使用道具 举报
Remon
金牌服务用户   /  发表于:2023-3-8 14:53:04
板凳
Lynn.Dou 发表于 2023-3-8 14:28
您好,
问题1:
使用 官网组件版设计器 测试,对于公式 “=IF(差异比对_交通运输!F40,0,1)”,组件版设计 ...

测试了下,这个ssjson是可以打开的,原来是我导出的方式写的不对,那这第二个问题是ok的
麻烦第一个问题有进展了及时告知哈
感谢
回复 使用道具 举报
Remon
金牌服务用户   /  发表于:2023-3-8 14:55:22
地板
Lynn.Dou 发表于 2023-3-8 14:28
您好,
问题1:
使用 官网组件版设计器 测试,对于公式 “=IF(差异比对_交通运输!F40,0,1)”,组件版设计 ...

有个信息反馈下,我试着把这个ssjson用GC导出为excel
然后打开excel发现第一张sheet里的数据都没有,因此在excel模式下,Results里的B2 B3两个单元格是1 和 比对通过

我们第一个问题是不是跟这个有些联系
希望这个信息能有帮助  
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-3-8 16:11:08
5#
本帖最后由 Lynn.Dou 于 2023-3-9 10:09 编辑

前提:
SpreadJS 支持字符串数字参与计算,而Excel是不支持的。
在您提供的ssjson文件中,“火车票清单”sheet中单元格的value为字符串类型,如下图:
image.png762742004.png
SpreadJS是支持字符串数字参与计算,所以“差异比对_交通运输”sheet 中是显示了计算值。
但是Excel是不支持的呀,所以GcExcel导出的excel中,差异比对_交通运输”sheet 显示的公式结果为0。
您可以尝试将Excel中的字符串转换为数字类型,会发现此时公式就可以正常显示了。
image.png843801879.png
image.png481464538.png
要想避免这样的问题,需要从文件源头入手,避免出现字符串类型数字。

设置下方代码,SpreadJS就可以与Excel一样,不支持字符串参与计算了。
GC.Spread.CalcEngine.ExcelCompatibleCalcMode = true

这样描述您可以理解吗?


回复 使用道具 举报
Remon
金牌服务用户   /  发表于:2023-3-8 16:19:52
6#
Lynn.Dou 发表于 2023-3-8 14:28
您好,
问题1:
使用 官网组件版设计器 测试,对于公式 “=IF(差异比对_交通运输!F40,0,1)”,组件版设计 ...

我基于后来的猜测,直接用GC读取了第一张sheet【差异比对_交通运输】里边的数据,发现gc读到的数据都是0 如图

2DD7548E-341E-471d-A6C3-40E85165E281.png87102049.png

但其实里边数据是这样的 如下图


image.png953684387.png


回复 使用道具 举报
Remon
金牌服务用户   /  发表于:2023-3-8 16:24:46
7#
Lynn.Dou 发表于 2023-3-8 16:11
前提:
SpreadJS 支持字符串数字参与计算,而Excel是不支持的。
在您提供的ssjson文件中,“火车票清单” ...

收到 我试一下 感谢
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-3-8 17:35:21
8#
您客气了,有进展这边再通知您。
回复 使用道具 举报
Remon
金牌服务用户   /  发表于:2023-3-9 09:46:10
9#
Remon 发表于 2023-3-8 16:19
我基于后来的猜测,直接用GC读取了第一张sheet【差异比对_交通运输】里边的数据,发现gc读到的数据都是0  ...

我在这个基础上又试了一下
我用桌面设计器,打开这个ssjson
把隐藏的飞机票sheet中对应的几个列使用分列的方式把其格式处理成了数字
然后GC读取到的结果是这样的了,总结下来就是处理了格式,gc就能读取到数据,说明处理成数字格式,涉及到的公式就生效了
image.png158252257.png

这样是不是可以判定为GC其实并不支持字符串数字参与公式计算,GC和 EXCEL引擎的效果是一致的
image.png381038512.png

评分

参与人数 1金币 +500 收起 理由
Lynn.Dou + 500 赞一个!

查看全部评分

回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-3-9 10:09:03
10#
经调研,原因与您所述的一致,抱歉前面的描述有误,已做修改。
GcExcel 与Excel一样,不支持字符串参与计算,所以解决方案就是从ssjson 数据入手,将字符串类似数字修改为数值类型。
为了避免出现此类问题,您可以开启下方代码,使SpreadJS、Gcexcel、Excel一样,不支持字符串参与计算。
GC.Spread.CalcEngine.ExcelCompatibleCalcMode = true
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部