已成功了,列的类型可以是文本
自定义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