Foxtable(狐表)用户栏目专家坐堂 → 求助自定义函数


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

主题:求助自定义函数

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


加好友 发短信
等级:七尾狐 帖子:1684 积分:16374 威望:0 精华:0 注册:2013/7/31 13:03:00
求助自定义函数  发帖心情 Post By:2020/6/1 8:36:00 [只看该作者]

关于内部函数至今还是似懂非懂。
比如下一段代码是将excel差旅费审批记录表导入到狐表“差旅费记录表1”,在窗口表T1进行操作。
希望将此代码还用于其它类似Excel表的导入,所以想将这段代码写成内部函数。
代码中红色部分因不同Excel表而异,如何将其表达为参数就懵懂了,故求助

Dim cm As WinForm.ComboBox = e.Form.Controls("ComboBox2")

Dim T1 As Table = e.Form.Controls("Table1").Table

Dim cmd As new SQLCommand

cmd.C

Dim r As Row

If cm.Value = "差旅费" Then

    Dim i As Integer = 0

    Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog

    dlg.Filter= "Excel2007文件|*.xlsx"

    If dlg.ShowDialog = DialogResult.Ok Then

        Dim Book As New XLS.Book(dlg.FileName)

        Dim Sheet As XLS.Sheet = Book.Sheets(0)

        For n As Integer = 1 To Sheet.Rows.Count -1

            If sheet(n,0).Text <> "" Then

                If sheet(n,25).Text.trim() <> "已通过"  Then

                    MessageBox.Show("差旅费列表中存在没有审批通过的记录,请处理!")

                    'Exit For

                    Return

                End If

            Else

                Exit For

            End If

        Next

        Dim nms() As String = {"审批编号","提交时间","申请人","申请人部门","申请人账号","部门","出差人员","出差任务","出发时间","出发地","到达时间","到达地","当日返回","车费","油补","过道费","餐补","宿费","其他费用","费用小计","详情说明","总费用小计","预借金额","预借金额大写","报销总额","当前审批状态","审批人","抄送人","审批流程","已打印","已领取","已报销","备注"}

        For n As Integer = 1 To Sheet.Rows.Count -1

            Dim spbh As String = sheet(n,0).Text

            If spbh.Length < 2 Then

                Exit For

            End If

            cmd.CommandText = "select count(*) f rom{差旅费记录表1} where 审批编号=  '" & spbh & "'"

            If cmd.ExecuteScalar = 0 Then

                r = T1.AddNew

                For m As Integer = 0 To nms.Length - 1

                    If m = 29 Or m = 30  Or m = 31 Then '处理逻辑列

                        r(nms(m)) = False

                    ElseIf 13<= m <=19 Or m = 21 Or m = 22 Or m = 24 Then '处理诸费用列

                        r(nms(m)) = Sheet(n,m).Value.split("")(0)

                    Else

                        r(nms(m)) = Sheet(n,m).Value

                    End If

                Next

                i = i + 1

            End If

        Next

    End If

    MessageBox.Show("审批表添加完毕,共添加" & i & "行")

End If


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


加好友 发短信
等级:超级版主 帖子:107381 积分:546178 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/6/1 9:04:00 [只看该作者]

函数
Dim T1 As Table = args(0)

Dim nms() As string = args(1)

Dim tn As string = args(2)

Dim cmd As new SQLCommand

cmd.C

Dim r As Row

    Dim i As Integer = 0

    Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog

    dlg.Filter= "Excel2007文件|*.xlsx"

    If dlg.ShowDialog = DialogResult.Ok Then

        Dim Book As New XLS.Book(dlg.FileName)

        Dim Sheet As XLS.Sheet = Book.Sheets(0)

        For n As Integer = 1 To Sheet.Rows.Count -1

            If sheet(n,0).Text <> "" Then

                If sheet(n,25).Text.trim() <> "已通过"  Then

                    MessageBox.Show("差旅费列表中存在没有审批通过的记录,请处理!")

                    'Exit For

                    Return -1

                End If

            Else

                Exit For

            End If

        Next

        For n As Integer = 1 To Sheet.Rows.Count -1

            Dim spbh As String = sheet(n,0).Text

            If spbh.Length < 2 Then

                Exit For

            End If

            cmd.CommandText = "select count(*) f rom {" & tn & "} where 审批编号=  '" & spbh & "'"

            If cmd.ExecuteScalar = 0 Then

                r = T1.AddNew

                For m As Integer = 0 To nms.Length - 1

                    If r(nms(m)).IsBoolean Then '处理逻辑列

                        r(nms(m)) = False

                    ElseIf r(nms(m)).IsNumeric andalso Sheet(n,m).Value like "*元*" Then '处理诸费用列

                        r(nms(m)) = Sheet(n,m).Value.split("元")(0)

                    Else

                        r(nms(m)) = Sheet(n,m).Value

                    End If

                Next

                i = i + 1

            End If

        Next

    End If

    MessageBox.Show("审批表添加完毕,共添加" & i & "行")

End If



调用

Dim cm As WinForm.ComboBox = e.Form.Controls("ComboBox2")

Dim T1 As Table = e.Form.Controls("Table1").Table

If cm.Value = "差旅费" Then

Dim nms() As String = {"审批编号","提交时间","申请人","申请人部门","申请人账号","部门","出差人员","出差任务","出发时间","出发地","到达时间","到达地","当日返回","车费","油补","过道费","餐补","宿费","其他费用","费用小计","详情说明","总费用小计","预借金额","预借金额大写","报销总额","当前审批状态","审批人","抄送人","审批流程","已打印","已领取","已报销","备注"}

Dim tn As String = "差旅费记录表1"

    Functions.Execute("xx函数",T1,nms,tn )

End If

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


加好友 发短信
等级:七尾狐 帖子:1684 积分:16374 威望:0 精华:0 注册:2013/7/31 13:03:00
  发帖心情 Post By:2020/6/1 10:29:00 [只看该作者]

收到回复代码,测试通过。回复太快了。
收到回复代码,如获珍宝,爱不释手,一定仔细玩味,争取更上一层楼。
真心感恩狐表,使我这个菜鸟能逐渐上手,开发出解决企业实际需求的应用项目。
真心感谢有点蓝,不厌其烦地使出真本事帮助菜鸟们。没有你们的帮助,不知道还要在黑暗中摸索多久。


 回到顶部