以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 想实现前列中内容能自动计算,汇总到后一列中 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=87362) |
-- 作者:szizu -- 发布时间:2016/7/9 8:56:00 -- 想实现前列中内容能自动计算,汇总到后一列中 具体的问题: 我想建一个这样的表: 其中列三名称为表达示列;为字符型(或者备注型);列四为数据列,为单精度 然后在列三中增加行,输入如:‘1+2+3+4+5*20+(15+6)’ 想实现列四对应行,直接能计算列三中的内容,得出结果为‘131’的方法
|
-- 作者:szizu -- 发布时间:2016/7/9 9:17:00 -- 求各位专家指点呀 [此贴子已经被作者于2016/7/12 11:44:24编辑过]
|
-- 作者:Hyphen -- 发布时间:2016/7/9 9:51:00 -- 参考http://www.foxtable.com/webhelp/scr/1277.htm |
-- 作者:szizu -- 发布时间:2016/7/9 10:48:00 -- 假定希望根据第一列 名称为(计算式)输入的计算公式,在第二列 名称为(结果) 得出计算结果,可以将DataColChanged事件代码设为: If e.DataCol.Name = "计算式" Then Eval采用VBScript语法,没有方法和属性的概念,所有的计算都是通过函数完成的。 通过测试,完美解决。 非常感谢!!! 但我还想进一步实现以下功能; 就是在计算式列中可以加入标注,标注内容不计算。 如: ‘计算式’列内容为: 1+2+3+4+5【连续相加】 ‘结果’列中为15,而不是出现出错提示 |
-- 作者:Hyphen -- 发布时间:2016/7/9 11:04:00 -- 计算前把标注内容去掉 Dim s As String = "1+2+3+4+5【连续相加】" Dim idx = s.IndexOf("【") If idx > -1 Then s = s.SubString(0,idx) Output.Show(s) Output.Show(Eval(s))
|
-- 作者:szizu -- 发布时间:2016/7/9 11:22:00 -- 上面的明白了,但如果出现多个标注的情况 如: ‘计算式’列内容为: 1+2+3+4+5【连续相加】+2+4+6+8【偶数相加】 ‘结果’列中为35,而不是出现出错提示
|
-- 作者:Hyphen -- 发布时间:2016/7/9 11:42:00 -- 道理一样,看5楼,找出标注,去除 |
-- 作者:szizu -- 发布时间:2016/7/11 10:14:00 -- 研究了您给的代码,进行测试,成功 以下为我改的代码,相当好用(有不好的地方,望指点) If e.DataCol.Name = "计算式" Then If e.DataRow.IsNull("计算式") Then e.DataRow("结果") = Nothing Else Dim s As String = e.DataRow("计算式") Dim idx1 =s.Indexof("【") Dim idx2 =s.Indexof("】") Dim X = idx2 - idx1 + 1 Do While idx1 > -1 s = s.remove(idx1,X) idx1 =s.Indexof("【") idx2 =s.Indexof("】") X = idx2 - idx1 + 1 Loop e.DataRow("结果") = Eval(s,e.DataRow) End If End If |
-- 作者:大红袍 -- 发布时间:2016/7/11 10:25:00 -- 参考代码
Dim str As String = "1+2+3+4+5【连续相加】+2+4+6+8【偶数相加】" |