Foxtable(狐表)用户栏目专家坐堂 → 求助!导入EXCEL表数据全部为文本


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

主题:求助!导入EXCEL表数据全部为文本

美女呀,离线,留言给我吧!
0799snow
  81楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:131 积分:834 威望:0 精华:0 注册:2019/3/19 8:23:00
老师,改了后,报了一个错误  发帖心情 Post By:2019/9/21 16:48:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:11.png
图片点击可在新窗口打开查看报了这个图片的错误提示,是这个“R”未定义吗

 回到顶部
美女呀,离线,留言给我吧!
0799snow
  82楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:131 积分:834 威望:0 精华:0 注册:2019/3/19 8:23:00
老师,我项目里之前还有这些代码,是连接的问题吗  发帖心情 Post By:2019/9/21 16:56:00 [只看该作者]

For Each r As Row In Tables("明细表").rows
    r("周六周日") = Nothing
    If cdate(r("交易时间")).DayOfWeek = 0 OrElse cdate(r("交易时间")).DayOfWeek = 6 Then
        r("周六周日") = format(cdate(r("交易时间")), "dddd")
        For Each dr As DataRow In DataTables("调休表").Select("")
            For i As Integer = 1 To 4
                Dim cname As String = "调为工作日" & i
                If dr(cname) <> Nothing AndAlso cdate(r("交易时间")).Date = dr(cname) Then
                    r("周六周日") = Nothing
                    goto label2
                End If
            Next
        Next
        label2:
    Else
        For Each dr As DataRow In DataTables("调休表").Select("")
            For i As Integer = 1 To 7
                Dim cname As String = "调为休假日" & i
                If dr(cname) <> Nothing AndAlso cdate(r("交易时间")).Date = dr(cname) Then
                    r("周六周日") = dr("调休原因")
                    goto label1
                End If
            Next
        Next
        label1:
    End If
Next


 

2、

 

For Each kh As String In DataTables("明细表").GetValues("卡号")
    Dim drs = DataTables("明细表").Select("卡号='" & kh & "' and 交易类型='购买'", "交易时间")
    For i As Integer = 1 To drs.count-1
        Dim sp As TimeSpan = drs(i)("交易时间") - drs(i-1)("交易时间")
        If sp.TotalHours <= 1 Then
            drs(i)("一小时内") = True
            drs(i)("三小时内") = Nothing
            drs(i)("一天内") = Nothing
        ElseIf sp.TotalHours <= 3 Then
            drs(i)("一小时内") = Nothing
            drs(i)("三小时内") = True
            drs(i)("一天内") = Nothing
        ElseIf sp.TotalHours <= 24 Then
            drs(i)("一小时内") = Nothing
            drs(i)("三小时内") = Nothing
            drs(i)("一天内") = True
        End If
    Next
Next

 




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


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

上面的代码放到命令窗口测试没有问题。完整代码,或者实例发上来

 回到顶部
美女呀,离线,留言给我吧!
0799snow
  84楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:131 积分:834 威望:0 精华:0 注册:2019/3/19 8:23:00
完整代码  发帖心情 Post By:2019/9/21 17:21:00 [只看该作者]

Dim dlg As New OpenFileDialog
dlg.MultiSelect = True
If dlg.ShowDialog = DialogResult.OK Then
    OutPut.Show("你选择了" & dlg.FileNames.Length & "个文件, 分别是:")
    DataTables("明细表").ResumeRedraw
    DataTables("明细表").StopRedraw
    For Each fl As String In dlg.FileNames
        Dim Book As New XLS.Book(fl)
        '注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
        Dim nms() As String ={"卡号","持卡人","交易时间","交易类型","金额","商品", "数量","单价","奖励积分","余额","地点"}
        '注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题
        Dim Sheet As XLS.Sheet = Book.Sheets(0)
        For n As Integer = 4 To Sheet.Rows.Count -1
            Dim kh As String = sheet(n,0).text
            If kh <> "小计" AndAlso kh <> "总计" Then
                Dim sj As String = sheet(n,2).Text
                Dim d As Date = Nothing
                Date.TryParse(sj, d)
                Dim fdr As DataRow
                If d <> Nothing Then
                    fdr = DataTables("明细表").Find("交易时间 > #" & d.AddMinutes(-1) & "# and 交易时间 < #" & d.AddMinutes(1) & "#")
                End If
                If d <> Nothing Then
                    fdr = DataTables("明细表").Find("交易时间 = #" & d & "#")
                Else
                    Continue For
                End If
                If fdr Is Nothing Then '如果不存在同编号的订单
                    Dim r As Row = Tables("明细表").AddNew()
                    For m As Integer = 0 To nms.Length - 1
                        If r.Table.Cols(nms(m)).IsDate Then
                            Date.TryParse(Sheet(n,m).Value, d)
                            r(nms(m)) = d
                        ElseIf r.Table.Cols(nms(m)).IsNumeric Then
                            r(nms(m)) = val(Sheet(n,m).Value)
                        Else
                            r(nms(m)) = Sheet(n,m).Value
                        End If
                    Next
                End If
            End If
        Next
    Next
   Dim lst1 As List(Of String)  = DataTables("销售卡信息").GetValues("持卡人","所属部门='采购'")
