spread 8.0下,两个跨Sheet的Cell相除的公式,spread不识别问题
你好,1. 有2个Sheet, Sheet1 和 Sheet2
2. 在Sheet1上,B3 = 1000,B7 = 500
3. 在Sheet2 上, 在B2上定义公式 =CROSSSHEET("Sheet1!$B$3") + CROSSSHEET("Sheet1!$B$7")
在F2 上面定义公式 : =CROSSSHEET("Sheet1!$B$3")/CROSSSHEET("Sheet1!$B$7")
结果与期望不符
期望Sheet2的B2为1500
Sheet2的F2为2
结果Sheet2的B2为1500
Sheet2 的F2 不显示
然后我调试了代码:
For Row = 1 To SpSource.DataRowCnt
For Col = 1 To SpSource.DataColCnt
....
Next Col
Next Row
SpSource.DataColCnt 这个属性的值为2 , 而实际上F2上定义了除法公式, 这个属性值一定是6
之后我又测试了 “-”“*”两种情况,只有“/”的时候,公式不会被SpreadSheet所识别
那么问题来了,这是不是Spread sheet控件的一个bug? 如果不是bug, 那么我又该如何解决这个问题呢? 回复 1楼eightfish的帖子
感谢你对该问题的反馈。
很抱歉回复晚了。
你提到使用了公式CROSSSHEET进行除法运算时候出错。
我进行测试,未能找到你所使用的公式,为了帮助你解决问题,有一些地方需要和你确认:
请问你的平台是spread com版么?请提供一个简单的重现问题的Demo,我帮你看看。 回复 2楼Alice的帖子
我使用的是SpreadCOMSetup.exe安装出的,应该是ActiveX组件
我正在简化项目的代码,实现最小Demo, 请稍等,因为这是VB6的项目,很古老,我对于这样的项目不熟练
项目中实现方式是 左边一个tree, 右边一个fpspread sheet, 点击tree上的节点, 变化当前fpspread sheet 内容,现在出现问题的情况是两个sheet的交互中,我本来猜测是跨Sheet的公式都会有问题,但是经过测试只有在除法的时候,才会出现,所以我估计. Formula对于除法是有些限制的,以你的了解来看,是不是这样呢? 回复 3楼eightfish的帖子
你好。
谢谢你的反馈。
从你的描述来看,应该是支持的。
但是要看你具体的场景是什么,然后我们在帮你去判断是问题还是不支持。
感谢你正在制作Demo,我会跟进你的问题。 回复 4楼Alice的帖子
根据我昨天调试代码的情况来看 “CrossSheet”这个公式是代码里面自定义的,
If InStr(UCase(formula), "CROSSSHEET") <> False Then
SpDest.AddCustomeFunctionExt "CROSSSHEET", 1, 5, 1
End If
然后在处理的时候呢, 使用遍历sheet 上所有使用过的单元格的方式,解析执行
Dim MaxRow As Integer
Dim MaxColAs Integer
With SpDest
MaxRow = .DataRowCnt
MaxCol = .DataColCnt
If Row = 0And Col = 0 Then
MaxRow = .MaxRow
MaxCol = .MaxCol
End If
End With
Dim row As Integer
Dim col As Integer
For row = 1To MaxRow
For col = 1 To MaxCol
If InStr(SpDest.Formula,"CROSSSHEET") Then
'Exectute.....
End If
Next col
Next row
所以呢 一开始我以为这个"CROSSSHEET" 是Spread Sheet 自带的功能, 但是现在看来是个CustomFunction,再后来看到这个"CROSSSHEET" 并没有设置Event,所以只是一个书写在Formula里面的标示
之所以"/"很特殊,是因为设置了Cell的Formula之后,“+”"-" "*"都会显示为0.0
而“/”Spread Sheet上的Cell 显示为空,以此来判断,在这种情况下 Spread Sheet 不认可使用除法,这个是在代码逻辑上有意为之的,您说呢? 这个问题我已经解决了,原因很简单,就是除法的分母不能为0
因为CellType为Number,所以在Cell没有设值的情况下,GetFloat(row, col, "") = 0
.Formula = B3 / B7
在.Recal之后 .Text 会在没有报错的情况设定为 “”
之后 Spread Sheet 会认为这个Cell 虽然有Formula,但是不合法,更为有趣的是 认为这个Cell 没有使用,最后导致了这个问题
最后谢谢你的帮助,但愿我的经历会给别人有所启示 回复 6楼eightfish的帖子
感谢你的反馈。
你对此问题的深入调查,对其他人是有帮助的。
整个调查过程有理有据,逻辑清晰。
为了表示对你的感谢,稍后赠送金币作为奖励。
为了给你提供更优质的服务,请对本次服务进行评分。我们会认真对待你提出的宝贵意见,谢谢 http://gcdn.gcpowertools.com.cn/attachment.aspx?attachmentid=10062
页:
[1]