以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  如何以对话框形式选择Excel文件并将内容直接导入既有表中  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=169113)

--  作者:pzxas
--  发布时间:2021/6/3 5:50:00
--  如何以对话框形式选择Excel文件并将内容直接导入既有表中
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:速报 - 副本.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()



--  作者:有点蓝
--  发布时间: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
--  发布时间:2021/6/3 17:15:00
--  回复:(有点蓝)参考:http://www.foxtable.com/webh...
非常感谢,指导后调试成功.

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()



--  作者:有点蓝
--  发布时间: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
--  发布时间:2021/6/4 6:39:00
--  回复:(pzxas)如何以对话框形式选择Excel文件并将内...
提取数据的速报 -副本.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




--  作者:有点蓝
--  发布时间: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
--  发布时间:2021/6/4 9:01:00
--  回复:(有点蓝)……For n As Integer = 8 To Sheet....
谢谢,已经完美实现;现在还有个问题:
如果我想一次性读取多个文件(格式相同)的数据,并根据我选取文件的先后依次读取.请问该如何编写.谢谢

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



--  作者:有点蓝
--  发布时间:2021/6/4 9:18:00
--  
可以选择多个文件:http://www.foxtable.com/webhelp/topics/0328.htm

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

--  作者:pzxas
--  发布时间:2021/6/4 10:07:00
--  回复:(有点蓝)可以选择多个文件:http://www.foxta...
谢谢老师;我用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("再见.","提示")

--  作者:有点蓝
--  发布时间:2021/6/4 10:10:00
--  
自己测试没有问题即可