以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]符合条件导入问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=136154)

--  作者:HANZHIGANG
--  发布时间:2019/6/8 21:34:00
--  [求助]符合条件导入问题

如上传的测试:

想达到以下目的:如果导入的EXCEL样表中,主机厂、商品车、清单号、底盘号四列中的任意三列与表A中相应列的内容符,并且表A中的“是否二次”列不为TRUE,则导入用表中的实际对账金额导入至表A相对应的实际对账金额列中,并在表A中的自动生成对账单号DZH+当日的年月日00X

如以上四列中的任意三列与表A对应列不符,则将不符的行导入到表B中。并弹出对话框,统计出有多少条信息对账成功,多少条对账不成功(导入到表B的即为对账不成功的信息)。

简单的说,就是符合条件的行,实际对账金额导入到表A对应价格列里,其他不符合的行导入到表B中

代码如何实现?老师指导。

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

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:导入用表.xlsx

[此贴子已经被作者于2019/6/9 10:25:09编辑过]

--  作者:有点甜
--  发布时间:2019/6/9 10:41:00
--  
Dim dlg As New OpenFileDialog
dlg.Filter = "Excel文件|*.xls;*.xlsx"
If dlg.ShowDialog =DialogResult.OK Then
    Dim t As Table = Tables("表A")
    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
        Dim cr As Row = Nothing
        For Each r As Row In t.Rows
        Dim count As Integer = 0
            If r("主机厂") = sheet(n, 0).text Then count += 1
            If r("商品车") = sheet(n, 2).text Then count += 1
            If r("清单号") = sheet(n, 3).text Then count += 1
            If r("底盘号") = sheet(n, 4).text Then count += 1
            If count >= 3 Then
                cr = r
                Exit For
            End If
        Next
        If cr Is Nothing Then cr = Tables("表B").AddNew()
        For i As Integer = 0 To sheet.Cols.Count -1
            Dim cname As String = sheet(0, i).text
            If cr.Table.Cols.Contains(cname) Then
                cr(cname) = sheet(n, i).Text
            ElseIf cname = "对账金额" Then
                cr("实际对账金额") = sheet(n, i).Text
            End If
        Next
    Next
   
End If

--  作者:HANZHIGANG
--  发布时间:2019/6/9 11:02:00
--  
老师,我加了个窗口,测试了一下,没成功呢,还得您帮忙看一下
现在是符不符合条件的都导入到表BK中了,符合条件的也没导入到表A 
另外没提示分别导入的条数
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:导入测试.table

[此贴子已经被作者于2019/6/9 11:16:34编辑过]

--  作者:有点甜
--  发布时间:2019/6/9 11:25:00
--  

 

你上次的excel,我用代码测试没问题。

 


--  作者:HANZHIGANG
--  发布时间:2019/6/9 13:26:00
--  
老师,我重测了一下,符合条件的也导入表B了,实际应该是导入表A的
--  作者:有点甜
--  发布时间:2019/6/9 17:08:00
--  

1、excel文件发上来测试;

 

2、截图说明哪条数据符合。


--  作者:HANZHIGANG
--  发布时间:2019/6/10 11:00:00
--  

EXCEL123456这个表的信息都是符合条件的,应该导入到表A,但实际导入时却都导入到表B中

还有就是没有提示各表导入的条数

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

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


--  作者:有点甜
--  发布时间:2019/6/10 12:32:00
--  
Dim dlg As New OpenFileDialog
dlg.Filter = "Excel文件|*.xls;*.xlsx"
If dlg.ShowDialog =DialogResult.OK Then
    Dim t As Table = Tables("表A")
    Dim n1 As Integer = 0
    Dim n2 As Integer = 0
    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
        Dim cr As Row = Nothing
        For Each r As Row In t.Rows
            Dim count As Integer = 0
            If r("主机厂") = sheet(n, 0).text Then count += 1
            If r("商品车") = sheet(n, 1).text Then count += 1
            If r("清单号") = sheet(n, 2).text Then count += 1
            If r("底盘号") = sheet(n, 3).text Then count += 1
            If count >= 3 Then
                cr = r
                Exit For
            End If
        Next
        If cr Is Nothing Then
            cr = Tables("表B").AddNew()
            n1 += 1
        Else
            n2 += 1
        End If
        For i As Integer = 0 To sheet.Cols.Count -1
            Dim cname As String = sheet(0, i).text
            If cr.Table.Cols.Contains(cname) Then
                cr(cname) = sheet(n, i).Text
            ElseIf cname = "对账金额" Then
                cr("实际对账金额") = sheet(n, i).Text
            End If
        Next
    Next
    msgbox(n1 & " " & n2)
End If