找回密码
 立即注册

QQ登录

只需一步,快速开始

肉夹馍汉堡
金牌服务用户   /  发表于:2023-8-14 11:33  /   查看:2149  /  回复:12
本帖最后由 肉夹馍汉堡 于 2023-8-15 11:16 编辑



如图,E2单元格,在Gcexcel中显示为true,线下的excel也为true

image.png155079955.png

demo.ssjson

2.46 KB, 下载次数: 89

12 个回复

倒序浏览
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2023-8-14 12:29:12
沙发
您好,我并没有复现您所说的问题,请问可以提供更详细的信息或者一个可以供我们复现的Demo吗
image.png299102477.png
回复 使用道具 举报
肉夹馍汉堡
金牌服务用户   /  发表于:2023-8-15 11:16:37
板凳
Richard.Huang 发表于 2023-8-14 12:29
您好,我并没有复现您所说的问题,请问可以提供更详细的信息或者一个可以供我们复现的Demo吗

image.png429589843.png

请在spreadJS中测试,D2单元格显示错误
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2023-8-15 12:23:37
地板
本帖最后由 Richard.Huang 于 2023-8-15 12:24 编辑

您好,通过分析您的ssjson文件,我发现您D2单元格的value默认设置为了true,也就是说您如果导入文件后不计算,就只会显示改value值,您如果通过导入的选项让他导入后计算,便不会出现您所说的显示错误的问题:

您的ssjson文件:
image.png718752746.png
设置导入选项:
spread.import(file, function () { }, function () { }, {
    fullRecalc: true
});

完整版demo请查看附件

SpreadJS导入ssjson.rar

1.35 KB, 下载次数: 72

回复 使用道具 举报
肉夹馍汉堡
金牌服务用户   /  发表于:2023-8-16 10:09:05
5#
Richard.Huang 发表于 2023-8-15 12:23
您好,通过分析您的ssjson文件,我发现您D2单元格的value默认设置为了true,也就是说您如果导入文件后不计 ...

image.png10725096.png
使用官方在线表格示例:https://demo.grapecity.com.cn/SpreadJS/WebDesigner/index.html
操作步骤:
1.插入数据表范围为A到B
2.将A列的数据格式设置为文本
3.D2 输入0.5
4.E2和F2公式分别为:=A2>D和=B2>D2
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2023-8-16 11:40:09
6#
您好,SpreadJS的计算结果和Excel是一致的,如果想要比较建议用数字类型,因为文本比较时,使用的是该字符串的ASCII值,0字符串的ASCII值为48
image.png684975280.png
image.png629867858.png
回复 使用道具 举报
肉夹馍汉堡
金牌服务用户   /  发表于:2023-8-16 13:56:20
7#
Richard.Huang 发表于 2023-8-16 11:40
您好,SpreadJS的计算结果和Excel是一致的,如果想要比较建议用数字类型,因为文本比较时,使用的是该字符 ...

image.png100153807.png


如图,在非数据表范围内,字符与数值比较,显示为False,而在数据表范围内为true
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2023-8-16 15:53:56
8#
本帖最后由 Richard.Huang 于 2023-8-16 16:03 编辑

您好,我复现了您的问题
首先告诉您的是,SpreadJS的计算结果和Excel的计算结果是一致的,也就是说上面的0>0.5的结果不一致的情况两款产品都是同样的结果。
image.png25921935.png
那么为什么同样的0>0.5计算结果不同呢,其实问题不出在是否是数据表区域,而在于您是先设置了单元格格式再赋值还是先赋值再设置单元格格式的问题。

我们需要明确一个知识,对于单元格的值分为我们可以查看的text()和它本身的值value(),您可以理解为昵称和真实姓名。

先设置单元格格式,那么Excel会认为您接下来的赋值会是一个字符串,您将0填写进该单元格,Excel会将text()和value()都设置为字符串'0'

如果先赋值,Excel没有任何准备,它会自动根据您输入的内容来判断赋值的内容是什么格式的,您输入了0进去,Excel优先认为他是一个数值,然后您将该单元格设置为文本格式,Excel仅仅只会将text()改为字符串'0',而value并不会更改,仍然是数字0.(昵称可以改,真实姓名不能改)

接下来到了比较大小的环节,公式的计算用的是value值

于是乎,先改格式再赋值进行的计算为"'0'>0.5",计算引擎会自动将字符串视为ASCII值,即“48>0”,结果为TRUE
而先赋值再改格式进行的计算为“0>0.5”,前者本身就是数值,因此不会比较所谓的ASCII一说,结果就为FALSE
test.gif790356139.png


回复 使用道具 举报
肉夹馍汉堡
金牌服务用户   /  发表于:2023-8-17 19:34:56
9#
Richard.Huang 发表于 2023-8-16 15:53
您好,我复现了您的问题
首先告诉您的是,SpreadJS的计算结果和Excel的计算结果是一致的,也 ...

目前发现,gcexcel的判断和上述逻辑不太一致,请见附件ssjson

demo (1).ssjson

6.13 KB, 下载次数: 73

回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2023-8-18 09:40:51
10#
您好,请问您用gcExcel进行计算的时候,在设置单元格内容的方式是不是用的setValue呢,gcExcel没有UI操作,只能通过setValue去赋值哦,也就是我前面提到的直接更改value(真实姓名)

单元格用于计算的值就是value,因此判断逻辑依然成立呢,两个单元格都直接setValue(0),那么比较的时候都是0>0.5都是数字,因此结果一样没有问题呀

如果您想要复现,和SpreadJS、Excel相同的计算结果,您应该先建立一个test.xlsx文件并按照我们之间讨论的方式,一个先格式再设值,一个先设值再格式。然后将计算的步骤放到gcExcel中来,我做了测试,没有问题,逻辑依然成立

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