vb.net如何与excel建立连接,并从里面查询并读取数据?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vb.net如何与excel建立连接,并从里面查询并读取数据?相关的知识,希望对你有一定的参考价值。

vb.net如何与excel建立连接,并里面查询并读取数据?
我看有人说在项目里引用excel类库 我在点添加引用里面什么都没有啊

可以写一个很简单的小例子吗?万分感谢!

1.新建一张表格,在表格中导入学生的成绩表,如图所示,将建立一个按钮,通过它来实现查找。

   2.单击菜单栏中的“开发工具”——插入——表单控件——按钮,在出现的十字箭头上拖住画出一个按钮,如图所示。

 3.在弹出的查找红对话框中选择“录制”,在弹出的“录制新宏”对话框中,修改宏名称为“查找”,单击确定。

4. 单击“开发工具”——查看代码,打开VBA编辑器,如图所示。

5.现在输入代码:

Sub 查找()

    Dim jieguo As String, p As String, q As String

    Dim c As Range

    jieguo = Application.InputBox(prompt:="请输入要查找的值:", Title:="查找", Type:=2)

    If jieguo = "False" Or jieguo = "" Then Exit Sub

    Application.ScreenUpdating = False

    Application.DisplayAlerts = False

    With ActiveSheet.Cells

        Set c = .Find(jieguo, , , xlWhole, xlByColumns, xlNext, False)

        If Not c Is Nothing Then

            p = c.Address

            Do

                c.Interior.ColorIndex = 4

                q = q & c.Address & vbCrLf

                Set c = .FindNext(c)

            Loop While Not c Is Nothing And c.Address <> p

        End If

End With

MsgBox "查找数据在以下单元格中:" & vbCrLf & vbCrLf _

        & q, vbInformation + vbOKOnly, "查找结果"

      Application.ScreenUpdating = True

      Application.DisplayAlerts = True

End Sub

  6.现在回到EXCEL表格,右击按钮,选择“编辑文字”,修改按钮名称为“查找按钮”。

7. 现在单击查找按钮,出现对话框“请输入要查找的值”,在方框中输入“男”,单击确定,出现对话框“查找数据在一下单元格中”,单击确定,对应单元格就变成了亮色。

参考技术A 三种方式
1.用OLEDB ,将Excel视为数据源
2.采用Office 的API
3.将Excel作为Zip文件解压缩,获得内容的Xml文档追问

可以写一个将excel视为数据源连接的小例子吗?然后建立连接后怎么查询里面的值呢?

追答

将Excel视为数据库的话 用SQL就可以查询了

例子就不给你了 网上有的是

参考技术B Vb....不会。。。。.net倒是会追问

这个就是.net啊 只不过用的是vb.net不是C#,可以指导一下怎么将excel设为数据源并用select查询里面的数据吗?

追答

你这个就是将excel导入到vb中吧???

使用带有 ADO 的 Excel 2010 VBA(或带有 LINQ 的 vb.net)查询表的最佳 SQL 语句是啥

【中文标题】使用带有 ADO 的 Excel 2010 VBA(或带有 LINQ 的 vb.net)查询表的最佳 SQL 语句是啥【英文标题】:What is the best SQL statement to query a table using Excel 2010 VBA with ADO (or vb.net with LINQ)使用带有 ADO 的 Excel 2010 VBA(或带有 LINQ 的 vb.net)查询表的最佳 SQL 语句是什么 【发布时间】:2014-03-06 01:01:58 【问题描述】:

表名:员工

现在我一直在试图弄清楚如何将我的两个 SQL 查询合并为一个。

查询 #1:

    SELECT *
    FROM `employees`
    WHERE `name` = 'BOB'

这显然只返回 1 行。

接下来,我使用组号查找属于该组的任何其他员工。

查询 #2:

    SELECT * 
    FROM `employees` 
    WHERE `group` = 1

这是我希望仅使用一个 SQL 查询(而不是两个)就能返回的记录集。使用 phpMyAdmin 和 MySQL 我想出了一个方法,但是在 Excel VBA 和 ADO 中我不知道如何执行相同的语句。

组合查询:

    SET @V1 := (
      SELECT l1.group
      FROM `employees` AS l1
      WHERE l1.name = 'BOB'
    );

    SELECT *
    FROM `employees`
    WHERE `group` = @V1;

现状:

现在我正在使用 Excel 2010 VBA 和 ADO 来查询保存在本地文件夹中的已关闭工作簿。

对于这个例子,我严重地过度简化了表格的结构,但想法是一样的。我在工作簿中的实际表格包含 37,000 多行 19 列。

解决此问题的最佳方法是什么?如果它提供更好的性能和更大的灵活性,我想将 LINQ 与 vb.net 一起使用。

使用 VBA 和 ADO 进行两次查询耗时太长,感觉 Excel 有时会挂起。

【问题讨论】:

也许不是您想要的,但“常规”SQL 方法是使用子查询:SELECT * FROM employees WHERE group in (SELECT group FROM employees WHERE name like 'BOB') @1.618 谢谢!我刚刚调整了我的一些代码,现在正在使用 ADO。感谢您的帮助 - 作为答案发布,如果您愿意,我会选择您的。 【参考方案1】:

这是您需要的 SQL 查询:

SELECT * 
FROM employees 
WHERE group in 
(SELECT group 
FROM employees 
WHERE name like 'BOB')

括号中的部分称为子查询。

【讨论】:

以上是关于vb.net如何与excel建立连接,并从里面查询并读取数据?的主要内容,如果未能解决你的问题,请参考以下文章

vb2010 (vb.net )Socket套接字当网络中断时或服务器意外关机,客户端如何自动重新连接服务端

vb.net连接access数据库问题

vb.net引用Dll的问题

如何实例化一个 vba 类并从 vb.net 调用一个方法?

使用带有 ADO 的 Excel 2010 VBA(或带有 LINQ 的 vb.net)查询表的最佳 SQL 语句是啥

VB.net 如何查询某值在DataSet的哪一行哪一列?