For Each r As Row In Tables("明细表").rows
    If lst1.Contains(r("交易时间")) Then
        If cdate(r("交易时间")).DayOfWeek = 0  OrElse cdate(r("交易时间")).DayOfWeek = 1 Then
            r("周六周日") = cdate(r("交易时间")).DayOfWeek
        End If
    Else
        If cdate(r("交易时间")).DayOfWeek = 0 OrElse cdate(r("交易时间")).DayOfWeek = 6  Then
            r("周六周日") = cdate(r("交易时间")).DayOfWeek
        End If
    End If
Next
        label2:
        Else
            For Each dr As DataRow In DataTables("调休表").Select("")
                For i As Integer = 1 To 7
                    Dim cname As String = "调为休假日" & i
                    If dr(cname) <> Nothing AndAlso cdate(r("交易时间")).Date = dr(cname) Then
                        r("周六周日") = dr("调休原因")
                        goto label1
                    End If
                Next
            Next
            label1:
        End If
    Next
    For Each kh As String In DataTables("明细表").GetValues("卡号")
        Dim drs = DataTables("明细表").Select("卡号='" & kh & "' and 交易类型='购买'", "交易时间")
        For i As Integer = 1 To drs.count-1
            Dim sp As TimeSpan = drs(i)("交易时间") - drs(i-1)("交易时间")
            If sp.TotalHours <= 1 Then
                drs(i)("一小时内") = True
                drs(i)("三小时内") = Nothing
                drs(i)("一天内") = Nothing
            ElseIf sp.TotalHours <= 3 Then
                drs(i)("一小时内") = Nothing
                drs(i)("三小时内") = True
                drs(i)("一天内") = Nothing
            ElseIf sp.TotalHours <= 24 Then
                drs(i)("一小时内") = Nothing
                drs(i)("三小时内") = Nothing
                drs(i)("一天内") = True
            End If
        Next
    Next
    DataTables("明细表").ResumeRedraw
End If


 回到顶部
美女呀,离线,留言给我吧!
0799snow
  85楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:131 积分:834 威望:0 精华:0 注册:2019/3/19 8:23:00
项目也上传  发帖心情 Post By:2019/9/21 17:25:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:测试3.table

项目文件
[此贴子已经被作者于2019/9/21 17:41:42编辑过]

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


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

Dim lst1 As List(Of String)  = DataTables("销售卡信息").GetValues("持卡人","所属部门='采购'")
For Each r As Row In Tables("明细表").rows
    r("周六周日") = Nothing
    If lst1.Contains(r("交易时间")) Then
        If cdate(r("交易时间")).DayOfWeek = 0 OrElse cdate(r("交易时间")).DayOfWeek = 1 Then
            r("周六周日") = format(cdate(r("交易时间")), "dddd")
            For Each dr As DataRow In DataTables("调休表").Select("")
                For i As Integer = 1 To 4
                    Dim cname As String = "调为工作日" & i
                    If dr(cname) <> Nothing AndAlso cdate(r("交易时间")).Date = dr(cname) Then
                        r("周六周日") = Nothing
                        goto label2
                    End If
                Next
            Next
        Next
    Else
        If cdate(r("交易时间")).DayOfWeek = 0 OrElse cdate(r("交易时间")).DayOfWeek = 6 Then
            r("周六周日") = format(cdate(r("交易时间")), "dddd")
            For Each dr As DataRow In DataTables("调休表").Select("")
                For i As Integer = 1 To 4
                    Dim cname As String = "调为工作日" & i
                    If dr(cname) <> Nothing AndAlso cdate(r("交易时间")).Date = dr(cname) Then
                        r("周六周日") = Nothing
                        goto label2
                    End If
                Next
            Next
        Next
        label2:
    Else
        For Each dr As DataRow In DataTables("调休表").Select("")
            For i As Integer = 1 To 7
                Dim cname As String = "调为休假日" & i
                If dr(cname) <> Nothing AndAlso cdate(r("交易时间")).Date = dr(cname) Then
                    r("周六周日") = dr("调休原因")
                    goto label1
                End If
            Next
        Next
        label1:
    End If
Next

 回到顶部
