以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]表数据复制到另一张表中,格式分割问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=117811)

--  作者:xndd
--  发布时间:2018/4/19 13:16:00
--  [求助]表数据复制到另一张表中,格式分割问题
老师好!

    我有2张表:
第一张有一个 时间 列 ,值: 08:29 12:10 12:12 17:30,中间用空格分隔
第二张有4个对应列,
图片点击可在新窗口打开查看此主题相关图片如下:1111.png
图片点击可在新窗口打开查看

我用如下代码,将第一张表数据复制到第二张表没问题,但是遇到需要自己处理的,如何写代码?请指教!谢谢!

Dim Cols1() As String = {"姓名","部门","日期"}
Dim Cols2() As String = {"姓名","部门","考勤日期"}
For Each dr1 As DataRow In DataTables("原始记录2").Select("")
    Dim dr2 As DataRow = DataTables("考勤报表").AddNew()
    For i As Integer = 0 To Cols1.Length -1
        dr2(Cols2(i)) = dr1(Cols1(i))
    Next
Next

另外问一句,为什么有些人复制粘贴上来的代码有颜色?

--  作者:xndd
--  发布时间:2018/4/19 13:52:00
--  
我改成这样,但是提示“索引数组超出了界限”,我的值范围哪里有问题?

Dim Cols1() As String = {"姓名","部门","日期","时间"}
Dim Cols2() As String = {"姓名","部门","考勤日期","上午签到","上午签退","下午签到","下午签退"}
For Each dr1 As DataRow In DataTables("原始记录2").Select("")
    Dim dr2 As DataRow = DataTables("考勤报表").AddNew()
    For i As Integer = 0 To Cols1.Length -1
        If i = 3 Then
            Dim Values() As String
            Values = dr1(Cols1(3)).split(" ")
            dr2(Cols2(3)) = Values(0)
            dr2(Cols2(4)) = Values(1)
            dr2(Cols2(5)) = Values(2)
            dr2(Cols2(6)) = Values(3)
        Else
            dr2(Cols2(i)) = dr1(Cols1(i))
        End If
    Next
Next

--  作者:有点甜
--  发布时间:2018/4/19 14:13:00
--  

试试

 

Dim Cols1() As String = {"姓名","部门","日期","时间"}
Dim Cols2() As String = {"姓名","部门","考勤日期","上午签到","上午签退","下午签到","下午签退"}
For Each dr1 As DataRow In DataTables("原始记录2").Select("")
    Dim dr2 As DataRow = DataTables("考勤报表").AddNew()
    For i As Integer = 0 To Cols1.Length -1
        If i = 3 Then
            Dim Values() As String
            Values = dr1(Cols1(3)).split(" ")
            If values.length > 0 Then dr2(Cols2(3)) = Values(0)
            If values.length > 1 Then dr2(Cols2(4)) = Values(1)
            If values.length > 2 Then dr2(Cols2(5)) = Values(2)
            If values.length > 3 Then dr2(Cols2(6)) = Values(3)
        Else
            dr2(Cols2(i)) = dr1(Cols1(i))
        End If
    Next
Next

[此贴子已经被作者于2018/4/19 15:48:19编辑过]

--  作者:xndd
--  发布时间:2018/4/19 15:44:00
--  
原来是我的值的问题,有的4个,有的2个,有的没有。我改成这样子:

Dim Cols1() As String = {"姓名","部门","日期","时间"}
Dim Cols2() As String = {"姓名","部门","考勤日期","上午签到","上午签退","下午签到","下午签退"}
For Each dr1 As DataRow In DataTables("原始记录2").Select("")
    Dim dr2 As DataRow = DataTables("考勤报表").AddNew()
    For i As Integer = 0 To Cols1.Length -1
        If i = 3 Then
            If dr1(Cols1(3)) <> "" Then 
            Dim Values() As String
            Values = dr1(Cols1(3)).split(" ")
            Select Case Values.Length
                Case 1
                    dr2(Cols2(3)) = Values(0)
                Case 2
                    dr2(Cols2(3)) = Values(0)
                    dr2(Cols2(4)) = Values(1)
                Case 3
                    dr2(Cols2(3)) = Values(0)
                    dr2(Cols2(4)) = Values(1)
                    dr2(Cols2(5)) = Values(2)
                Case 4
                    dr2(Cols2(3)) = Values(0)
                    dr2(Cols2(4)) = Values(1)
                    dr2(Cols2(5)) = Values(2)
                    dr2(Cols2(6)) = Values(3)
            End Select
                        
            End If 
        Else
            dr2(Cols2(i)) = dr1(Cols1(i))
        End If
    Next
Next