Foxtable(狐表)用户栏目专家坐堂 → 如何以对话框形式选择Excel文件并将内容直接导入既有表中


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

主题:如何以对话框形式选择Excel文件并将内容直接导入既有表中

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


加好友 发短信
等级:婴狐 帖子:32 积分:396 威望:0 精华:0 注册:2016/6/18 15:58:00
如何以对话框形式选择Excel文件并将内容直接导入既有表中  发帖心情 Post By:2021/6/3 5:50:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:速报 - 副本.xlsx

我有一个表格,里面的数据需要从Excel表格中读取,但表格分布在各个文件夹里,不能每次都修改代码,请问如何在选择Excel文件时采用对话框形式进行选择.

Dim Book As New XLS.Book("d:\速报 - 副本.xlsx")  '能不能在此行将"d:\速报 - 副本.xlsx"以对话框形式进行文件的选择
Dim Sheet As XLS.Sheet = Book.Sheets(0)
Tables("现场速报").StopRedraw()
'注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
Dim nms() As String = {"序号","检测位置","技术要求","检测结果","结果判定","备注"}
'注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题
For n As Integer = 8 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
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:报告系统.rar

Next
Tables("现场速报").ResumeRedraw()



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


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

参考:http://www.foxtable.com/webhelp/topics/0328.htm

Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter= 
"Excel文件|*.xls;*.xlsx" '设置筛选器
If
 dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
Dim Book As New XLS.Book(dlg.FileName
……
End
 
If

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


加好友 发短信
等级:婴狐 帖子:32 积分:396 威望:0 精华:0 注册:2016/6/18 15:58:00
回复:(有点蓝)参考:http://www.foxtable.com/webh...  发帖心情 Post By:2021/6/3 17:15:00 [只看该作者]

非常感谢,指导后调试成功.

Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter= "Excel文件|*.xls;*.xlsx|Word文件|*.doc;*.docx|Access文件|*.mdb" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    MessageBox.Show("你选择的是:" & dlg.FileName,"提示") '提示用户选择的文件
End If

Dim Book As New XLS.Book(dlg.FileName) 
Dim Sheet As XLS.Sheet = Book.Sheets(0)
Tables("现场速报").StopRedraw()
'注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
Dim nms() As String = {"序号","检测位置","技术要求","检测结果","结果判定","备注"}
'注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题
For n As Integer = 8 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
Tables("现场速报").ResumeRedraw()



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


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

Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter= "Excel文件|*.xls;*.xlsx|Word文件|*.doc;*.docx|Access文件|*.mdb" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    MessageBox.Show("你选择的是:" & dlg.FileName,"提示") '提示用户选择的文件

Dim Book As New XLS.Book(dlg.FileName) 
Dim Sheet As XLS.Sheet = Book.Sheets(0)
Tables("现场速报").StopRedraw()
'注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
Dim nms() As String = {"序号","检测位置","技术要求","检测结果","结果判定","备注"}
'注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题
For n As Integer = 8 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
Tables("现场速报").ResumeRedraw()
End If

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


加好友 发短信
等级:婴狐 帖子:32 积分:396 威望:0 精华:0 注册:2016/6/18 15:58:00
回复:(pzxas)如何以对话框形式选择Excel文件并将内...  发帖心情 Post By:2021/6/4 6:39:00 [只看该作者]

提取数据的速报 -副本.xlsx表中最下面两行是无用的数据,请问如何去除


Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter= "Excel文件|*.xls;*.xlsx|Word文件|*.doc;*.docx|Access文件|*.mdb" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    MessageBox.Show("你选择的是:" & dlg.FileName,"提示") '提示用户选择的文件

Dim Book As New XLS.Book(dlg.FileName) 
Dim Sheet As XLS.Sheet = Book.Sheets(0)
Tables("现场速报").StopRedraw()
'注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
Dim nms() As String = {"序号","检测位置","技术要求","检测结果","结果判定","备注"}
'注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题
For n As Integer = 8 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
Tables("现场速报").ResumeRedraw()
End If




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


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

……
For n As Integer = 8 To Sheet.Rows.Count -1
if Sheet(n,0).text = “” then exit for
    Dim r As Row = Tables("现场速报").AddNew()
    For m As Integer = 0 To nms.Length - 1
         r(nms(m)) = Sheet(n,m).Value
    Next
Next

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


加好友 发短信
等级:婴狐 帖子:32 积分:396 威望:0 精华:0 注册:2016/6/18 15:58:00
回复:(有点蓝)……For n As Integer = 8 To Sheet....  发帖心情 Post By:2021/6/4 9:01:00 [只看该作者]

谢谢,已经完美实现;现在还有个问题:
如果我想一次性读取多个文件(格式相同)的数据,并根据我选取文件的先后依次读取.请问该如何编写.谢谢

Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter= "Excel文件|*.xls;*.xlsx|Word文件|*.doc;*.docx|Access文件|*.mdb" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    MessageBox.Show("你选择的是:" & dlg.FileName,"提示") '提示用户选择的文件
    Dim Book As New XLS.Book(dlg.FileName) 
    Dim Sheet As XLS.Sheet = Book.Sheets(0)
    Tables("现场速报").StopRedraw()
    '注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
    Dim nms() As String = {"序号","检测位置","技术要求","检测结果","结果判定","备注"}
    '注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题
    For n As Integer = 8 To Sheet.Rows.Count -1
        If sheet(n,0).text = ""then exit for
'去除读取文件底部的无用数据
        Dim r As Row = Tables("现场速报").AddNew()
        For m As Integer = 0 To nms.Length - 1
             r(nms(m)) = Sheet(n,m).Value
        Next
    Next
    Tables("现场速报").ResumeRedraw()
End If



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


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

可以选择多个文件:http://www.foxtable.com/webhelp/topics/0328.htm

但是没有办法指定选择顺序

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


加好友 发短信
等级:婴狐 帖子:32 积分:396 威望:0 精华:0 注册:2016/6/18 15:58:00
回复:(有点蓝)可以选择多个文件:http://www.foxta...  发帖心情 Post By:2021/6/4 10:07:00 [只看该作者]

谢谢老师;我用DO....loop语句实现 了这个功能;您看可以吗
Dim Result As DialogResult
Result = MessageBox.Show("开始提取文件吗", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
Do While Result = DialogResult.Yes '批量选取导入文件
    Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
    dlg.Filter= "Excel文件|*.xls;*.xlsx|Word文件|*.doc;*.docx|Access文件|*.mdb" '设置筛选器
    If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
        MessageBox.Show("你选择的是:" & dlg.FileName,"提示") '提示用户选择的文件
        Dim Book As New XLS.Book(dlg.FileName)
        Dim Sheet As XLS.Sheet = Book.Sheets(0)
        Tables("现场速报").StopRedraw()'fox表中待导入表的名称
        '注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
        Dim nms() As String = {"序号","检测位置","技术要求","检测结果","结果判定","备注"}
        '注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题
        For n As Integer = 8 To Sheet.Rows.Count -1
            If sheet(n,0).text = ""then exit for
                '去除读取文件底部的无用数据
                Dim r As Row = Tables("现场速报").AddNew()
                For m As Integer = 0 To nms.Length - 1
                    r(nms(m)) = Sheet(n,m).Value
                Next
            Next
            Tables("现场速报").ResumeRedraw()
        End If
        Result = MessageBox.Show("需要继续提取文件吗", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
    Loop
    MessageBox.Show("再见.","提示")

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


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

自己测试没有问题即可

 回到顶部
总数 14 1 2 下一页