Foxtable(狐表)用户栏目专家坐堂 → excel取指定值填入新增行


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

主题:excel取指定值填入新增行

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


加好友 发短信
等级:三尾狐 帖子:656 积分:7786 威望:0 精华:0 注册:2015/8/24 9:02:00
excel取指定值填入新增行  发帖心情 Post By:2018/1/19 14:11:00 [只看该作者]

交易明细
批次号 付款人账号 付款人姓名 批次名称 交易日期 交易笔数 交易金额
212638462 6210880100005051000 外挂建造师费用 20180115 11:06:13 13 16100.00
序号 收款人账号 收款人姓名 接收行行名 交易金额 转账方式 交易结果 备注
1 101001840970252 曹爱芳 浙江省农村信用社联合社 1000.00 快速汇款 已发送 建造师费用
2 6222081207001397105 龚丰平 中国工商银行 1000.00 快速汇款 已发送 建造师费用
3 6222081207002863980 吴彩红 中国工商银行 1000.00 快速汇款 已发送 建造师费用
4 6228480362316105810 徐德仙 中国农业银行股份有限公司 1300.00 快速汇款 已发送 建造师费用


上表导入表后,excel表取定值A4数据填充到新增行的批次号列上,E4数据填充到新增行的日期列上

现在下面的代码可以导入,但是没有导入批次号和日期
求大神帮忙修改一下代码    

Dim dlg As New OpenFileDialog
dlg.MultiSelect = True
dlg.Filter= "Excel文件|*.xls;*.xlsx"
If dlg.ShowDialog = DialogResult.OK Then
    For Each file As String In dlg.FileNames
        Dim Book As New XLS.Book(file)
        Dim Sheet As XLS.Sheet = Book.Sheets(0)
        Tables("cw_批量打款民泰").StopRedraw()
        '注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
        Dim nms() As String = {"序号","收款人账号","收款人姓名","接收行行名","交易金额","转账方式","交易结果","备注"}
        '注意下面的循环变量从6开始,而不是从0开始,因为Excel表的第一行是标题
        For n As Integer = 5 To Sheet.Rows.Count -1
            Dim bh0 As String = sheet(n,0).Text
            Dim bh1 As String = sheet(n,1).Text
            Dim bh2 As String = sheet(n,2).Text
            Dim bh3 As String = sheet(n,3).Text
            Dim bh4 As String = sheet(n,4).Text
            Dim bh5 As String = sheet(n,5).Text
            Dim bh6 As String = sheet(n,6).Text
            Dim bh7 As String = sheet(n,7).Text
            Dim filter As String = "1=1"
            If bh0 > "" Then
                filter &= " and 序号 = '" & bh0 & "'"
            Else
                filter &= " And 序号 Is null"
            End If
            If bh1 > "" Then
                filter &= " and 收款人账号 = '" & bh1 & "'"
            Else
                filter &= " And 收款人账号 Is null"
            End If
            If bh2 > "" Then
                filter &= " and 收款人姓名 = '" & bh2 & "'"
            Else
                filter &= " And 收款人姓名 Is null"
            End If
            If bh3 > "" Then
                filter &= " and 接收行行名 = '" & bh3 & "'"
            Else
                filter &= " And 接收行行名 Is null"
            End If
            If bh4 > "" Then
                filter &= " and 交易金额 = '" & bh4 & "'"
            Else
                filter &= " And 交易金额 Is null"
            End If
            If bh5 > "" Then
                filter &= " and 转账方式 = '" & bh5 & "'"
            Else
                filter &= " And 转账方式 Is null"
            End If
            If bh6 > "" Then
                filter &= " and 交易结果 = '" & bh6 & "'"
            Else
                filter &= " And 交易结果 Is null"
            End If
            If bh7 > "" Then
                filter &= " and 备注 = '" & bh7 & "'"
            Else
                filter &= " And 备注 Is null"
            End If
            Dim dr As DataRow = DataTables("cw_批量打款民泰").Find(filter)
            If dr Is Nothing Then '如果不存在同编号的订单
                dr =  DataTables("cw_批量打款民泰").AddNew()
            End If
            For m As Integer = 0 To nms.Length - 1
                dr(nms(m)) = Sheet(n,m).Value
            Next
        Next        
        Tables("cw_批量打款民泰").ResumeRedraw()
        CurrentTable.Save
    Next 
