Foxtable(狐表)用户栏目专家坐堂 → eval出错啦


  共有6359人关注过本帖树形打印复制链接

主题:eval出错啦

帅哥哟,离线,有人找我吗?
ywlin521
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:95 积分:1029 威望:0 精华:0 注册:2011/8/13 14:57:00
eval出错啦  发帖心情 Post By:2013/4/15 16:24:00 [只看该作者]

.NET Framework 版本:2.0.50727.4984
Foxtable 版本:2012.11.29.1
错误所在事件:Eval函数计算错误,表达式为:a0+200
详细错误信息:
System.Runtime.InteropServices.COMException (0x800A000D): 类型不匹配: 'a0'
   在 MSScriptControl.ScriptControlClass.Eval(String Expression)
   在 Foxtable.GlobalProperties.Eval(String O111, DataRow O0, Boolean OOOO1OO0l0, Boolean Oll11, Boolean OOO00lOO11)

 

怎么解决呀?

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.foxdb

[此贴子已经被作者于2013-4-15 18:01:46编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
程兴刚
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:7258 积分:40773 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2013/4/15 16:27:00 [只看该作者]

您的代码不完善,表达式不合法所致!

 回到顶部
帅哥哟,离线,有人找我吗?
ywlin521
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:95 积分:1029 威望:0 精华:0 注册:2011/8/13 14:57:00
  发帖心情 Post By:2013/4/15 17:15:00 [只看该作者]

文件已经上传,老程 狐爸等高人帮忙调试下

 回到顶部
帅哥哟,离线,有人找我吗?
ywlin521
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:95 积分:1029 威望:0 精华:0 注册:2011/8/13 14:57:00
  发帖心情 Post By:2013/4/15 17:16:00 [只看该作者]

问题1:第2行是正常的,第4行就出错,按代码原理,不应该出错,差别:row(4)(第一列)的内容是=1000,而row(2)(第一列)的内容是1000,就差一个等号

 

问题2:第3行是正常的,第5行就出错,按代码原理,不应该出错,差别:row(5)(第二列)的内容是=200,而row(3)(第二列)的内容是200,也就差一个等号

 

问题3:ROW(3)(第三列):执行加法,最后变成了字符串连接操作,其他运算是正常的

 

先解决上述问题吧,已经调试2天了,是仿EXCEL的功能来编程的

[此贴子已经被作者于2013-4-15 17:24:04编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
ywlin521
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:95 积分:1029 威望:0 精华:0 注册:2011/8/13 14:57:00
  发帖心情 Post By:2013/4/15 17:56:00 [只看该作者]

已成功了

自定义eval3函数,可以成功仿EXCEL功能

调用:在DRAWCELL中调用

具体:

Dim s As String = e.Row(e.col.Name)
If s.StartsWith("=") Then
    e.Text = Functions.Execute("Eval3",s,e.Row)
End If

 

Dim s As String = args(0)
Dim r As Row = args(1)
'判断是否是表达式,不是表达式,转换为数值返回
If s.StartsWith("=") = False Then
    Return s
Else
    s = s.TrimStart("=")
   
    If IsNumeric(s) Then '如果是单个数字,直接返回
        Return Val(s)
    End If
    '扫描表达式里的 [列名]
    Dim strCols As String = Nothing
    For Each c As Col In r.Table.Cols
        If s.Contains("[" & c.Name & "]") Then
            strCols &= "[" & c.Name & "]|"
        End If
    Next
   
    If strCols Is Nothing Then  '不存在[列名],但是个表达式,返回
        Return eval2(s,r)
    Else  '存在[列名]
        strCols = strCols.TrimEnd("|")
        Dim saCols() As String = strCols.Split("|")
       
        Dim sCol As String = Nothing
        Dim sValue As String = Nothing
        For j As Integer = 0 To saCols.Length - 1
            sCol = saCols(j)
            sCol = sCol.TrimStart("[")
            sCol = sCol.TrimEnd("]")
           
            sValue = Functions.Execute("Eval3",r(sCol),r)
            s = s.Replace(saCols(j),sValue)

        Next
       
        Return eval2(s,r)
    End If
End If

[此贴子已经被作者于2013-4-15 18:00:43编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
ywlin521
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:95 积分:1029 威望:0 精华:0 注册:2011/8/13 14:57:00
  发帖心情 Post By:2013/4/15 17:57:00 [只看该作者]

请狐爸给个 精 吧

 回到顶部