Werte von Steuerelementen auslesen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von Asgard.

    Werte von Steuerelementen auslesen

    Hallo liebe Community,

    mir stellt sich folgendes Problem:
    Ich habe in einer Excel-Tabelle viele Checkbox-Steuerelemente und ich würde gern mit meinem vb.net Programm die Werte dieser Checkboxen auslesen.
    Ich weiß, wie man die Werte einer Zelle abfragt, aber leider kriege ich es nicht mit den Checkboxen hin.
    Ich würde mich über jede Hilfe freuen.

    Gruß Asgard

    P.S: Ich hoffe das Thema ist in der richtigen Rubrik. ?(

    Asgard schrieb:

    Checkboxen
    Was genau steht denn in der Excel-abelle drin?
    Da sollte ein Wert TRUE / FALSE oder 1 / 0 oder so drin stehen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Asgard schrieb:

    diese Werte
    Kannst Du mal die Excel-Tabelle dranhängen (vorher zippen)?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Asgard Hätte ich auch ignoriert. X(

    RodFromGermany schrieb:

    Kannst Du mal die Excel-Tabelle dranhängen (vorher zippen)?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Asgard In die Zellen sind spezielle Objekte eingefügt, die müsstest Du explizit extrahieren und dann deren Properties auslesen.
    Davon hab ich allerdings k.A. ;(
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ist zwar C# aber das sollte ja kein Problem sein. Es gibt auch noch das Problem, dass ich den Wochentag (hab die Tabelle natürlich bearbeitet) nicht herausbekomme.
    Vielleicht hilft es aber weiter.

    C#-Quellcode

    1. Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
    2. Workbook wb = excel.Workbooks.Open(path);
    3. Worksheet ws = wb.ActiveSheet;
    4. if (ws.Shapes != null && ws.Shapes.Count > 0)
    5. {
    6. foreach (Shape shape in ws.Shapes)
    7. {
    8. Microsoft.Office.Interop.Excel.CheckBox cb = shape.OLEFormat.Object as Microsoft.Office.Interop.Excel.CheckBox;
    9. shapeList.Add(shape.Name + " - id " + shape.ID.ToString() + " (" + shape.AlternativeText + "): "
    10. + (cb == null ? "null" : (cb.Value.ToString().Equals("1") ? "yes" : "no"))
    11. );
    12. }
    13. foreach (string item in shapeList)
    14. {
    15. MessageBox.Show(item);
    16. }
    17. }


    Der Code ist von hier.
    @Asgard

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Dim FileName As String = "...Verbandsbuch.xlsx"
    3. Dim TableName As String = "DeinTabellenblatt"
    4. Dim xlsAppl As Excel.Application
    5. Dim xlsMappe As Excel.Workbook
    6. Dim xlsBlatt As Excel.Worksheet
    7. Dim xlsShape As Shape
    8. xlsAppl = New Excel.Application
    9. xlsMappe = xlsAppl.Workbooks.Open(FileName)
    10. xlsBlatt = CType(xlsMappe.Worksheets(TableName), Worksheet)
    11. xlsShape = xlsBlatt.Shapes.Item("DeinKontrolkästchen")
    12. ' von Dksksm
    13. Dim boxValue0 = TryCast(xlsShape.OLEFormat.Object, CheckBox).Value '1 Double) = checked, -4146 (Integer) = unchecked, 2 (Double)= gemischt
    14. 'oder (ich habe soeben das ergoogelt)
    15. Dim boxValue1 = xlsShape.ControlFormat.Value '1 = checked, -4146 = unchecked, 2 = gemischt
    16. 'oder
    17. Dim boxValue2 = CBool(xlsBlatt.Range("A1").Value) 'Zelle(A1) als gebundene Zelle zum Kontrollkästchen
    18. '
    19. '...
    20. '
    21. xlsAppl.Quit()
    22. End Sub

    Man könnte auch die Kontrolkästchen an eine Zelle binden und dort den Wert herauslesen...

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VB1963“ ()

    Meine Variante in VB sieht jetzt wie folgt aus. Ich sammle nur die Positv-Ergebnisse in den Stingbuilder.
    Aber das ist irrelevant, das Wichtige war den OptionButton von der Checkbox unterscheiden zu können.

    VB.NET-Quellcode

    1. Imports System.Text
    2. Imports Microsoft.Office.Interop
    3. Imports Microsoft.Office.Interop.Excel
    4. Public Class Form1
    5. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    6. Dim path As String = ".......\Verbandsbuch.xls"
    7. Dim sOut As New StringBuilder
    8. Dim excel As New Microsoft.Office.Interop.Excel.Application()
    9. Dim wb As Workbook = excel.Workbooks.Open(path)
    10. Dim ws As Worksheet = CType(wb.ActiveSheet, Worksheet)
    11. 'Read the first cell
    12. 'string test = ws.Cells[1, 1].Value.ToString();
    13. If ws.Shapes IsNot Nothing AndAlso ws.Shapes.Count > 0 Then
    14. For Each shape As Shape In ws.Shapes
    15. Dim cb As Microsoft.Office.Interop.Excel.CheckBox = TryCast(shape.OLEFormat.[Object], Microsoft.Office.Interop.Excel.CheckBox)
    16. Dim opt As Microsoft.Office.Interop.Excel.OptionButton = TryCast(shape.OLEFormat.[Object], Microsoft.Office.Interop.Excel.OptionButton)
    17. If cb Is Nothing Then
    18. If opt IsNot Nothing Then
    19. If opt.Value.ToString().Equals("1") Then
    20. sOut.Append(shape.Name + " - id " + shape.ID.ToString() + " (" + shape.AlternativeText + ")" & Environment.NewLine)
    21. End If
    22. End If
    23. Else
    24. If cb.Value.ToString().Equals("1") Then
    25. sOut.Append(shape.Name + " - id " + shape.ID.ToString() + " (" + shape.AlternativeText + ")" & Environment.NewLine)
    26. End If
    27. End If
    28. Next
    29. End If
    30. ws = Nothing
    31. wb.Close()
    32. wb = Nothing
    33. excel.Quit()
    34. If sOut.Length > 0 Then
    35. MessageBox.Show(sOut.ToString(), "Ergebnis", MessageBoxButtons.OKCancel, MessageBoxIcon.None)
    36. End If
    37. End Sub
    38. End Class