Excel die zweite...

  • Hallo Leute,

    würde wieder eure Hilfe gebrauchen.

    Ich arbeite an einem Programm wo ich zwei Excel Datein vergleichen will (also fixe, gleichbleibende Zeilen) und bei denen ich dann die gleichen Zelleninhalte in einem Edit Fenster anzeigen will.

    Ich hänge daran, weil ich nicht weiß wie ich mehrere Zellen auf einmal einlesen kann. Das ganze Blatt brauch ich nicht einlesen da ich nur die Zellenbereiche, B11, C11, D11 und I11 benötige und senkrecht bis max B35, C35, D35 und I35.

    Ich könnte die Zellen alle einzeln auch einlesen, aber das ist ziemlich verwirrend :wacko:

    Das ganze will ich mit zwei Datein machen, dann eben die eingelesen Zellen vergleichen und diejenigen mit den selben Werten eben ins Edit Feld schreiben.

    Den Quellcode könnte ich euch ja anhängen nur die Excel Files leider nicht da ich da vertrauliche Infos drinnen hab...

    Sorry

    Habt ihr eine Idee für mich?

    Lg

  • Ich würde trotzdem das ganze Arbeitsblatt einlesen, da das viel schneller geht als jede Zelle einzeln einzulesen.
    Dann hast du einen Array den Du schön bearbeiten kannst.

    • Offizieller Beitrag

    Ich denke mal, dass bei den paar Zellen, das Einlesen in ein Array und dann erst vergleichen eher langsamer ist.
    So sollte es flott laufen.

    [autoit]

    $oBook1 = _ExcelBookOpen('Pfad1')
    $oBook2 = _ExcelBookOpen('Pfad2')
    For $i = 0 To 34
    If $oBook1.Range('B1').Offset($i, 0).Value = $oBook2.Range('B1').Offset($i, 0).Value Then ConsoleWrite('Inhalt gleich: ' & $oBook2.Range('B1').Offset($i, 0).Value & @CRLF)
    If $oBook1.Range('C1').Offset($i, 0).Value = $oBook2.Range('C1').Offset($i, 0).Value Then ConsoleWrite('Inhalt gleich: ' & $oBook2.Range('C1').Offset($i, 0).Value & @CRLF)
    If $oBook1.Range('D1').Offset($i, 0).Value = $oBook2.Range('D1').Offset($i, 0).Value Then ConsoleWrite('Inhalt gleich: ' & $oBook2.Range('D1').Offset($i, 0).Value & @CRLF)
    If $oBook1.Range('I1').Offset($i, 0).Value = $oBook2.Range('I1').Offset($i, 0).Value Then ConsoleWrite('Inhalt gleich: ' & $oBook2.Range('I1').Offset($i, 0).Value & @CRLF)
    Next

    [/autoit]

    Man könnte auch für 'B' bis 'D' das Spaltenoffset in einer extra Schleife nutzen. Ist aber dieselbe Menge Code - also kein Vorteil.

  • Danke für eure Antworten.

    Bzgl. Array hab ich mich auch schon nebenbei schlau gemacht, da kam meistens das das zu lange dauert. Ich werd mal den Code versuchen dann lass ich euch wissen ob es klappt :thumbup:

    Danke Leute

  • Hallo Leute,

    hab den Code versucht. Naja, ich bin mit dem Ergebniss nicht ganz zufrieden. Es funzt, aber das ganze werd ich anders versuchen. Jetzt stellt sich eine andere Frage :whistling:

    Ich hab die benötigten Spalten von einem File in nen Array eingelesen. Kann ich diese Ergebnisse in diesem Array bearbeiten? Also wenn ich im Array Texte oder Spalten löschen/hinzufügen will?

    Grob gesagt, kann ich in diesen Arrays dann arbeiten?

  • Geht, wenn u.U. auch etwas eingeschränkt. Spalte hinzufügen geht mit ReDim, Spalte einfügen geht nur umständlich mit ReDim und dann die bestehenden Spalten kopieren.
    Kommt also drauf wan, was Du machen möchtest.

  • Aha, ich lese jetzt ja mehr als nötig ein. So hab ich mir gedacht, das was eben zuviel ist, lösch ich raus - oder ich kopiere nur das was ich brauch raus in einen anderen Array wenn das möglich ist.

    Es sieht mal soweit so aus:

    (Ich hab den Code BugFix noch drinnen und ausgeblendet, sollte nicht stören)

    [autoit]


    Func _Vergleichen()
    $FuerArray = _ExcelBookOpen($FileOeffnenLinks, 0)
    $aArrayLinks = _ExcelReadSheetToArray($FuerArray, 10, 1, 24, 10) ; Startet in der 10. Zeile der 1. Spalte, liest 24 Zeilen und 7 Spalten
    _ArrayDisplay($aArrayLinks, "Startet in der 10. Zeile der 1. Spalte, liest 24 Zeilen und 7 Spalten")
    ;~ MsgBox(64, "", $aArrayLinks)

    [/autoit][autoit][/autoit][autoit]

    ;~ $oBook1 = _ExcelBookOpen($FileOeffnenLinks, 0)
    ;~ $oBook2 = _ExcelBookOpen($FileOeffnenRechts, 0)
    ;~ Sleep(1000)
    ;~ For $i = 0 To 34
    ;~ If $oBook1.Range('B11').Offset($i, 0).Value = $oBook2.Range('B11').Offset($i, 0).Value Then _GUICtrlEdit_InsertText($Anzeigefeld, $oBook2.Range('B11').Offset($i, 0).Value & @CRLF)
    ;~ If $oBook1.Range('C11').Offset($i, 0).Value = $oBook2.Range('C11').Offset($i, 0).Value Then _GUICtrlEdit_InsertText($Anzeigefeld, $oBook2.Range('C11').Offset($i, 0).Value & @CRLF)
    ;~ If $oBook1.Range('D11').Offset($i, 0).Value = $oBook2.Range('D11').Offset($i, 0).Value Then _GUICtrlEdit_AppendText($Anzeigefeld, $oBook2.Range('D11').Offset($i, 0).Value & @CRLF)
    ;~ If $oBook1.Range('I11').Offset($i, 0).Value = $oBook2.Range('I11').Offset($i, 0).Value Then _GUICtrlEdit_AppendText($Anzeigefeld, $oBook2.Range('I11').Offset($i, 0).Value & @CRLF)
    ;~ _ExcelBookClose($FileOeffnenLinks, 0)
    ;~ _ExcelBookClose($FileOeffnenRechts, 0)
    ;~ Next
    EndFunc

    [/autoit]

    Die von mir benötigten Spalten wären, die erst, zweite, dritte, vierte und die siebente. Wobei ich die zweite mit dem anderen File dann vergleichen will und dann eben die übereinstimmenden Werte im EditFeld mit der kompletten Zeile ausgeben will/soll.