以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]合并外部excel,自动打开方式,并合并某列数据 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=93773) |
||||
-- 作者:misamisali -- 发布时间:2016/12/6 17:34:00 -- [求助]合并外部excel,自动打开方式,并合并某列数据 “计时工资库” 表中,有姓名,相当的 月份、年份,现在想做一个按键,从外面的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 |
||||
-- 作者:有点蓝 -- 发布时间:2016/12/6 17:40:00 -- 只能用代码导,不能用merger,参考:http://www.foxtable.com/webhelp/scr/2334.htm |
||||
-- 作者:18523982317 -- 发布时间: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编辑过]
|
||||
-- 作者:有点色 -- 发布时间:2016/12/6 17:51:00 -- 不能用这种方式合并了。你要这样处理
http://www.foxtable.com/webhelp/scr/2334.htm
或者试试
|
||||
-- 作者:misamisali -- 发布时间:2016/12/7 13:42:00 -- 不会你说的方法,例子已上,麻烦修改一下。 |
||||
-- 作者:有点蓝 -- 发布时间: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() |