Foxtable(狐表)用户栏目专家坐堂 → 使用excel表作为数据源进行数据管理 怎么实现当手动设置好数据源表名后 点击合并 得到选择文件的不同文件内容 然后再选择数据源表名 获取数据源表名下的所有字段内容


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

主题:使用excel表作为数据源进行数据管理 怎么实现当手动设置好数据源表名后 点击合并 得到选择文件的不同文件内容 然后再选择数据源表名 获取数据源表名下的所有字段内容

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
使用excel表作为数据源进行数据管理 怎么实现当手动设置好数据源表名后 点击合并 得到选择文件的不同文件内容 然后再选择数据源表名 获取数据源表名下的所有字段内容  发帖心情 Post By:2021/10/25 17:51:00 [只看该作者]

使用excel表作为数据源进行数据管理 怎么实现当手动设置好数据源表名后  点击合并  得到选择文件的不同文件内容  然后再选择数据源表名  获取数据源表名下的所有字段内容
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:excel作为数据源_合并.table
当前运行错误提示如下:【麻烦老师帮忙看看  谢谢!】

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看


合并按钮代码如下:
Dim dlg As new OpenFileDialog
dlg.Filter = "Excel文件|*.xlsx"

Dim t1 As WinForm.TextBox = e.Form.Controls("TextBox1")
If dlg.ShowDialog = DialogResult.OK Then
    If Connections.Contains("test") Then
        If DataTables.Contains(t1.text) Then DataTables.Unload(t1.text)
        Connections.Delete("test")
    End If
    Connections.Add("test", "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dlg.FileName & ";Extended Properties='Excel 8.0;HDR=yes'")
    Dim tns As String = ""
    For Each tn As String In Connections("test").GetTableNames
        tns &= tn & "|"
    Next
    e.Form.Controls("ComboBox1").ComboList = tns.TrimEnd("|")
End If

当前选择数据源表名获取当前tables中的字段代码如下:
Dim cm As WinForm.ComboBox = e.Form.Controls("ComboBox1")
Vars("btname")=cm.Text
Dim cnt As Integer = DataTables(Vars("btname")).DataCols.Count - 1
Dim nms(cnt-1) As String
Dim lb As WinForm.CheckedListBox = e.Form.Controls("CheckedListBox1")
For i As Integer = 0 To cnt - 1
    nms(i) = DataTables(Vars("btname")).DataCols(i).name
Next
lb.ComboList = String.join("|",nms)

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


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

把文件名里的$符号去掉,同时判断一下是否有这个表

    For Each tn As String In Connections("test").GetTableNames
dim s as string = tn.trim("$")
if DataTables.Contains(s) then
        tns &= s & "|"
end if
    Next

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)把文件名里的$符号去掉,同时判断一下...  发帖心情 Post By:2021/10/26 9:03:00 [只看该作者]

老师参照你的指导我对应在命令窗体进行下述代码执行 可以正常去掉$符号   
For Each tn As String In Connections("test").GetTableNames
    Dim s As String = tn.trim("$")
    
    If DataTables.Contains(s) Then
        MessageBox.Show("1")
    Else
        MessageBox.Show("2")
        s = s & "|"
        output.show(s)
    End If
Next



在combobox1  SelectedIndexChanged代码运行如下时,还是会提示找不到上述S对应名称的表
Dim cm As WinForm.ComboBox = e.Form.Controls("ComboBox1")
Vars("btname")=cm.Text.trim("$")
Dim cnt As Integer = DataTables(Vars("btname")).DataCols.Count - 1
Dim nms(cnt-1) As String
Dim lb As WinForm.CheckedListBox = e.Form.Controls("CheckedListBox1")
For i As Integer = 0 To cnt - 1
    nms(i) = DataTables(Vars("btname")).DataCols(i).name
Next
lb.ComboList = String.join("|",nms)

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


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

说明这些表还没有加载进来,Foxtable里还不存在这些表

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)说明这些表还没有加载进来,Foxtable...  发帖心情 Post By:2021/10/26 9:22:00 [只看该作者]

表对应的数据是写入了对应的张三数据表里的   实在弄不明白了  麻烦老师看看哈   我也只是需要读取的在项目里面的张三表中的字段列,但是系统一直认为是我再导入前的excel工作簿里面的一个表
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:excel作为数据源_合并.table



[此贴子已经被作者于2021/10/26 10:10:54编辑过]

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


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

不是很理解您的问题,这个意思?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:excel作为数据源_合并.zip



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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)不是很理解您的问题,这个意思?[upl...  发帖心情 Post By:2021/10/26 10:11:00 [只看该作者]

老师   是这个意思  选择了需要导入的表后  然后再去获取对应表的字段列

图片点击可在新窗口打开查看此主题相关图片如下:微信图片_20211026100747.png
图片点击可在新窗口打开查看

在实际使用中发现  如果标题行大于1的话  会导入如图效果  f2.3.4.5.6.7.8.9是标题行  不是真正的字段列
有没有办法在下述代码中 将t2输入的内容,设定到代码中,然后再导入数据前进行排除标题行呢?
Dim t1 As WinForm.TextBox = e.Form.Controls("TextBox1")
Dim t2 As WinForm.TextBox = e.Form.Controls("TextBox2")   ‘输入行文本框’
If e.Sender.Text > "" Then
    Dim q As new Quer yBuilder
    q.Connecti
    t1.text = e.Sender.Text.trim("$")
    q.Table Name = t1.text
    q.Sele ctString = "Sel ect * from [" & e.Sender.Text & "]"
    q.Build
    If DataTables.Contains(t1.text)
        e.Form.Controls("Table1").Table.DataSource = DataTables(t1.text)
    Else
        e.Form.Controls("Table1").Table.DataSource = DataTables("表A")
    End If
End If
[此贴子已经被作者于2021/10/26 10:12:36编辑过]

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


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

不能的。这种方式连接的execl必须是标准的格式,也就是第一行必须是真正的字段列,并且不能有合并单元格。

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)不能的。这种方式连接的execl必须是标...  发帖心情 Post By:2021/10/26 10:44:00 [只看该作者]

好的 谢谢老师   如果对于非标准格式的数据  我要导入的话  那有没有对应的例子可供学习一下

导入非标准数据格式之前先排除标题行  有没有办法进行定义呢?

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


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


 回到顶部