在Excel中搜索文本框文本

在Excel中搜索文本框文本,excel,vb.net,Excel,Vb.net,我有一个excel文件,有两列。同样在windows窗体中,我有3个文本框和一个按钮。 j=行 k=列 我想做的是, 当我按下按钮时,如果我的textbox1.text=(j,k),那么textbox2.text=(j,k+1)和textbox3.text=(j+1,k)。 我已经通过互操作做到了 Imports Excel = Microsoft.Office.Interop.Excel Imports System.Runtime.InteropServices Public Class F

我有一个excel文件,有两列。同样在windows窗体中,我有3个文本框和一个按钮。 j=行 k=列 我想做的是, 当我按下按钮时,如果我的textbox1.text=(j,k),那么textbox2.text=(j,k+1)和textbox3.text=(j+1,k)。 我已经通过互操作做到了

Imports Excel = Microsoft.Office.Interop.Excel
Imports System.Runtime.InteropServices
Public Class Form1
    Dim arrayData(,) As String
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
                Try
            Dim xl As Excel.Application = New Excel.Application()
            Dim workbook As Excel.Workbook = xl.Workbooks.Open("C:\Users\tr100420\Documents\Visual Studio 2010\Projects\ExcelFunction\DB.xlsx")
            Dim sheet As Excel.Worksheet = workbook.Sheets(1)
            Dim Obj
            Dim dataRange As Excel.Range = sheet.Range("A1", "C500")
            Dim empNames As Excel.Range = sheet.Range("C1", "C5")
            ReDim arrayData(dataRange.Rows.Count, dataRange.Columns.Count)
            Dim j, k As Integer
            For j = 1 To dataRange.Rows.Count
                For k = 1 To dataRange.Columns.Count
                    arrayData(j - 1, k - 1) = dataRange.Cells(j, k).Value
                    If TextBox1.Text = Convert.ToString(dataRange.Cells(j, k).Value2) Then
                       TextBox2.Text = dataRange.Cells(j, k + 1).Value
                        TextBox3.Text = dataRange.Cells(j + 1, k).Value
                    End If
                Next k
            Next j
workbook.Close() : xl.Quit()
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xl) : xl = Nothing
            System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook) : workbook = Nothing
            System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet) : sheet = Nothing
但是这种方法太慢了。 是否有任何解决方案,使它更快,或者如果你有另一种方法来连接和阅读excel,请与我分享。。。
谢谢..

既然您在
textbox1
中有坐标,为什么不直接去拿那些单元格呢?您正在迭代整个范围,并且在找到位置时不会中断循环<代码>empNames从未使用过。有些COM对象没有封送,或者您试图以错误的顺序封送,因此您创建的Excel实例可能都在那里。打开TaskManager进行验证。感谢您的回答。我不知道如何打破这个循环。如果你有这个问题的话,你能给我看一个简短的例子吗?我已经更改了封送重新设置的序列。1-dataRanges、2-sheet、3-workbook、4-application并删除了empNames。。但是,正如前面提到的,您并不真正需要这些循环。您确定要在此处使用Office互操作吗?你是为自己还是为别人编写的?也就是说,其他人的计算机中安装了Office/Excel?例如,你试过吗?或者标准OleDb查询(使用
ACE.OleDb.12
/
16
提供者)?我实际上是在为其他人编码。我尝试过OleDb查询,但无法从excel中获取其他列。例如:textbox2.text=(j,k+1)我无法获得k+1,因为我尝试了那些循环..要保留For循环
退出For