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

QQ登录

只需一步,快速开始

yin_tb

中级会员

53

主题

198

帖子

987

积分

中级会员

积分
987

微信认证勋章

yin_tb
中级会员   /  发表于:2021-11-17 18:46  /   查看:1722  /  回复:7
1金币
如题,我也搜了帖子,看了马老师的帖子:【新提醒】数字类型如何设置为0不显示? - Spread.NET专区 - ASP.NET 求助中心 - 葡萄城产品技术社区 (grapecity.com.cn)这个是excel默认的计算规则,如果要避免这种情况的话,可以先对A1,B1做空值判断 IF(B1="","",IF(A1="","",A1*B1))如果我是A,B,C,D,4个列甚至更多列,D=A+B-C这种公式,用您的IF格式判断会很麻烦,另外,公式单元格类型如果是数值型,用“”,我感觉会报错的。
我在spread设计器中试了,比如:D1=IF(A1+B1=0,"",A1+B1)  ,D1单元格设为数值型,在设计器中可以,但在开发环境中,报错,不可以。


我又看了另一个版主的帖子:
【新提醒】单元格里的0值显示 - Spread.NET专区 - XAML 求助中心 - 葡萄城产品技术社区 (grapecity.com.cn)
这应该是我想要的,里面:
这种场景一般在Excel中的做法是使用IF 判断是否需要计算,或者如过计算结果是0,则显示空。
例如 =IF(ISNUMBER(A1),SUM(A1,A2),"")


或者可以设置一个format  #,##0; (#,##0); "";@
当数据为0 时什么都不显示。不过这样A1A2有值,之和正好为0 的时候也不显示。


这句format,我没明白,这个format是给哪个对象设置的?在spread中可以用吗?怎以写的?谢谢




最佳答案

查看完整内容

其实,如果是要给sheet设置不显示0的话,可以直接整体设置 fpSpread1.ActiveSheet.DisplayZero = false; 但是这里要同时设置LegacyBehaviors为style,这个需要在设计界面的属性中设置

7 个回复

倒序浏览
最佳答案
最佳答案
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-11-17 18:46:23
来自 6#
其实,如果是要给sheet设置不显示0的话,可以直接整体设置

fpSpread1.ActiveSheet.DisplayZero = false;
但是这里要同时设置LegacyBehaviors为style,这个需要在设计界面的属性中设置
image.png362246398.png
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-11-18 09:38:48
2#
format是给目标单元格设置的,也就是出计算结果的单元格,但是如原贴所讲,这样是有缺陷的,会把正常的计算为0的结果也显示为空
回复 使用道具 举报
yin_tb
中级会员   /  发表于:2021-11-18 09:51:21
3#
本帖最后由 yin_tb 于 2021-11-18 11:15 编辑

我还是有点晕。spread.ActiveSheet.Cells(row,col).XXX  ,没有format属性呀,怎么写的,是定义CellType来写吗?我的单元格是定义为CellType.NumberCellType的


回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-11-18 11:15:22
4#
一般来说通过下面的代码就可以设置,但是我测试了一下,对这个格式字符串无效,这个可能是由于内部解析错误的原因。如果是实现目前的需求的话,我建议你就用公式这种办法

  1. fpSpread1.AsWorkbook().ActiveSheet.ActiveCell.NumberFormat = "" ;
复制代码
回复 使用道具 举报
yin_tb
中级会员   /  发表于:2021-11-18 11:18:27
5#
本帖最后由 yin_tb 于 2021-11-18 12:05 编辑

你说的公式的方法,是你那个在公式中定义IF吧,如果我是A,B,C,D,E很多列,那用IF嵌套写,那不得晕了。所以,我用如下写法:
前提,我是绑定到datatable的。并且列的类型全是数值型。
我定义公式是这样定义的:IF(A1+B1-C1=0,"",A1+B1-C1)   这样,在spread设计器中可以。
但在开发环境中不行。当然,在代码中,双“”号我转义了,公式是对的。
发现会有format....异常,不计算了。



回复 使用道具 举报
yin_tb
中级会员   /  发表于:2021-11-18 14:01:50
7#
搞定了,还是马老师历害,看了那么多帖子,都没人提到这办法,这里面还暗藏玄机来。不过,我发现,不需要LegacyBehaviors为style。我只设了fpSpread1.ActiveSheet.DisplayZero = false;就可以了,我也不去查为什么了,呵呵。谢谢马老师。
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-11-18 14:05:51
8#
不客气,DisplayZero = false就是设置这个的,对应于excel中的选项设置
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部