以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  求助自定义函数  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=150513)

--  作者:czy66ds
--  发布时间: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


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