Beiträge von 32vroni

    "Wobei sich mir immer wieder die Frage stellt, wieso man nicht direkt VBA nutzt statt AutoIt. Irgendwer muss ja die ganzen Excelsheets füllen, "


    In diesem Fall ist es ein Export aus einem Zeiterfassungssystem, welches die Listen nur in dieser Weise liefert. Hier gibt es keine Möglichkeit, auf die Ausgabe Einfluss zu nehmen.

    Die Listen müssen nachträglich automatisch angepasst werden, nachdem diese in einem Ordner eintreffen. Ich habe keine Ahnung, wie ich das mit VBA machen würde.


    Im Grunde geht es mir darum, die Tabellen so umzubauen, dass ich mit Power BI die passenden Berichte zaubern kann.

    Ich weiß: Im Grunde ist das überflüssig, denn eigentlich könnte man diese Tabellen wohl auch in Power BI transformieren.

    Nur stehe ich da ganz am Anfang und habe nicht die Zeit, das eigentlich nötige Verständnis in mein Hirn zu bringen.

    Hallo zusammen,


    wie kann ich den Suchbereich für einen Suchbegriff eingrenzen?

    Ich habe eine Tabelle und wollte zunächst alle Spalten löschen, die in der Zeile 3 eine Zahl beinhalten.


    Ich fange also mal ganz einfach an und kopiere das Beispiel aus der Hilfe, es soll nach dem Wert 15 gesucht werden:




    Mit der auskommentierten Zeile ;~ Local $aResult = _Excel_RangeFind($oWorkbook, "15") funktioniert es. Ich bekomme ein Array mit mehreren Adressen angezeigt, u.a. auch $P$3 - das ist die gesuchte Spalte.

    Aber ich bekomme auch noch weitere Zellen zurück und wollte daher die Suche auf die dritte Zeile eingrenzen.


    Versuche ich es hingegen mit der anderen Zeile Local $aResult = _Excel_RangeFind($oWorkbook, "15", "A3:AZ3") bekomme ich nur ein leeres Array angezeigt.

    Worin besteht mein Denkfehler?


    Zusatzfrage:

    Kann ich auch einfach nach allen Zahlen wie mit dem RegEx Ausdruck [0-9]* suchen? Ich möchte alle Spalten löschen, bei denen die Zelle in der dritten Zeile eine Zahl beinhaltet.


    Danke!

    Mal ein anderer Ansatz:

    Solltest Du ein bestimmtes Problem lösen wollen und das nicht zwingend mit AutoIT, könntest Du das vielleicht auch mit verfügbarer Software machen.

    Mach von beiden Verzeichnissen mit der Shell jeweils eine Textdatei und vergleiche die mit Notepad++ mit dem Plugin "Compare".

    Vermutlich gibt es auch noch diverse andere Hilfsmittel in der weiten Welt des Netzes.

    In einer Tabelle mit mehreren tausend Zeilen kommen in Spalte D diverse Begriffe nicht nur einmal vor, sondern mehrfach. Ich brauche immer den gesamten Datensatz der Zeile (Spalten A-U), in dem ein solcher Begriff das erste Mal erscheint, die anderen Zeilen muss ich farbig markieren oder an die weiteren gefundenen Begriffe ein # anhängen. Doppelte Einträge zu löschen ist nicht möglich.


    Es soll entweder das jeweils erste Vorkommen von Wasser, Milch, Wein, Bier markiert werden (siehe Bild), oder alle anderen Vorkommen. Alternativ kann auch ein Sonderzeichen wie etwa # an den jeweils ersten gefunden Begriff gehängt werden. Es geht darum, die ersten von den restlichen gefundenen Begriffen unterscheidbar zu machen.

    Da ich nicht weiß, welche Begriffe mehrfach vorkommen, ist eine Suche nach vorher definierten Begriffen unmöglich.

    Wie kann das mit Excel, Notepad++, oder AutoIT gelöst werden? Geht das mit Regulären Ausdrücken? Ich weiß ja nicht, nach was ich suche - nur dass ich die zweiten und weitere Duplikate von den ersten trennen muss.


    Bestens - vielen Dank für Deine superschnelle Hilfe!!

    Das hat mir sehr geholfen; ich hätte das nicht hinbekommen.

    Da wäre ich einige Tage daran gesessen und hätte mühevoll jede Zeile manuell umbauen müssen. Mit SVERWEIS kann ich mir schon einigermaßen helfen, aber das war zu komplex für mich.

    Das war riesig nett von Dir! :klatschen::thumbup::thumbup:

    Danke, da hatte ich nicht aufgepasst, mein Fehler.


    Ich habe das Wunschergebnis hier angefügt.

    Die Zeilen 1-4 zeigen das aktuelle Ergebnis. Der Wunsch ist, dass alle gleichen Bezeichnungen sortiert werden und dann erst die Werte der nächsten Bezeichnung aufgezählt werden.

    Der Unterschied ist in Zeile 11 zu sehen:

    Zuerst werden alle Werte der Bezeichnung "Abmaß" aufgezählt und dann erst die Werte der Bezeichnung "Nennleistung".

    Gibt es eine Sortierfunktion für die Werte in Deiner UDF?


    Vielen Dank für Deine Mühe!

    Ich habe die Dateinamen und Bezeichnungen angepasst, hier das aktuelle Skript. Die Rohdaten und das Ergebnis sind angehängt.

    Im Ergebnis fehlt die erste Zeile von den Rohdaten ("Bestückung") und bei den Bezeichungen "Abmaß" und "Typ" fehlt jeweils ein Wert. Bei "Nennleistung" hingegen passt es.


    BRD4.7z


    Besten Dank für die Mühe!


    Ich probiere es gerade und zunächst fällt auf, dass diese Meldung ausgegeben wird, wenn ich in dem Verzeichnis, in dem das Skript liegt, die Datei 7za.exe enthalten ist (habe Deine xlsxNative-UDF installiert) :


    "C:\Test\Daten-sortieren.au3" (8) : ==> Variable subscript badly formatted.:

    Global $aOut[UBound($aDaten) - 1][16] = [["Bestückung 1", "Bestückung 2", "Bestückung 3", "Bestückung 4", "Bestückung 5", "Bestückung 6", "Bestückung 7", "Bestückung 8", "Sonstiges 1", "Sonstiges 2", "Sonstiges 3", "Sonstiges 4", "Sonstiges 5", "Sonstiges 6", "Sonstiges 7", "Sonstiges 8"]]

    Global $aOut[^ ERROR


    Benenne ich die Datei um, läuft es ohne Fehlermeldung. Allerdings ist die erzeugte Datei fehlerhaft - beim Öffnen kommt die Meldung:

    Von Excel wurde unlesbarer Inhalt in "out.xlsx" gefunden. Das liegt offenbar am kaufmännischen Und &, welches in einer Zelle steht. Ersetze ich dieses durch Plus +, funktioniert es - zumindest mit einer kurzen Datei, welche nur wenige Zeilen beinhaltet. Ich teste noch weiter.

    Gerne, das zuvor angehängte Bild ist ein Screenshot von der hier angehängten Tabelle.

    Es muss nicht zwangsläufig mit Excel gemacht werden.


    Mein Gedanke war, alle Felder von A2 bis P4 in ein Array zu laden.


    Dann im ersten Durchlauf zu prüfen, ob die Bezeichnung "Bestückung" in der Spalte A1 enthalten ist. Wenn ja, wäre der Wert aus der Spalte rechts daneben in die Zelle A12 zu schreiben.

    Wenn nein, wird weiter geprüft, bis die nächste Bezeichnung "Bestückung" in der Zeile gefunden wurde und dann würde dessen rechter Wert in A12 geschrieben werden. Gäbe es weitere Bezeichnungen "Bestückung", würden die dann in B12, C12... abgelegt.

    Wenn "Bestückung" in dieser Zeile nicht mehr enthalten ist, wird nach der nächsten Bezeichnung "Sonstiges" gesucht. Und dessen rechts daneben stehender Wert würde in Zelle I12 abgelegt. Ist auch da keine weitere Bezeichnung "Sonstiges" zu finden und gibt es auch keine weiteren anders lautenden Bezeichnungen, ist der Vorgang für diese Zeile abgeschlossen und der Vorgang wird für die nächste Zeile wie oben beschrieben wiederholt.

    Hallo zusammen,


    Ich habe eine Tabelle mit einigen tausend Zeilen.

    In jeder Zeile gibt es 60 Spalten die abwechselnd eine Bezeichnung und einen Wert beinhalten. Das sind 30 Paare, die im Beispiel jeweils mit 1a/1b, 2a/2b,... dargestellt sind.


    Am Ende der Tabelle gibt es eine andere Tabelle ab Zeile 10, in welche die Werte der oberen Tabelle in die passenden Spalten sortiert werden sollen.

    Bei Zeile 3 ist es relativ einfach. Diese beinhaltet 8 verschiedene Werte jeweils mit der Bezeichnung "Bestückung". Der Wert der Bestückung aus der Spalte 1b in Zeile 3 muss in der Spalte Bestückung 1 in Zeile 12 kopiert werden.

    Alles, was die Bezeichnung "Bestückung" trägt, gehört in die nächste leere Zelle, deren Spaltenkopf ebenfalls "Bestückung" lautet.


    Bei Zeile 4 ist es durcheinander:

    Da gibt es zunächst zwei Werte mit der Bezeichnung "Bestückung", gefolgt von vier Werten mit der Bezeichnung "sonstiges", dann wieder einmal "Bestückung" und schließlich einmal "sonstiges".

    Alle Werte gehören ebenfalls der Reihe nach unter die passenden Spaltenköpfe in Zeile 13 kopiert.


    Das sind nur zwei von insgesamt 30 Paaren. Im Endeffekt müssen alle Werte, die die gleiche Bezeichnung tragen nacheinander in die jeweiligen Spalten sortiert werden. Dabei wird es immer leere Zellen geben; das ist ok.


    Mir ist es im Grunde egal, wie das erreicht wird, ob mit Excel oder AutoIT oder sonstwas. Letzten Endes wird eine Tabelle benötigt, die zum Import der Daten in ein anderes System verwendet wird. Das kann auch eine CSV-Datei sein.

    Wie könnte man das erreichen?



    Ich möchte mit einem Skript alle laufenden Tasks beenden, die im Taskmanager im Reiter Details mit "chrome.exe" angezeigt werden. Das sind meist 4 Tasks, die kurz nach Start des Rechners automatisch laufen. Browserfenster werden nicht zwangsläufig gestartet.

    Dazu habe ich das gefunden:


    Local $process = ProcessList("chrome.exe")

    For $i = 1 To $process[0][0]

    ProcessClose($process[$i][1])

    Next


    Leider passiert da nichts, die Tasks bleiben bestehen.

    Wenn ich aber im Taskmanager den chrome.exe Task mit der größten Speicherbelegung wähle und diesen manuell beende, zieht das die anderen Tasks mit sich und alle werden beendet.

    Worin besteht mein Fehler?

    Wie wäre es mit dem folgenden Ansatz:

    Du machst einmal einen Screenshot vom ungefüllten Feld und einen vom gefüllten Feld. Bei anderen Programmen sieht man Sternchen und ein Screenshot zeigt auch diese. So könntest Du die beiden Bilder vergleichen.

    Hallo,


    hier sind drei Bilder angehängt. Ich will letztlich ein Bild erzeugen nach dem Vorbild "gewünschtes_Ergebnis.png".

    Praktisch wäre es, das mit Chrome headless zu machen. Leider wird da nicht die gewünschte Größe des für mich wichtigen Bildausschnitts erzeugt. Das Ergebnis, welches mit der auskommentierten Zeile ;~ ShellExeute... geliefert wird, ist im Bild "Vollbild_mit_Shell-Execute.png" zu sehen.

    Der Bildschirm ist auf 2560x1440 eingestellt.


    Die Zeilen mit Run... und _ScreenCapture... liefern zwar das passende Ergebnis, aber es läuft nicht im Hintergrund ab.

    Wie erreiche ich das Ziel? Kann ich auch einfach nur das Bild herunterladen oder muss ich das mit einem Screenshot machen?


    Danke!


    Da war ich vermutlich ungenau:

    Die Webseite wird bislang mit dem Internet Explorer jede Minute aufgerufen, dargestellt, es wird ein Screenshot von einem bestimmten Teil der Seite gemacht und als Bild gespeichert.

    Dazu läuft aber ständig dieser Browser im Vordergrund; das hätte ich gern unterbunden.


    Mit curl kann ich die gesamte Webseite speichern, brauche aber dann nur den Teilausschnitt als Bild.

    Mittlerweile habe ich wohl eine Lösung gefunden:

    "c:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --headless --screenshot="c:\temp\BILD.png" --hide-scrollbars --window-size=1024,2550 "c:\temp\curl_captured_Webseite.html"

    Im Prinzip missbrauche ich den Browser zum Wandeln der Webseite nach png. Vielleicht gibt es da auch andere Lösungen, mir genügt das aber.

    Dann muss ich nur mehr mit import das Bild croppen.

    Ich speichere regelmäßig mit curl eine Webseite und brauche davon einen Screenshot.

    Ich kann sie mit einem Browser laden, darstellen und dann automatisiert einen bestimmten Bereich ausschneiden.

    Das würde ich aber gerne vermeiden, da es stört, wenn sich der Browser regelmäßig auf dem Desktop breit macht.

    Wie kann ich die Seite automatisiert mit einem Kommadozeilenprogramm oder AutoIt in png oder jpg wandeln?

    In dem Skript wird zunächst eine Verbindung zum WLAN hergestellt. Das funktioniert meist, manchmal aber nicht. Wenn es nicht funktioniert, soll der Ablauf wiederholt werden.


    ...

    Code zum Verbinden mit dem WLAN

    ...


    Die Prüfung, ob Verbindung zum Internet besteht, würde ich so machen:

    $var = Ping("www.google.de")

    If @error = 1 Then wiederhole die Sektion Code zum Verbinden mit dem WLAN


    Wie mache ich das am einfachsten?