eightfish 发表于 2015-5-8 15:13:00

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, 那么我又该如何解决这个问题呢?

Alice 发表于 2015-5-8 19:00:00

回复 1楼eightfish的帖子

感谢你对该问题的反馈。
很抱歉回复晚了。
你提到使用了公式CROSSSHEET进行除法运算时候出错。
我进行测试,未能找到你所使用的公式,为了帮助你解决问题,有一些地方需要和你确认:
请问你的平台是spread com版么?请提供一个简单的重现问题的Demo,我帮你看看。

eightfish 发表于 2015-5-11 14:35:00

回复 2楼Alice的帖子

我使用的是SpreadCOMSetup.exe安装出的,应该是ActiveX组件
我正在简化项目的代码,实现最小Demo, 请稍等,因为这是VB6的项目,很古老,我对于这样的项目不熟练
项目中实现方式是 左边一个tree, 右边一个fpspread sheet, 点击tree上的节点, 变化当前fpspread sheet 内容,现在出现问题的情况是两个sheet的交互中,我本来猜测是跨Sheet的公式都会有问题,但是经过测试只有在除法的时候,才会出现,所以我估计. Formula对于除法是有些限制的,以你的了解来看,是不是这样呢?

Alice 发表于 2015-5-11 17:56:00

回复 3楼eightfish的帖子

你好。
谢谢你的反馈。
从你的描述来看,应该是支持的。
但是要看你具体的场景是什么,然后我们在帮你去判断是问题还是不支持。
感谢你正在制作Demo,我会跟进你的问题。

eightfish 发表于 2015-5-12 13:58:00

回复 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 不认可使用除法,这个是在代码逻辑上有意为之的,您说呢?

eightfish 发表于 2015-5-12 16:06:00

这个问题我已经解决了,原因很简单,就是除法的分母不能为0
因为CellType为Number,所以在Cell没有设值的情况下,GetFloat(row, col, &quot;&quot;) = 0
.Formula = B3 / B7
在.Recal之后 .Text 会在没有报错的情况设定为 “”
之后 Spread Sheet 会认为这个Cell 虽然有Formula,但是不合法,更为有趣的是 认为这个Cell 没有使用,最后导致了这个问题

最后谢谢你的帮助,但愿我的经历会给别人有所启示

Alice 发表于 2015-5-12 18:03:00

回复 6楼eightfish的帖子

感谢你的反馈。
你对此问题的深入调查,对其他人是有帮助的。
整个调查过程有理有据,逻辑清晰。
为了表示对你的感谢,稍后赠送金币作为奖励。

为了给你提供更优质的服务,请对本次服务进行评分。我们会认真对待你提出的宝贵意见,谢谢      http://gcdn.gcpowertools.com.cn/attachment.aspx?attachmentid=10062
页: [1]
查看完整版本: spread 8.0下,两个跨Sheet的Cell相除的公式,spread不识别问题