找回密码
 立即注册

QQ登录

只需一步,快速开始

表格6666
金牌服务用户   /  发表于:2023-12-12 10:33  /   查看:2447  /  回复:8
1金币
本帖最后由 Richard.Huang 于 2024-1-26 15:29 编辑

产品:SpreadJS
版本:V16.2.2
调研编号:SJS-21849

一个将金额转换成中文大写的公式,SpreadJS计算错误,excel计算正确
公式为:
  1. =SUBSTITUTE(SUBSTITUTE(IF(-DOLLAR(B17),IF(B17>0,,"负")&TEXT(INT(ABS(B17)+0.5%),"[dbnum2]G/通用格式元;;")&TEXT(RIGHT(DOLLAR(B17,2),2),"[dbnum2]0角0分;;整"),),"零角",IF(B17^2<1,,"零")),"零分","整")
复制代码

SpreadJS配置说明
  1. 开启了:GC.Spread.CalcEngine.ExcelCompatibleCalcMode = true;
  2. 配置了:GC.Spread.Common.CultureManager.culture("zh-cn");
复制代码

其他说明:
修改公式为:
  1. =SUBSTITUTE(SUBSTITUTE(IF(-DOLLAR(B17),IF(B17>0,,"负")&TEXT(INT(ABS(B17)+0.5%),"[DBNum2]General元;;")&TEXT(RIGHT(DOLLAR(B17,2),2),"[dbnum2]0角0分;;整"),),"零角",IF(B17^2<1,,"零")),"零分","整")
复制代码
SpreadJS能正确计算,但是下载后这个公式excel无法正确计算
这个问题非常紧急,请问下有解决办法吗




128-公式1.xlsx

8.69 KB, 下载次数: 0

最佳答案

查看完整内容

目前,临时的解决方案是通过代码重写TEXT公式,以避免本身的兼容性问题。[/backcolor] 请参考下面的代码 需要注意的是,这些代码请在加载workbook之前执行

8 个回复

倒序浏览
最佳答案
最佳答案
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-12-12 10:33:01
来自 3#
本帖最后由 Richard.Huang 于 2024-1-26 15:30 编辑

目前,临时的解决方案是通过代码重写TEXT公式,以避免本身的兼容性问题。

请参考下面的代码
  1.         var TEXT_FN = GC.Spread.CalcEngine.Functions.findGlobalFunction("TEXT");
  2.         TEXT_FN_Eva = TEXT_FN.evaluate;
  3.         TEXT_FN.evaluate = function (value, format) {
  4.             if (format && typeof format === 'string' && format.indexOf('G/通用格式') > -1) {
  5.                 format = format.replace(/G\/通用格式/g, "General");
  6.             }
  7.             return TEXT_FN_Eva.apply(this, arguments);
  8.         }
复制代码
需要注意的是,这些代码请在加载workbook之前执行
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-12-12 15:19:43
2#
您好,此问题已经提交研发调用        SJS-21849

后续进展会在帖子中更新,
回复 使用道具 举报
表格6666
金牌服务用户   /  发表于:2023-12-12 19:16:56
4#
Richard.Ma 发表于 2023-12-12 17:36
目前,临时的解决方案是通过代码重写TEXT公式,以避免本身的兼容性问题。

...

这么改后表格计算是正确了,对其他功能有什么影响吗
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-12-13 09:51:22
5#
理论上不会有任何影响,只是修改重写了TEXT公式的计算逻辑
但是需要注意的是,此前这个公式应用的是英文文化的格式字符串。所以在中文环境会有问题

现在改了以后,也是一样,只能在中文excel下使用。如果你又用了英文版本的excel,也会是#value
回复 使用道具 举报
表格6666
金牌服务用户   /  发表于:2023-12-18 14:51:11
6#
GCExcel有方法改吗,我们有个场景是通过GCExcel生成,然后导出
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-12-18 18:16:39
7#
你是指gcexcel也有相同的问题吗? 这里目前错误的情况是怎样的

如果只是导出的话,理论上来说设置公式Text(123,[dbnum2]G/通用格式元;;")不应该有问题的,因为最后还是得在excel中来显示 ,还是说gcexcel中,也有需求是获取到这个公式单元格的结果吗?

回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2023-12-28 17:11:42
8#
您好,请问楼主的问题是否得到解决,如果仍然存在问题,欢迎继续跟帖询问
回复 使用道具 举报
Richard.HuangSpreadJS 开发认证
超级版主   /  发表于:2024-1-26 15:30:19
9#
您好,由于您长时间未回帖,本贴就先作结帖处理了,后续如果有其他新的问题,欢迎继续发新帖询问
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部