Foxtable(狐表)用户栏目专家坐堂 → [求助]合并外部excel,自动打开方式,并合并某列数据


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

主题:[求助]合并外部excel,自动打开方式,并合并某列数据

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


加好友 发短信
等级:童狐 帖子:220 积分:1751 威望:0 精华:0 注册:2016/3/2 9:22:00
[求助]合并外部excel,自动打开方式,并合并某列数据  发帖心情 Post By:2016/12/6 17:34:00 [只看该作者]

“计时工资库” 表中,有姓名,相当的 月份、年份,现在想做一个按键,从外面的excel中导入对应年份、月份的 公积金进来,
合并代码我会,但是筛选和过滤的代码不知道怎么修改,麻烦指导下:

For Each dr As Row In Tables("计时工资库").rows
    Dim drr As DataRow
    Dim Filter As String   '定义一个新筛选数
    Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
    dlg.Filter= "Excel文件|*.xls;*.xlsx" '设置筛选器
 If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
        Dim count As Integer = DataTables("计时工资库").datarows.count
        Dim mg As New Merger
        mg.SourcePath = dlg.FileName
        mg.Format = "excel"
        mg.SourceTableName = "sheet1$"
        mg.DataTableName = "计时工资库"
        Filter = "[年份] = '" & dr("年份
图片点击可在新窗口打开查看此主题相关图片如下:公积金.png
图片点击可在新窗口打开查看
") & "' and [月份] = '" & dr("月份") & "' and [姓名] = '" & dr("姓名") & "'"
       drr = DataTables("sheet1").Find(Filter)
       drr = DataTables("sheet").Find(Filter)
        If drr IsNot Nothing Then '如果找到
            dr("公积金") = drr("公积金")
              Else
            MessageBox.Show( dr("姓名") & " 员工的公积金数据找不到,请检查其姓名和公积金")
            Return
        mg.Merge()
        msgbox(DataTables("计时工资库").datarows.count - count)
    End If
Next
End If
 End If

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

只能用代码导,不能用merger,参考:http://www.foxtable.com/webhelp/scr/2334.htm

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


加好友 发短信
等级:四尾狐 帖子:857 积分:6156 威望:0 精华:0 注册:2015/12/24 13:02:00
  发帖心情 Post By:2016/12/6 17:44:00 [只看该作者]

你的思路反了吧,  应该是用excel表里的行去对应foxtable里面表的对应datarow

比如 sheet1的0,0是年份 0,1是月份,0,2是姓名
那么根据这三个条件去找对应的drr
这样筛选条件就好写了吧。。。
至于sheet1读取有多少行, for next一下就ok了。。。 
[此贴子已经被作者于2016/12/6 17:44:49编辑过]

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2016/12/6 17:51:00 [只看该作者]

 不能用这种方式合并了。你要这样处理

 

http://www.foxtable.com/webhelp/scr/2334.htm

 

 或者试试

 

下载信息  [文件大小:312.0 KB  下载次数:4]
图片点击可在新窗口打开查看点击浏览该文件:excel作为数据源_合并.table


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


加好友 发短信
等级:童狐 帖子:220 积分:1751 威望:0 精华:0 注册:2016/3/2 9:22:00
  发帖心情 Post By:2016/12/7 13:42:00 [只看该作者]

不会你说的方法,例子已上,麻烦修改一下。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:公积金.xls
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.foxdb



 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110582 积分:562806 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2016/12/7 15:15:00 [只看该作者]

Excel有问题,把内容以文本形式(不带格式)拷贝到一个新Excel表再导入

Dim dlg As new OpenFileDialog
dlg.Filter = "Excel文件|*.xls;*.xlsx"
If dlg.ShowDialog = DialogResult.OK Then
    Tables("工资表").StopRedraw()
    Dim Book As New XLS.Book(dlg.FileName)
    Dim Sheet As XLS.Sheet = Book.Sheets(0)
    '注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
    Dim nms() As String = {"姓名","年份","月份","公积金"}
    '注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题
    For n As Integer = 1 To Sheet.Rows.Count -1
        Dim r As Row = Tables("工资表").AddNew()
        For m As Integer = 0 To nms.Length - 1
            r(nms(m)) = Sheet(n,m).Value
        Next
    Next
End If
Tables("工资表").ResumeRedraw()

 回到顶部