End If

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/1/19 14:24:00 [只看该作者]

加上红色代码

 

            For m As Integer = 0 To nms.Length - 1
                dr(nms(m)) = Sheet(n,m).Value
            Next

 

            dr("批次号") = sheet(0, 3).Text

            dr("日期") = sheet(4, 3).Text

[此贴子已经被作者于2018/1/19 14:24:50编辑过]

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


加好友 发短信
等级:三尾狐 帖子:656 积分:7786 威望:0 精华:0 注册:2015/8/24 9:02:00
  发帖心情 Post By:2018/1/19 14:40:00 [只看该作者]

还有一事请教
跨年度查询会出错,同一年度没有问题

.NET Framework 版本:2.0.50727.8825
Foxtable 版本:2017.12.31.1
错误所在事件:窗口,民泰流水表,条件加载,SelectedIndexChanged
详细错误信息:
年、月和日参数描述无法表示的 DateTime。

代码
ElseIf e.Form.Controls("条件加载").text = "上一月" Then
    Dim y As Integer = Date.Today.Year
    Dim m As Integer = Date.Today.Month
    Dim d As Integer = Date.Today.day
    If m>=2
        Dim dt1 As New Date(y, m-1, 1)
        Dim dt2 As New Date(y, m-1, Date.DaysInMonth(y, m-1)) '获取本月的最后一天
        Dim Filter As String
        Filter = "账务日期 >= '" & dt1 & "' And 账务日期 <= '" & dt2 & "'"
        DataTables("cw_lsbzzs").LoadFilter = Filter
        DataTables("cw_lsbzzs").Load()
    ElseIf m=1 Then
        Dim dt1 As New Date(y, m-1, 1)
        Dim dt2 As New Date(y-1, m+11, Date.DaysInMonth(y-1, m+11)) '获取本月的最后一天
        Dim Filter As String
        Filter = "账务日期 >= '" & dt1 & "' And 账务日期 <= '" & dt2 & "'"
        DataTables("cw_lsbzzs").LoadFilter = Filter
        DataTables("cw_lsbzzs").Load()
    End If





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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/1/19 15:10:00 [只看该作者]

上一个月,应该这样处理

 

ElseIf e.Form.Controls("条件加载").text = "上一月" Then
    Dim y As Integer = Date.Today.Year
    Dim m As Integer = Date.Today.Month
    Dim d1 As Date = new Date(y, m, 1)
    Dim dt1 As Date = d1.AddMonths(-1)
    Dim dt2 As Date = d1
    Dim Filter As String
    Filter = "账务日期 >= '" & dt1 & "' And 账务日期 < '" & dt2 & "'"
    DataTables("cw_lsbzzs").LoadFilter = Filter
    DataTables("cw_lsbzzs").Load()
    
   


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


加好友 发短信
等级:三尾狐 帖子:656 积分:7786 威望:0 精华:0 注册:2015/8/24 9:02:00
  发帖心情 Post By:2018/2/9 15:49:00 [只看该作者]