美女呀,离线,留言给我吧!
0799snow
  87楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:131 积分:834 威望:0 精华:0 注册:2019/3/19 8:23:00
老师,我悟性太差了  发帖心情 Post By:2019/9/21 18:33:00 [只看该作者]

麻烦你帮我通篇看下,我改代码后,不是少了end if 就是FOR后面没NEXT,我加了好几个,还是不对。
Dim dlg As New OpenFileDialog
dlg.MultiSelect = True
If dlg.ShowDialog = DialogResult.OK Then
    OutPut.Show("你选择了" & dlg.FileNames.Length & "个文件, 分别是:")
    DataTables("明细表").ResumeRedraw
    DataTables("明细表").StopRedraw
    For Each fl As String In dlg.FileNames
        Dim Book As New XLS.Book(fl)
        '注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
        Dim nms() As String ={"卡号","持卡人","交易时间","交易类型","金额","商品", "数量","单价","奖励积分","余额","地点"}
        '注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题
        Dim Sheet As XLS.Sheet = Book.Sheets(0)
        For n As Integer = 4 To Sheet.Rows.Count -1
            Dim kh As String = sheet(n,0).text
            If kh <> "小计" AndAlso kh <> "总计" Then
                Dim sj As String = sheet(n,2).Text
                Dim d As Date = Nothing
                Date.TryParse(sj, d)
                Dim fdr As DataRow
                If d <> Nothing Then
                    fdr = DataTables("明细表").Find("交易时间 > #" & d.AddMinutes(-1) & "# and 交易时间 < #" & d.AddMinutes(1) & "#")
                End If
                If d <> Nothing Then
                    fdr = DataTables("明细表").Find("交易时间 = #" & d & "#")
                Else
                    Continue For
                End If
                If fdr Is Nothing Then '如果不存在同编号的订单
                    Dim r As Row = Tables("明细表").AddNew()
                    For m As Integer = 0 To nms.Length - 1
                        If r.Table.Cols(nms(m)).IsDate Then
                            Date.TryParse(Sheet(n,m).Value, d)
                            r(nms(m)) = d
                        ElseIf r.Table.Cols(nms(m)).IsNumeric Then
                            r(nms(m)) = val(Sheet(n,m).Value)
                        Else
                            r(nms(m)) = Sheet(n,m).Value
                        End If
                    Next
                End If
            End If
        Next
    Next
    Dim lst1 As List(Of String)  = DataTables("销售卡信息").GetValues("持卡人","所属部门='采购'")
    For Each r As Row In Tables("明细表").rows
        If lst1.Contains(r("交易时间")) Then
            If cdate(r("交易时间")).DayOfWeek = 0  OrElse cdate(r("交易时间")).DayOfWeek = 1 Then
                r("周六周日") = cdate(r("交易时间")).DayOfWeek
            End If
        Else
            If cdate(r("交易时间")).DayOfWeek = 0 OrElse cdate(r("交易时间")).DayOfWeek = 6  Then
                r("周六周日") = cdate(r("交易时间")).DayOfWeek
            End If
        End If
    Next
Next
label2:
Else
    For Each dr As DataRow In DataTables("调休表").Select("")
        For i As Integer = 1 To 7
            Dim cname As String = "调为休假日" & i
            If dr(cname) <> Nothing AndAlso cdate(r("交易时间")).Date = dr(cname) Then
                r("周六周日") = dr("调休原因")
                goto label1
            End If
        Next
    Next
    label1:
End If
Next
For Each kh As String In DataTables("明细表").GetValues("卡号")
    Dim drs = DataTables("明细表").Select("卡号='" & kh & "' and 交易类型='购买'", "交易时间")
    For i As Integer = 1 To drs.count-1
        Dim sp As TimeSpan = drs(i)("交易时间") - drs(i-1)("交易时间")
        If sp.TotalHours <= 1 Then
            drs(i)("一小时内") = True
            drs(i)("三小时内") = Nothing
            drs(i)("一天内") = Nothing
        ElseIf sp.TotalHours <= 3 Then
            drs(i)("一小时内") = Nothing
            drs(i)("三小时内") = True
            drs(i)("一天内") = Nothing
        ElseIf sp.TotalHours <= 24 Then
            drs(i)("一小时内") = Nothing
            drs(i)("三小时内") = Nothing
            drs(i)("一天内") = True
        End If
    Next
Next
DataTables("明细表").ResumeRedraw
End If

[此贴子已经被作者于2019/9/21 20:05:48编辑过]

 回到顶部
美女呀,离线,留言给我吧!
0799snow
  88楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:131 积分:834 威望:0 精华:0 注册:2019/3/19 8:23:00
