Einbindung von Excelwerten in eine Vb.net Datei

  • VB.NET

Es gibt 28 Antworten in diesem Thema. Der letzte Beitrag () ist von adriax.

    Einbindung von Excelwerten in eine Vb.net Datei

    Hallo zusammen,

    erstmal vorweg, falls diese Frage schon in irgenteiner Art und Weise beantwortet wurde bitte ich darum mir den Link dazu hier drunter zu posten.

    So und nun zur Frage, unzwar habe ich folgendes Problem:

    1) Ich will eine Rechnungsapplikation schreiben
    2) Sie soll Zugriff auf eine Kundenverwaltung haben ( in Form einer Excel Datei )

    Zu 2) Hier ist es mir wichtig das ich nicht alles aus der Exceldatei einfach stur in die App einfüge sondern ich will gezielt nach einzelnen Personen fragen.
    Sprich ich habe ein Feld -Bestandskunde und -Neukunde.

    Bei Bestandskunde möchte ich durch eingabe von 1. oder mehreren Faktoren nach Personen in der Excel Datei suchen und dann nur die Daten der Person an die App übergeben.

    Bei den Neukunden möchte ich wie der Name schon sagt einfach über die App Werte an die Excel Datei übergeben.


    So ich hoffe das reicht an Informationen, falls nicht einfach fragen.
    Ich hoffe hier kann mir irgentwer helfen;)

    Mfg
    Adriax
    ja kannst du, das kommt drauf an wie deine Excel aufgebaut ist...
    im Normalfall ja
    Spalte A, Spalte B, Spalte C,...
    Name, Adresse, Hobbies, Neigungen
    entsprechend kannste ja wenn du den Namen gefunden hast, sprich den Range, wo der Name drn steht mit Range.Offset(Zeile, Spalte) zum Beispiel mit .Offset(0,3) die Neigung deines Namens raus finden
    Folge den Pfeilen.. du musst er in deiner Projektmappe, die Verweise für Excel importieren...
    1. Unten Projektmappe
    2. es öffnet sich deine Projektdatei
    3. Reiter Verweise
    4. hinzufügen
    5. Microsoft Excel suchen
    6. OK drücken
    Bilder
    • Excel-01.gif

      352,01 kB, 1.365×1.043, 237 mal angesehen
    soa jetzt kann ich mit der excel datei arbeiten aber er wirft mich mit dem fehler

    System.NullReferenceException: Object reference not set to an instance of an object.
    at Rechnungsapplikation.frmSearchCustomer.CmdSearchClick(Object sender, EventArgs e) in D:\Projekte\Rechnungsapplikation\Rechnungsapplikation\frmSearchCustomer.vb:line 32


    hier nochma mein quellcode vllt hilft der ;)

    VB.NET-Quellcode

    1. Sub CmdSearchClick(sender As Object, e As EventArgs)
    2. 'Bereich Excel Auswertung
    3. Dim xlApp As New Application
    4. Dim xlWorkbook As Workbook
    5. Dim xlWorksheet As Worksheet
    6. xlWorkbook = xlApp.Workbooks.Open("D:\Projekte\Kundenverwaltung2.xls")
    7. xlWorksheet = CType(xlWorkbook.Worksheets("Kundenverwaltung"), Worksheet)
    8. Dim suchRng As Range = xlWorksheet.Range("A:A")
    9. For Each rng As Range In suchRng
    10. If String.IsNullOrEmpty(rng.Value.ToString) Then Exit For
    11. If rng.Value.ToString = tbKdnr.Text Then
    12. rng.Offset(0,1).value = tbVorname.text
    13. End If
    14. Next
    15. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „adriax“ ()

    so die fehler meldung ist weg aber jetzt ist das ding relativ performence lastig und braucht erstma ewig bis was passiert.

    hier nochma der code (diesma sogar in vb format;-) )

    VB.NET-Quellcode

    1. Sub CmdSearchClick(sender As Object, e As EventArgs)
    2. 'Bereich Excel Auswertung
    3. Dim xlApp As New Application
    4. Dim xlWorkbook As Workbook
    5. Dim xlWorksheet As Worksheet
    6. xlWorkbook = xlApp.Workbooks.Open("D:\Projekte\Kundenverwaltung2.xls")
    7. xlWorksheet = CType(xlWorkbook.Worksheets("Kundenverwaltung"), Worksheet)
    8. Dim suchRng As Range = xlWorksheet.Range("A:A")
    9. For Each rng As Range In suchRng
    10. If rng.Value = tbKdnr.Text Then
    11. tbVorname.text = rng.Offset(0,1).value
    12. End If
    13. Next
    14. End Sub
    kleiner Tip....
    Excel wird versteckt geöffnet... du solltest i-wo auch die Dateien schliessen ... schau mal in deinen Task Manager..., da werden ggf schon zig Excel offen sein...
    Ich erstelle die excel Instanz meist global... das öffnen des Workbooks nur da wo es gebraucht wird, aber wichtig... nach dem bearbeiten wirden schliessen...
    wb.close savechanges := false/true je nachdem
    mit dem Algo sucht du IMMER alle zellen, das is natürlich lange...
    du solltest in dem gefunden zweig noch ein exit for nach deiner bearbeitung einfügen
    Hallo,

    noch eine Frage

    unzwar wenn ich einen kunden erstellen möchte, sprich in der vb datei in textboxen werte vergebe wie stell ich das dann an das er sich richtig sortiert, den richtigen anfang nimmt ( bsp. mit der Kundennummer anfängt) und nicht jedes mal z.B. den zweiten wert überschreibt?

    Meine Überlegungen wären:

    Ihn erstma nach der Spalte Kundennummer suchen lassen, danach irgentwie herauszubekommen welche Reihe in der Spalte Kundennummer frei/leer ist, sodass er da dann anfangen kann. Nur weiß ich nicht wie ich dies umsetzen kann.
    na wie du ne freie Zeile suchst haste ja quasi schon als abbruchbedingung in der Schleife drin...
    Achtung PseudoCode

    VB.NET-Quellcode

    1. for each rng as Range in Worksheet.Rane("Spalte")
    2. if rng.value = Kundennummer then ZeileKunde = rng.row
    3. if rng.value = "" then
    4. LeereZeile = rng.row
    5. exit for
    6. end if
    7. next rng
    Vorab, tut mir leid falls ich mich gerade einwenig "dumm" anstelle;-)

    also wenn ich dich richtig verstanden habe

    hier beginnt das for, wo ich jedoch bei "Spalte" meinen Spaltenbereich(z.B. "A:A") eingeben muss ich dem ich suchen möchte

    VB.NET-Quellcode

    1. for each rng as Range in Worksheet.Range("Spalte")


    hier soll ich anscheind eine Kundennummer nach der er sucht vorgeben? damit er dann die Zeile übermittelt bekommt

    VB.NET-Quellcode

    1. if rng.value = Kundennummer then ZeileKunde = rng.row


    hier wird geprüft ob rng.value = "" ist, wodurch dann LeereZeile den Wert der Zeile bekommt

    VB.NET-Quellcode

    1. if rng.value = "" then LeereZeile = rng.row


    ...

    kann ich hier dann einfach weiter mit z.B.

    VB.NET-Quellcode

    1. If rng.Value = "" Then
    2. rng.Offset(0,0).Value = tbKdnr.Text
    3. rng.Offset(0,1).Value = tbVorname.Text
    4. rng.Offset(0,2).Value = tbName.Text
    5. rng.Offset(0,3).Value = tbStreet.Text
    6. rng.Offset(0,4).Value = tbPLZ.Text
    7. rng.Offset(0,5).Value = tbTown.Text
    8. End If
    machen?
    Oder muss

    VB.NET-Quellcode

    1. if rng.value = "" then LeereZeile = rng.row
    dort rein?