2 Array Vergleichen, doppelte Einträge zusammenfassen

  • VB.NET
  • .NET (FX) 4.0

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Nils89.

    2 Array Vergleichen, doppelte Einträge zusammenfassen

    Hallo zusammen,

    ich habe folgendes Vorhaben, weiß aber noch nicht genau wie ich das umsetztn soll:

    Ich habe 2 Excel Tabellen: Tabelle 1("Vergleichstabelle"); Tabelle 2("Quelltabelle")

    Bei klick auf einen Button soll folgendes Event ausgelößt werden:

    1. Der User muss die Quelltabelle mittels Auswahldialog auswählen.

    2. Es soll jetzt Zeile für Zeile der Quelltabelle abgearbeitet werden: Für jede Zeile soll folgendes gemacht werden:

    2.1 Es soll der Wert, der in Spalte 2(B) steht, in der Vergleichstabelle gesucht werden.
    2.2 Wenn der Wert in der Vergleichstabelle gefunden wurde soll aus dieser Zeile der Wert aus Spalte 2(B) in einer Varailbe "strEmailTo" gespeichert werden.
    2.3 Es soll eine EMail geöffnet werden und eine Datei angehängt werden: Der Pfad ist immer der selbe nur der Datei Name setzt sich aus dem Wert aus der Quelldatei Spalte 1(A) zusammen. (Dies habe ich bereits)
    2.4 Es soll mit der nächsten Zeile der Quelltabelle forgefahren werden.


    Was jetzt noch eingebaut werden soll aber von dem ich noch keine Ahnung habe wie es geht:

    Es kann sein, dass in der QuellTabelle in Spalte 2(B) öffertes (>2) der selbe wert vorkommt, hier soll natürlich nur 1ne Email mit allen Dateien geöffnet werden.

    Hoffe auf Hilfe.

    Gruß
    Nils
    Hallo,

    zerlege das ganze in Einzelschritte und löse sie einzeln.

    Als erstes suchst du dir mal raus wie man z.b. Datei auswählt --> FileBrowserDialog
    Dann gehst du den vergleich an.
    Die gefundenen Werte kannst du dir z.b. in ein Array legen und dann für senden wieder durchgehen.
    Kennst du die Grundlagen von .NET? Ins blaue Programmieren wird dir hier nicht lange Spaß machen.
    Wer fragt, ist ein Narr für eine Minute. Wer nicht fragt, ist ein Narr sein Leben lang.
    So hier einmal der Code mit dem ich es geschafft habe Punkt 1.2.4 umzusetzen, allerdings weiß ich nicht wie ich das mit dem Zusatz machen muss. Hat hier jemand eine Idee? Oder General Tipps zu meinem Code?

    VB.NET-Quellcode

    1. Private Sub AVM_versenden()
    2. Dim strPfadQuell As String
    3. Dim strPfadVergleich As String = My.Settings.Serverpfad & "xxxSendedokumente\Nicht Löschen\Vergleich.xlsx"
    4. Dim strPfad As String = My.Settings.Serverpfad & "xxxSendedokumente\Export\AVM\"
    5. Dim XLS As Object
    6. Dim olApp As Object
    7. Dim WorkbookVergleich As Object
    8. Dim WorkbookQuell As Object
    9. Dim intLetzteZeileQuell As Integer
    10. Dim intLetzteZeileVergleich As Integer
    11. Dim strSuchWert As String
    12. Dim strEmailTo As String
    13. Dim strDateiName As String 
    14. Using OpenFileDialog As New OpenFileDialog()
    15. OpenFileDialog.InitialDirectory = "C:"
    16. OpenFileDialog.Filter = "Excel Dateien (*.xls*)|*.xls*"
    17. If OpenFileDialog.ShowDialog = Windows.Forms.DialogResult.OK Then
    18. strPfadQuell = OpenFileDialog.FileName
    19. Else
    20. Exit Sub
    21. End If
    22. End Using
    23. XLS = CreateObject("Excel.Application")
    24. olApp = CreateObject("Outlook.Application")
    25. ' On Error Resume Next
    26. WorkbookVergleich = XLS.Workbooks.Open(strPfadVergleich)
    27. intLetzteZeileVergleich = 1
    28. While (Not WorkbookVergleich.Worksheets(1).Cells(intLetzteZeileVergleich, 1).Value Is Nothing)
    29. intLetzteZeileVergleich += 1
    30. End While
    31. WorkbookQuell = XLS.Workbooks.Open(strPfadQuell)
    32. intLetzteZeileQuell = 1
    33. While (Not WorkbookQuell.Worksheets(1).Cells(intLetzteZeileQuell, 1).Value Is Nothing)
    34. intLetzteZeileQuell += 1
    35. End While
    36.  
    37. With XLS
    38. 'intLetzteZeileQuell = WorkbookQuell.Worksheets(1).Cells(.Rows.Count, 1).End(xlUp).Row
    39. 'intLetzteZeileVergleich = WorkbookVergleich.Worksheets(1).Cells(.Rows.Count, 1).End(xlUp).Row
    40. For i As Integer = 2 To intLetzteZeileQuell
    41. strSuchWert = WorkbookQuell.Worksheets(1).Cells(i, 2).Value
    42. If strSuchWert = Nothing Then Exit For
    43. For j As Integer = 2 To intLetzteZeileVergleich
    44. If strSuchWert = WorkbookVergleich.Worksheets(1).Cells(j, 1).Value Then
    45. strEmailTo = WorkbookVergleich.Worksheets(1).Cells(j, 2).Value
    46. strDateiName = Mid(Replace(WorkbookQuell.Worksheets(1).Cells(i, 1).Value, ".", "-"), 10, 10)
    47. 'MsgBox(strDateiName)
    48. If System.IO.File.Exists(strPfad & strDateiName & ".pdf") Then
    49. With olApp.CreateItem(0)
    50. If My.Settings.EmailVon = "Funktion" Then
    51. .SentOnBehalfOfName = My.Settings.EmailVonEmail
    52. End If
    53. .GetInspector()
    54. .To = strEmailTo
    55. .Subject = "Ausgagsvermerk zu Ihrer Sendung"
    56. .htmlBody = "Test" & vbCrLf & .htmlBody
    57. .attachments.Add(strPfad & strDateiName & ".pdf")
    58. If OptNcts.Checked = True Or OptExport.Checked = True Then .attachments.add(My.Settings.Serverpfad & "xxxSendedokumente\Nicht Löschen\code_128.ttf") 'NUR NCTS/EX
    59. .Display()
    60. End With
    61. System.IO.File.Move(strPfad & strDateiName & ".pdf", strPfad & "\Versendet\" & strDateiName & ".pdf")
    62. End If
    63. End If
    64. Next j
    65. Next i
    66. XLS.DisplayAlerts = False
    67. WorkbookQuell.Close()
    68. WorkbookVergleich.Close()
    69. End With
    70. XLS = Nothing
    71. olApp = Nothing
    72. End Sub

    Dieser Beitrag wurde bereits 9 mal editiert, zuletzt von „Nils89“ ()

    So ich habe es jetzt so umgebaut, dass ich die 2 Tabellen in je einen Array einlese und diese dann verwende, was denke ich schneller ist.
    Jetzt habe ich nur noch das Programm, dass er für die selbe Kundennummer in der Quellarray mehrere Emails erstellt, anstatt nur eine.

    Gibt es hier Tipps?

    VB.NET-Quellcode

    1. Private Sub AVM_versenden()
    2. Dim strPfadQuell As String
    3. Dim strPfadVergleich As String = My.Settings.Serverpfad & "xxxSendedokumente\Nicht Löschen\Vergleich.xlsx"
    4. Dim strPfad As String = My.Settings.Serverpfad & "xxxSendedokumente\Export\AVM\"
    5. Dim XLS As Object
    6. Dim olApp As Object
    7. Dim WorkbookVergleich As Object
    8. Dim WorkbookQuell As Object
    9. Dim intLetzteZeileQuell As Integer
    10. Dim intLetzteZeileVergleich As Integer
    11. Dim Beleg As String = "die Ausfuhrbescheinigung"
    12. Dim strSuchWert As String
    13. Dim strEmailTo As String
    14. Dim strDateiName As String
    15. Dim i As Integer
    16. Dim j As Integer
    17. Dim arrQuell As Array
    18. Dim arrVergleich As Array
    19. Using OpenFileDialog As New OpenFileDialog()
    20. OpenFileDialog.InitialDirectory = "C:"
    21. OpenFileDialog.Filter = "Excel Dateien (*.xls*)|*.xls*"
    22. If OpenFileDialog.ShowDialog = Windows.Forms.DialogResult.OK Then
    23. strPfadQuell = OpenFileDialog.FileName
    24. Else
    25. Exit Sub
    26. End If
    27. End Using
    28.  
    29. XLS = CreateObject("Excel.Application")
    30. olApp = CreateObject("Outlook.Application")
    31. ' On Error Resume Next
    32. WorkbookVergleich = XLS.Workbooks.Open(strPfadVergleich)
    33. intLetzteZeileVergleich = 1
    34. While (Not WorkbookVergleich.Worksheets(1).Cells(intLetzteZeileVergleich, 1).Value Is Nothing)
    35. intLetzteZeileVergleich += 1
    36. End While
    37. arrVergleich = WorkbookVergleich.Worksheets(1).Range("A2:B" & intLetzteZeileVergleich).Value
    38. XLS.DisplayAlerts = False
    39. WorkbookVergleich.Close()
    40. WorkbookQuell = XLS.Workbooks.Open(strPfadQuell)
    41. intLetzteZeileQuell = 1
    42. While (Not WorkbookQuell.Worksheets(1).Cells(intLetzteZeileQuell, 1).Value Is Nothing)
    43. intLetzteZeileQuell += 1
    44. End While
    45. arrQuell = WorkbookQuell.Worksheets(1).Range("A2:B" & intLetzteZeileQuell).Value
    46. XLS.DisplayAlerts = False
    47. WorkbookQuell.Close()
    48. For i = 1 To UBound(arrQuell)
    49. strSuchWert = arrQuell(i, 2)
    50. If strSuchWert = Nothing Then Exit For
    51. For j = 1 To UBound(arrVergleich)
    52. If strSuchWert = arrVergleich(j, 1) Then
    53. strEmailTo = arrVergleich(j, 2)
    54. strDateiName = Mid(Replace(arrQuell(i, 1), ".", "-"), 10, 10)
    55. If System.IO.File.Exists(strPfad & strDateiName & ".pdf") Then
    56. With olApp.CreateItem(0)
    57. If My.Settings.EmailVon = "Funktion" Then
    58. .SentOnBehalfOfName = My.Settings.EmailVonEmail
    59. End If
    60. .GetInspector()
    61. .To = strEmailTo
    62. .Subject = "Ausgagsvermerk zu Ihrer Sendung"
    63. .htmlBody = EMail_deutsch(strDateiName, "zur Ausfuhr angemeldet", Beleg) & AVM_deutsch() & vbCrLf & .htmlBody
    64. .attachments.Add(strPfad & strDateiName & ".pdf")
    65. If OptNcts.Checked = True Or OptExport.Checked = True Then .attachments.add(My.Settings.Serverpfad & "xxxSendedokumente\Nicht Löschen\code_128.ttf") 'NUR NCTS/EX
    66. .Display()
    67. End With
    68. System.IO.File.Move(strPfad & strDateiName & ".pdf", strPfad & "\Versendet\" & strDateiName & ".pdf")
    69. End If
    70. Exit For
    71. End If
    72. Next j
    73. Next i
    74. arrQuell = Nothing
    75. arrVergleich = Nothing
    76. XLS = Nothing
    77. olApp = Nothing
    78. End Sub