请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

brmxj
金牌服务用户   /  发表于:2021-10-19 19:30  /   查看:1728  /  回复:7
本帖最后由 Clark.Pan 于 2021-11-5 14:33 编辑

附件的报表“减免税”sheet中,B13单元格有公式,且在spreadJs中显示有值但是使用GcExcel的worksheet.getRange("B13").getValue()的时候得到的却是“0.0”

先调用workbook的dirty()和calculate()方法,结果也是一样。

report_2260.ssjson

459.46 KB, 下载次数: 94

7 个回复

倒序浏览
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-10-20 13:42:22
推荐
经调研,出现该问题是因为B16是一个文本值"212372.29",因为Excel的公式只计算数值,因此算出来的结果是0,你可以把你的json导出到Excel可以看到下面的结果。
image.png757152709.png

SpreadJS默认是会计算文本值的公式的,因此如果想跟Excel一样的结果,请用下面的代码
GC.Spread.CalcEngine.ExcelCompatibleCalcMode = true


如果想正常计算,请把B16的单元格值改为数值,也就是不带引号的值。
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-10-20 17:36:34
推荐
brmxj 发表于 2021-10-20 17:15
3712与3682这两数字也差太远了吧

抱歉,这边看错了,问题出在这个三个单元格是文本,在Excel中他们是不计算的,而SpreadJS是默认计算的。跟一楼同理,设置计算属性后就与Excel一致了。或者修改这个三个单元格为数值。 image.png564276732.png
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-10-20 09:27:41
沙发
问题已复现,这边需要做进一步调研,此贴为你改为保留处理,有进展会在本帖更新。
回复 使用道具 举报
brmxj
金牌服务用户   /  发表于:2021-10-20 14:41:27
地板
我又上传了一份附件,其中“资产负债表”Sheet的H46单元格也出现了这个问题,但是和公式相关的所有单元格都是数字类型,且所有数据皆为手动输入,请问这是什么原因

report_1864.ssjson

167.87 KB, 下载次数: 89

回复 使用道具 举报
brmxj
金牌服务用户   /  发表于:2021-10-20 14:45:34
5#
brmxj 发表于 2021-10-20 14:41
我又上传了一份附件,其中“资产负债表”Sheet的H46单元格也出现了这个问题,但是和公式相关的所有单元格都 ...

报表显示3712.00,GcExcel获取到的是3682.0
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-10-20 15:58:33
6#
brmxj 发表于 2021-10-20 14:45
报表显示3712.00,GcExcel获取到的是3682.0

如果想要获取与单元格上显示的内容,请使用getText,这个获取的是格式化之后的值。

而getValue获取的是单元格的真实值,获取出来是3682.0是因为数字在内部都存为double ,这个行为在Excel的存储策略也就是如此,属于产品设计。
回复 使用道具 举报
brmxj
金牌服务用户   /  发表于:2021-10-20 17:15:30
7#
Derrick.Jiao 发表于 2021-10-20 15:58
如果想要获取与单元格上显示的内容,请使用getText,这个获取的是格式化之后的值。

而getValue获取的 ...

3712与3682这两数字也差太远了吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部