Foxtable(狐表)用户栏目专家坐堂 → [分享]通用导入Excel表合并Excel导入表自定义函数


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

主题:[分享]通用导入Excel表合并Excel导入表自定义函数

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


加好友 发短信
等级:幼狐 帖子:82 积分:1066 威望:0 精华:0 注册:2014/4/6 20:26:00
[分享]通用导入Excel表合并Excel导入表自定义函数  发帖心情 Post By:2021/7/7 10:34:00 [只看该作者]

Foxtable通用导入Excel表

引出需求:

帮助文件中有关两表合并的代码: http://www.foxtable.com/webhelp/topics/2137.htm
如果两个表的结构不同,可以参考下面的代码:
Dim cmd As New SQLCommand
Dim dt As DataTable
Dim sCols() As String = {"列名1", "列名2", "列名3"}
Dim dCols() As String = {"列名A", "列名B", "列名C"}
cmd.ConnectionName = "数据源名称"
cmd.CommandText = "SELEC T * From {员工}"
dt = cmd.ExecuteReader()
For Each dr As DataRow In dt.DataRows
    Dim nr As DataRow = DataTables("员工").AddNew()
    For i As Integer =0 To sCols.Length -1
        nr(dCols(i)) = dr(sCols(i))
    Next
Next
但是,大多数情况是一个Foxtable表,另外一个是电脑上的Excel表,结构也可能不同;
这种业务场景大多数是企业已有的系统导出Excel表格,需要汇总分析。


下面我做了一个通用的导入自定义函数,函数名和参数如下:
Dim dt As DataTable DataTables("员工" '需要合并的Foxtable表
Dim dCols() As String {"列名A", "列名B", "列名C"} 'Foxtable表字段
Dim sCols() As String {"列名1", "列名2", "列名3"} 'Excel表字段
Dim k As Integer = 1   'Excel表头标题是第几行,如果是第一行,即代码里的第0行
'
Functions.Execute("通用导入Excel表",dt,dCols,sCols,k)
'保存, 一般有专门的保存按钮
dt.save()

自定义函数主要实现如下功能:
1、一次处理多文件(需Excel表头结构一致);
2、Excel表的列顺序无需与Foxtable表顺序一致,列名也可不同,只需要dCols与sCols想对应;
3、自设Excel文件表头标题所在行,企业导出其他系统的Excel表,很可能表头标题行不在首行。
4、检查预设Excel表字段(sCols)与选择的Excel表头结构,确保每个选中的Excel表结构都是正确的,以防选错文件而导致异常导入。
5、Foxtable表的列数据类型是整型或高精度小数等数值型,但Excel表格里是文本型,则自动转换。

参考下面的代码:

以下内容只有回复后才可以浏览


自定义函数未实现功能:如果Foxtable表中已经存在相同数据的行,通常需要对此行进行跳过或更新数据;
如果订单表中已经存在相同编号的订单,那么就跳过此订单,可以将代码改为:

Dim Book As New XLS.Book("c:\test\订单.xls") 
Dim Sheet As XLS.Sheet = Book.Sheets(0)
Tables("订单").StopRedraw()
'注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
Dim nms() As String = {"编号","产品","客户","雇员","单价","折扣","数量","日期"} 
'注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题 
For n As Integer = 1 To Sheet.Rows.Count -1 
    Dim bh As String = sheet(n,0).Text 
    If DataTables("订单").Find("编号 = '" & bh & "'") Is Nothing Then '如果不存在同编号的订单
        Dim r As Row = Tables("订单").AddNew()
        For m As Integer = 0 To nms.Length - 1
            r(nms(m)) = Sheet(n,m).Value
        Next
    End If
Next
Tables("订单").ResumeRedraw()
如果想导入图形化(窗体),Foxtable表列字段和Excel表头列字段点选,已经存在相同数据行,自己觉得是无条件导入还是跳过或覆盖,甚至对Excel表的数据行内容进行按自己的数据原则进行先检查,如果货号是否在Foxtable系统里存在,若不存在则需要先维护Foxtable中的货号等,无误后导入。
下图是一个雏形,希望多提建设性意见。

图片点击可在新窗口打开查看此主题相关图片如下:通用导入excel表.png
图片点击可在新窗口打开查看


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


加好友 发短信
等级:狐精 帖子:3202 积分:21279 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2021/7/7 10:39:00 [只看该作者]

学习,直接来个商业版示例文件呢?

[此贴子已经被作者于2021/7/7 10:41:13编辑过]

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


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

多谢分享

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


加好友 发短信
等级:幼狐 帖子:141 积分:1657 威望:0 精华:0 注册:2012/1/7 16:23:00
  发帖心情 Post By:2021/7/7 10:44:00 [只看该作者]

图片点击可在新窗口打开查看学习

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


加好友 发短信
等级:三尾狐 帖子:760 积分:5430 威望:0 精华:0 注册:2012/10/5 21:53:00
  发帖心情 Post By:2021/7/7 10:50:00 [只看该作者]

支持!!

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


加好友 发短信
等级:小狐 帖子:392 积分:3176 威望:0 精华:0 注册:2019/4/13 16:10:00
  发帖心情 Post By:2021/7/7 11:14:00 [只看该作者]

看看

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(flashman)[分享]通用导入Excel表合并Excel导...  发帖心情 Post By:2021/7/7 11:17:00 [只看该作者]

学习一下

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


加好友 发短信
等级:童狐 帖子:241 积分:2412 威望:0 精华:0 注册:2011/6/19 0:05:00
  发帖心情 Post By:2021/7/7 11:47:00 [只看该作者]

点赞。。。。

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


加好友 发短信
等级:小狐 帖子:348 积分:2679 威望:0 精华:0 注册:2018/11/11 15:52:00
  发帖心情 Post By:2021/7/7 12:20:00 [只看该作者]

谢谢分享

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


加好友 发短信
等级:四尾狐 帖子:811 积分:10934 威望:0 精华:1 注册:2008/9/2 18:58:00
  发帖心情 Post By:2021/7/7 12:58:00 [只看该作者]

多谢分享

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