2017-03-03 2 views
1

Ich versuche, eine Anwendung zu erstellen, die eine Zeichenfolge in einer bestimmten Spalte einer Excel-Datei sucht, und wenn die Zeichenfolge gefunden wird, zeigen Sie den entsprechenden Spaltenwert an. Beispiel: Ich suche nach einer Zeichenfolge in einer Excel-Dateispalte "N Wenn die gesuchte Zeichenfolge gefunden wird, dann zeige den "E" -ten Spaltenwert der gleichen Zeile an. Die Sache ist, dass mein Code einen einzelnen Wert mehrfach in mehreren Etiketten der zweiten Form anzeigt.Wie kann ich mehrere Werte in Labels dynamisch anzeigen?

FORM1

Imports Excel = Microsoft.Office.Interop.Excel 
Imports Microsoft.Office.Interop.Excel 
Imports System.Globalization 
Imports System.Runtime.InteropServices 

Public Class Form1 
    Public Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     Dim xlApp As Excel.Application 
     Dim xlWorkBook As Excel.Workbook 
     Dim xlWorkSheet As Excel.Worksheet 
     Dim range As Excel.Range 
     Dim Obj As Object 
     Dim pass As String 

     If OpenFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then 
      Dim sr As New System.IO.StreamReader(OpenFileDialog1.FileName) 
      MessageBox.Show("You have selected" + OpenFileDialog1.FileName) 
      'sr.Close() 
     End If 

     xlApp = New Excel.Application 
     xlWorkBook = xlApp.Workbooks.Open(OpenFileDialog1.FileName) 
     xlWorkSheet = xlWorkBook.Worksheets("sheet1") 

     range = xlWorkSheet.UsedRange 
     For rCnt = 1 To range.Rows.Count 
      For cCnt = 14 To range.Columns.Count 
      If xlWorkSheet.Cells(rCnt, cCnt).value = "3" Or xlWorkSheet.Cells(rCnt, cCnt).value = "4" Or xlWorkSheet.Cells(rCnt, cCnt).value = "5" Or xlWorkSheet.Cells(rCnt, cCnt).value = "6" Or xlWorkSheet.Cells(rCnt, cCnt).value = "7" Or xlWorkSheet.Cells(rCnt, cCnt).value = "8" Or xlWorkSheet.Cells(rCnt, cCnt).value = "9" Or xlWorkSheet.Cells(rCnt, cCnt).value = "10" Then 

        Obj = CType(range.Cells(rCnt, "E"), Excel.Range) 
        'MessageBox.Show(Obj.value) 

        Foo = Obj.value 
        Form2.Show() 
       End If 
      Next 
     Next 

     xlWorkBook.Close() 
     xlApp.Quit() 
     releaseObject(xlApp) 
     releaseObject(xlWorkBook) 
     releaseObject(xlWorkSheet) 
    End Sub 

    Private Sub releaseObject(ByVal obj As Object) 
     Try 
      System.Runtime.InteropServices.Marshal.ReleaseComObject(obj) 
      obj = Nothing 
     Catch ex As Exception 
      obj = Nothing 
     Finally 
      GC.Collect() 
     End Try 
    End Sub 
End Class 

FORM2

Imports System.Linq 
Imports System.Drawing 

Public Class Form2 
    Private Sub Panel1_Paint(sender As Object, e As PaintEventArgs) Handles Panel1.Paint 
     Dim label As New Label() 
     Dim count As Integer = Panel1.Controls.OfType(Of Label)().ToList().Count 

     label.Location = New Point(10, (25 * count)) 
     'label.Size = New Size(40, 20) 
     label.Name = "label_" & (count + 1) 
     label.Text = Foo '& (count + 1) 
     label.AutoSize = True 
     Panel1.Controls.Add(label) 

     Dim button As New Button() 
     button.Location = New System.Drawing.Point(250, 25 * count) 
     button.Size = New System.Drawing.Size(60, 20) 
     button.Name = "Print" & (count + 1) 
     button.Text = "Print" '& (count + 1) 
     AddHandler button.Click, AddressOf Button_Click 
     Panel1.Controls.Add(button) 
     MessageBox.Show(Foo) 
    End Sub 

    Private Sub Button_Click(sender As Object, e As EventArgs) 
     Dim button As Button = TryCast(sender, Button) 
     MessageBox.Show(button.Name + " clicked") 
    End Sub 
End Class    

Modul

Module Module1 

    Public Foo As String 

End Module 

Antwort

0

Wenn ich Ihr Problem richtig verstehe, wird der Event-Handler Panel1_Paint mehrfach für denselben Excel-Zellenwert aufgerufen. So könnte es einfach gelöst werden, indem geprüft wird, ob ein Etikett mit einem bestimmten Namen bereits dort vorhanden ist, z. wie folgt:

+0

Hallo bro .. kannst du bitte auch mein Beispiel ausarbeiten? Die Sache ist, dass ich mehrere Etiketten mit demselben Text bekomme. Nach ein paar Wiederholungen wird der Text geändert. –

Verwandte Themen