Dim dlg As New OpenFileDialog
dlg.MultiSelect = True
dlg.Filter= "Excel文件|*.xls;*.xlsx"
If dlg.ShowDialog = DialogResult.OK Then
    For Each file As String In dlg.FileNames
        Dim Book As New XLS.Book(file)
        Dim Sheet As XLS.Sheet = Book.Sheets(0)
        Tables("cw_批量打款民泰").StopRedraw()
        '注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
        Dim nms() As String = {"序号","收款人账号","收款人姓名","接收行行名","交易金额","转账方式","交易结果","备注"}
        '注意下面的循环变量从6开始,而不是从0开始,因为Excel表的第一行是标题
        For n As Integer = 5 To Sheet.Rows.Count -1
            Dim bh0 As String = sheet(n,0).Text
            Dim bh1 As String = sheet(n,1).Text
            Dim bh2 As String = sheet(n,2).Text
            Dim bh3 As String = sheet(n,3).Text
            Dim bh4 As String = sheet(n,4).Text
            Dim bh5 As String = sheet(n,5).Text
            Dim bh6 As String = sheet(n,6).Text
            Dim bh7 As String = sheet(n,7).Text
            Dim filter As String = "1=1"
            If bh0 > "" Then
                filter &= " and 序号 = '" & bh0 & "'"
            Else
                filter &= " And 序号 Is null"
            End If
            If bh1 > "" Then
                filter &= " and 收款人账号 = '" & bh1 & "'"
            Else
                filter &= " And 收款人账号 Is null"
            End If
            If bh2 > "" Then
                filter &= " and 收款人姓名 = '" & bh2 & "'"
            Else
                filter &= " And 收款人姓名 Is null"
            End If
            If bh3 > "" Then
                filter &= " and 接收行行名 = '" & bh3 & "'"
            Else
                filter &= " And 接收行行名 Is null"
            End If
            If bh4 > "" Then
                filter &= " and 交易金额 = '" & bh4 & "'"
            Else
                filter &= " And 交易金额 Is null"
            End If
            If bh5 > "" Then
                filter &= " and 转账方式 = '" & bh5 & "'"
            Else
                filter &= " And 转账方式 Is null"
            End If
            If bh6 > "" Then
                filter &= " and 交易结果 = '" & bh6 & "'"
            Else
                filter &= " And 交易结果 Is null"
            End If
            If bh7 > "" Then
                filter &= " and 备注 = '" & bh7 & "'"
            Else
                filter &= " And 备注 Is null"
            End If
            Dim dr As DataRow = DataTables("cw_批量打款民泰").Find(filter)
            If dr Is Nothing Then '如果不存在同编号的订单
                dr =  DataTables("cw_批量打款民泰").AddNew()
            End If
            For m As Integer = 0 To nms.Length - 1
                dr(nms(m)) = Sheet(n,m).Value
            Next
            dr("批次号") = sheet(0,3).Text          '从excel表中取批定单元格数据填入新增行
            dr("交易日期") = sheet(4,3).Text
        Next
        Tables("cw_批量打款民泰").ResumeRedraw()
        CurrentTable.Save
        MessageBox.Show("导入成功!","提示",MessageBoxButtons.OK,MessageBoxIcon.Warning)
    Next
End If


加了红色代码导入会错误      没有红色能够正常导入

另想在   MessageBox.Show("导入成功!","提示",MessageBoxButtons.OK,MessageBoxIcon.Warning)    中加入导入的条数提示 
[此贴子已经被作者于2018/2/9 15:51:08编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/2/9 16:06:00 [只看该作者]

1、红色代码包什么错?output.show(sheet(4,3).text)是否你需要的值。

 

2、导入条数,你用变量记录。

 

dim count as integer = 0

'......

count += 1

'......

msgbox(count)


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


加好友 发短信
等级:三尾狐 帖子:656 积分:7786 威望:0 精华:0 注册:2015/8/24 9:02:00
  发帖心情 Post By:2018/2/9 17:05:00 [只看该作者]

.NET Framework 版本:2.0.50727.8825
Foxtable 版本:2017.12.31.1
错误所在事件:窗口,批量打款民泰,导入批量打款数据,Click
详细错误信息:
从字符串“接收行行名”到类型“Date”的转换无效。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/2/9 17:07:00 [只看该作者]

说明你 sheet(4,3).text 的值不正确。算好坐标位置,可能是 3,2 (从0开始算)


 回到顶部