图示  发帖心情 Post By:2019/9/21 18:40:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:55.png
图片点击可在新窗口打开查看

 回到顶部
美女呀,离线,留言给我吧!
0799snow
  89楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:131 积分:834 威望:0 精华:0 注册:2019/3/19 8:23:00
老师,我在窗口那把代码复制过去,老出错  发帖心情 Post By:2019/9/21 20:08:00 [只看该作者]

已经试过好几个了,加了end if,或者next ,最后还是没弄明白
Dim dlg As New OpenFileDialog
dlg.MultiSelect = True
If dlg.ShowDialog = DialogResult.OK Then
    OutPut.Show("你选择了" & dlg.FileNames.Length & "个文件, 分别是:")
    DataTables("明细表").ResumeRedraw
    DataTables("明细表").StopRedraw
    For Each fl As String In dlg.FileNames
        Dim Book As New XLS.Book(fl)
        '注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
        Dim nms() As String ={"卡号","持卡人","交易时间","交易类型","金额","商品", "数量","单价","奖励积分","余额","地点"}
        '注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题
        Dim Sheet As XLS.Sheet = Book.Sheets(0)
        For n As Integer = 4 To Sheet.Rows.Count -1
            Dim kh As String = sheet(n,0).text
            If kh <> "小计" AndAlso kh <> "总计" Then
                Dim sj As String = sheet(n,2).Text
                Dim d As Date = Nothing
                Date.TryParse(sj, d)
                Dim fdr As DataRow
                If d <> Nothing Then
                    fdr = DataTables("明细表").Find("交易时间 > #" & d.AddMinutes(-1) & "# and 交易时间 < #" & d.AddMinutes(1) & "#")
                End If
                If d <> Nothing Then
                    fdr = DataTables("明细表").Find("交易时间 = #" & d & "#")
                Else
                    Continue For
                End If
                If fdr Is Nothing Then '如果不存在同编号的订单
                    Dim r As Row = Tables("明细表").AddNew()
                    For m As Integer = 0 To nms.Length - 1
                        If r.Table.Cols(nms(m)).IsDate Then
                            Date.TryParse(Sheet(n,m).Value, d)
                            r(nms(m)) = d
                        ElseIf r.Table.Cols(nms(m)).IsNumeric Then
                            r(nms(m)) = val(Sheet(n,m).Value)
                        Else
                            r(nms(m)) = Sheet(n,m).Value
                        End If
                    Next
                End If
            End If
        Next
    Next
    Dim lst1 As List(Of String)  = DataTables("销售卡信息").GetValues("持卡人","所属部门='采购'")
    For Each r As Row In Tables("明细表").rows
        If lst1.Contains(r("交易时间")) Then
            If cdate(r("交易时间")).DayOfWeek = 0  OrElse cdate(r("交易时间")).DayOfWeek = 1 Then
                r("周六周日") = cdate(r("交易时间")).DayOfWeek
            End If
        Else
            If cdate(r("交易时间")).DayOfWeek = 0 OrElse cdate(r("交易时间")).DayOfWeek = 6  Then
                r("周六周日") = cdate(r("交易时间")).DayOfWeek
            End If
        End If
    Next
Next
label2:
Else
    For Each dr As DataRow In DataTables("调休表").Select("")
        For i As Integer = 1 To 7
            Dim cname As String = "调为休假日" & i
            If dr(cname) <> Nothing AndAlso cdate(r("交易时间")).Date = dr(cname) Then
                r("周六周日") = dr("调休原因")
                goto label1
            End If
        Next
    Next
    label1:
End If
Next
For Each kh As String In DataTables("明细表").GetValues("卡号")
    Dim drs = DataTables("明细表").Select("卡号='" & kh & "' and 交易类型='购买'", "交易时间")
    For i As Integer = 1 To drs.count-1
        Dim sp As TimeSpan = drs(i)("交易时间") - drs(i-1)("交易时间")
        If sp.TotalHours <= 1 Then
            drs(i)("一小时内") = True
            drs(i)("三小时内") = Nothing
            drs(i)("一天内") = Nothing
        ElseIf sp.TotalHours <= 3 Then
            drs(i)("一小时内") = Nothing
            drs(i)("三小时内") = True
            drs(i)("一天内") = Nothing
        ElseIf sp.TotalHours <= 24 Then
            drs(i)("一小时内") = Nothing
            drs(i)("三小时内") = Nothing
            drs(i)("一天内") = True
        End If
    Next
Next
DataTables("明细表").ResumeRedraw
End If


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


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/9/22 20:11:00 [只看该作者]


[此贴子已经被作者于2019/9/22 20:22:31编辑过]

 回到顶部
总数 91 上一页 1 2 3 4 5 6 7 8 9 10 下一页