1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. dgi

Beiträge von dgi

  • Denkanstoß gesucht.

    • dgi
    • 25. August 2021 um 13:17

    Hallo Concara,

    das hatte ich auch festgestellt war sehr damit beschäftigt, dass alles nachzuvollziehen und zu verstehen.

    Ich habe das Tool jetzt mit PDFTK zum laufen gebracht. Habe die Input und Output Ordner angepasst. und habe den Ausgabestring noch verändert, sodass man in der GUI den Dateinamen nicht mehr mit der Endung .pdf angeben muss.

    Alles in allem läuft das Tool jetzt so wie es soll. Ich lasse 2 User gerade testen um das Tool dann für alle einzuführen.

    Vielen Dank für Deine großartige Unterstützung!

    Natürlich auch danke an alle anderen Schreiber, die hier beteiligt waren.

    Beste Grüße

    DGI

  • Denkanstoß gesucht.

    • dgi
    • 24. August 2021 um 16:58

    Hi Concara,

    also ich habe noch eine Bitte :

    Dein Ausgabestring erzeugt :

    C:\Program Files\PDF24\pdf24-DocTool.exe -join -profile default/good -outputFile "OutputOrdner\ausgabe.pdf" "eingabeOrdner1\111111.pdf" "eingabeOrdner2\111111.pdf" "eingabeOrdner3\111111.pdf" "eingabeOrdner4\111111.pdf"

    Ich habe mich umgeschaut und würde gerne PDFTK nutzen der String müsste aber folgendermaßen zusammengebaut werden :

    C:\Program Files\PDFTK\bin\pdftk.exe "eingabeOrdner1\111111.pdf" "eingabeOrdner2\111111.pdf" "eingabeOrdner3\111111.pdf" "eingabeOrdner4\111111.pdf" cat output "OutputOrdner\ausgabe.pdf"

    Das bekomme ich nciht zusammen gebaut. Vielleicht kannst Du da helfen?

    Beste Grüße

    DGI

  • Denkanstoß gesucht.

    • dgi
    • 24. August 2021 um 13:09

    Hi Concara,

    ich hatte wegen der "Engine" nur als Alternatrive gefragt. PDF24 ist auf dem Terminal Server unfassbar langsam wenn es an das zusammen stellen per Kommandozeile geht. Daher habe ich den Nuance Power PDF NPDFCreate.exe verwendet und das Fenster dann automatisiert.

    Das Tool soll und muss auf dem Terminal Server verwendet werden.


    Eine konkrete Frage wäre :

    $sAusgabeString --> hier scheinen ja die enthaltenen Dateien mit den Pfaden drin zu stecken?!?!

    Aber wie verwende ich das ganze nun um die 1,2,3 oder vier enthaltenen Werte an das Tool zu übergeben?

    In einem vorigen Code Schnipsel habe ich verstanden wie die Werte übergeben werden :

    Code
    #include <File.au3>
    
    Global $prog = "C:\Program Files (x86)\Nuance\Power PDF\bin\NPDFCreate.exe"
    Global $aPathSource[] = ["C:\RE-Temp\O1", "C:\RE-Temp\O2", "C:\RE-Temp\O3", "C:\RE-Temp\O4"]
    Global $outpath = "C:\RE-Temp\Output"
    Global $aFileSource[UBound($aPathSource)] ; gleiche Größe wie Array mit Ordnern
    Global $aTmp
    For $i = 0 To UBound($aPathSource) -1
        $aTmp = _FileListToArray($aPathSource[$i], '*.pdf', 1, True)
        $aFileSource[$i] = $aTmp[1]
    Next
    Global $outputname = InputBox('Datei erstellen', 'Bitte Dateinamen angeben')
    Global $sCmd = StringFormat('%s "%s" "%s" "%s" "%s"', $prog, _
                                $aFileSource[0], $aFileSource[1], $aFileSource[2], $aFileSource[3])
    Run($sCmd, '', @SW_HIDE) ; evtl. WorkingDir-Angabe erforderlich
    
    ;For $i = 0 To UBound($aFileSource) -1
    ;    FileDelete($aFileSource[$i])
    ;Next
    Alles anzeigen
    Code
    Global $sCmd = StringFormat('%s "%s" "%s" "%s" "%s"', $prog, _                            $aFileSource[0], $aFileSource[1], $aFileSource[2], $aFileSource[3])
    Run($sCmd, '', @SW_HIDE) ; evtl. WorkingDir-Angabe erforderlich

    Ich bekomme das nicht ganz umgedacht.

    Und was hat es mit dem $sRun auf sich?

    Beste Grüße

    DGI


    EDIT : Ich musste mir das noch 10 Mal ansehen... Der String besteht aus den gefunden Dateinamen. Ich könnte also noch ein leerzeichen zwischen den Dateinamen einfügen und dann wie oben mir ein String wie $sCmd zusammenbauen...

    Ich glaube so gaaaaanz langsam, :)

    Korrigiere mich bitte wenn ich falsch liege.

    Beste Grüße

    DGI

  • Denkanstoß gesucht.

    • dgi
    • 24. August 2021 um 10:48

    OK, ich muss passen. Ich wollte keine fertige Lösung - richtig - bin mir aber gar nicht mehr so sicher.... , aber ich verstehe nicht alles was ich da im Code lese...

    Ich brauche dann doch noch etwas mehr Hilfe als ich vermutet habe.

    Beste GRüße

    DGI

  • Denkanstoß gesucht.

    • dgi
    • 24. August 2021 um 09:15

    Hallo Concara,

    habe ich gleich mal getestet. Mega! :)

    Jetzt mache ich mich daran die anderen schon vorhanden Code Schnippsel zu benutzen und die Verarbeitung anzustoßen.

    Gibt es denn "Engines" oder wie mann das nennt die PDF auch direkt zusammenfügen können ohne ein installiertes Programm auf dem jeweiligen Rechner?

    Beste GRüße

    DGI

  • Denkanstoß gesucht.

    • dgi
    • 20. August 2021 um 13:42
    Zitat von Concara

    Falls die Projektnummer am Anfang der Datei steht, dann sollte dir der Code hier etwas helfen.

    Die Ausgabe müsste allerdings noch programmiert werden.

    AutoIt
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <Array.au3>
    ;GUI erstellen
    Local $hGUI = GUICreate("Dokument erstellen", 280, 225, 180, 122)
    
    ;Label erstellen
    Local $idLabel1 = GUICtrlCreateLabel("Bitte Projektnummer eingeben:", 16, 11, 148, 17)
    Local $idLabel6 = GUICtrlCreateLabel("Bitte Dateinamen eingeben:", 16, 163, 135, 17)
    ;Gruppe erstellen
    ;~ Local $idGroup1 = GUICtrlCreateGroup("Was soll zusammengefügt werden?", 16, 32, 249, 121)
    ;Checkboxen erstellen
    ;~ Local $idcheckbox1 = GUICtrlCreateCheckbox("Teil 1", 32, 56, 120, 17)
    ;~ Local $idcheckbox2 = GUICtrlCreateCheckbox("Teil 2", 32, 80, 120, 17)
    ;~ Local $idcheckbox3 = GUICtrlCreateCheckbox("Teil 3", 32, 104, 120, 17)
    ;~ Local $idcheckbox4 = GUICtrlCreateCheckbox("Teil 4", 32, 128, 120, 17)
    ;Inputs erstellen
    Global $aOrdner1, $aOrdner2, $aOrdner3, $aOrdner4
    Global $idprojnr = GUICtrlCreateCombo("", 168, 8, 97, 21)
    ;Local $idprojnr = GUICtrlCreateInput("", 168, 8, 97, 21)
    Local $idDateiname = GUICtrlCreateInput("ausgabe.pdf", 168, 160, 97, 21)
    ;Buttons erstellen
    Local $ideinlesen = GUICtrlCreateButton("Neueinlesen", 16, 184, 70, 33)
    Local $idstart = GUICtrlCreateButton("Start", 86, 184, 70, 33)
    Local $idclose2 = GUICtrlCreateButton("Abbrechen", 156, 184, 70, 33)
    ;Gui starten
    _einlesen()
    GUISetState(@SW_SHOW, $hGUI)
    ;Loop bis Abbrechen geklickt wird
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE, $idclose2
                ExitLoop
            Case $idstart
                $projektnr = GUICtrlRead($idprojnr)
                $ausgabenamen = GUICtrlRead($idDateiname)
                If $projektnr <> "" And $ausgabenamen <> "" Then
                    $sRun = _Ausgabe($projektnr, $ausgabenamen)
                    MsgBox(0, "Info", $sRun, 0, $hGUI)
                Else
                    MsgBox(0, "Info", "Keine Projektnummer ausgewählt oder kein Ausgabenamen angegeben.", 0, $hGUI)
                EndIf
            Case $ideinlesen
                _einlesen()
        EndSwitch
    WEnd
    
    Func _Ausgabe($sProjektIDAusgabe, $sAusgbenamen)
        Local $sAusgabeString
        $aOrdner1 = _FileListToArray(@ScriptDir & "\o1", "*.pdf", 0, True)    ;, 0,True
        $sAusgabeString &= _Projektnummer_in_Ordner_finden($aOrdner1, $sProjektIDAusgabe)
        ConsoleWrite(_Projektnummer_in_Ordner_finden($aOrdner1, $sProjektIDAusgabe) & @CRLF)
        $aOrdner2 = _FileListToArray(@ScriptDir & "\o2", "*.pdf", 0, True)
        $sAusgabeString &= _Projektnummer_in_Ordner_finden($aOrdner2, $sProjektIDAusgabe)
        ConsoleWrite(_Projektnummer_in_Ordner_finden($aOrdner2, $sProjektIDAusgabe) & @CRLF)
        $aOrdner3 = _FileListToArray(@ScriptDir & "\o3", "*.pdf", 0, True)
        $sAusgabeString &= _Projektnummer_in_Ordner_finden($aOrdner3, $sProjektIDAusgabe)
        ConsoleWrite(_Projektnummer_in_Ordner_finden($aOrdner3, $sProjektIDAusgabe) & @CRLF)
        $aOrdner4 = _FileListToArray(@ScriptDir & "\o4", "*.pdf", 0, True)
        $sAusgabeString &= _Projektnummer_in_Ordner_finden($aOrdner4, $sProjektIDAusgabe)
        ConsoleWrite(_Projektnummer_in_Ordner_finden($aOrdner4, $sProjektIDAusgabe) & @CRLF)
        ;_ArrayDisplay($aOrdner1)
        Return $sAusgabeString
    EndFunc   ;==>_Ausgabe
    
    Func _Projektnummer_in_Ordner_finden($aOrdner, $sProjektIDAusgabe)
        If IsArray($aOrdner) Then
            For $ii = 1 To UBound($aOrdner) - 1
                If StringInStr($aOrdner[$ii], $sProjektIDAusgabe) <> 0 Then
                    Return ($aOrdner[$ii])
                EndIf
            Next
        EndIf
        Return SetError(1,0,"")
    EndFunc   ;==>_Projektnummer_in_Ordner_finden
    
    Func _einlesen()
        $aOrdnerProjektnummern = _FileListToArray(@ScriptDir & "\o1", "*.pdf")
        _Projektnummer_auslesen($aOrdnerProjektnummern)
    EndFunc   ;==>_einlesen
    
    Func _Projektnummer_auslesen($aProjekt)
        Local $i
        Local $sProjektID
        If IsArray($aProjekt) Then
            GUICtrlSetData($idprojnr, "")
            For $i = 1 To UBound($aProjekt) - 1
                StringLeft($aProjekt[$i], 6)
                $sProjektID &= StringLeft($aProjekt[$i], 6) & "|"
            Next
            GUICtrlSetData($idprojnr, $sProjektID, StringLeft($aProjekt[1], 6))
        Else
            Return SetError(0)
        EndIf
    EndFunc   ;==>_Projektnummer_auslesen
    Alles anzeigen

    Hi Concara,

    das sieht schon mega aus. Habe eben mal Testweise Ordner angelegt und Dateien rein geschoben. Selbst wenn der DAteiname nicht mit der Projektnummer beginnt, nimmt er trotzdem die richtigen Dateien. In der Auswahl wird allerdings dann das angezeigt was in O1 am anfang der Datei steht.

    Beste Grüße

    DGI

  • Denkanstoß gesucht.

    • dgi
    • 20. August 2021 um 11:26
    Zitat von Concara

    Wenn ich dich @DG richtig verstanden habe, könnte man es so gut wie automatisieren ohne jegliche Benutzer Interaktion.

    Ordner 1 bis 4 sagen wir mal einmal in der Minute alle Dateien einlesen. Nach Projektnummer unterteilen. Und wenn in den anderen Ordnern eine Datei mit der Projektnummer vorhanden ist, verbinden lassen und in einen Ordner ausgeben.

    Ja und nein. Da die Benutzer die Dokumente manuell bearbeiten und danach erzeugen, vergeht da schon immer etwas an Zeit.

    Automatisieren könnte man Beispielsweise in foolgender Form :

    Das Tool fragt nur noch nach einer Projektnummer und einem Ausgabenamen der fertig zusammengestellten Datei. Die User starten das Tool und geben die entsprechende Projektnummer erst ein wenn sie alle Ihre Dokumente erstellt haben.

    Das Tool sucht sich jetzt immer aus den jeweiligen Ordnern die Dateien (falls vorhanden) und hängt diese nach der vorgegebenen Reihenfolge aneinander.

  • Denkanstoß gesucht.

    • dgi
    • 20. August 2021 um 11:10
    Zitat von misterspeed

    Und könnte es auch vorkommen, dass mehr als die 4 Dateien über die Projektnummer gefunden werden? Z.B. bei korregierten Exports aus dem ERP oder ähnlichem?

    Nein, da die Exporte von den Benutzern pro Projekt immer nur einmal in dieser Form exportiert werden können.

  • Denkanstoß gesucht.

    • dgi
    • 20. August 2021 um 10:58
    Zitat von misterspeed

    Sind dir die Dateinamen vollständig bekannt, sobald du die Projektnummer hast oder gibt es je nach Projekt weitere Variable Teile des Namens? Im ersteren fall könntest du auf eine Suche im Dateisystem komplett verzichten und müsstest lediglich auf die Existenz der 4 Dateien prüfen.

    Es gibt noch weitere variable Teile. Heißt also ich müsste immer die Dateien anhand der Projektnummer identifizieren.

  • Denkanstoß gesucht.

    • dgi
    • 20. August 2021 um 10:37

    Ersteinmal Danke Musashi. Da haben 2-3 Sätze gereicht um ein Problem zu lösen :) Das habe ich hiermit verstanden :)

    Concara

    Zitat

    Ich finde dein Projekt interessant!

    Für mich würden sich aber einige Fragen noch ergeben um dieses umsetzen zu können.

    Freut mich zu lesen. Ich freuie mich über jede Unterstützung und auf alles was ich lernen kann :)

    Zitat

    Woher kommen die PDF Dateien in den unterschiedlichen Ordnern?

    Die Dateien in den unterschiedlichen Ordnen kommen vom ERP System, dass diese Dateien immer als einzelne Dateien ausspuckt. Die Ausgabe Ordner des ERP können jeweils frei im ERP System konfiguriert werden.

    Zitat


    Sind in dem jeweiligen Ordner immer nur eine PDF Datei?

    Nein in den Ordnern können mehrere Dateien liegen, da mehrere Benutzer dieses Tool benutzen sollen, aber dafür hätte ich die Projektnummer als einheitliches Suchkriterium innerhalb der PDF Dateinamen.

    Zitat

    Für wie viele Anwender soll dieses Programm Verwendung finden? (variable Pfade eventuell auslesen aus einer ini Datei --> Setup in der GUI oder einmal Einrichtung per manueller Befüllung der ini Datei )

    Es soll von 5-6 Benutzern auf einem Terminal Server ausgeführt werden können.

    Zitat

    Sind die Projektnummern IMMER 6 stellig? (Dateien einlesen per regex = Benutzer freundlich)

    Ja die Projektnummern sind immer 6 stellig.


    Um pro Benutzer ein eigenes Setup zu vermeiden, habe ich in jedem Dateinamen immer die Projektnummer mit inkludiert. Das kommt so aus dem ERP System raus. Die Dateien liegen in 4 unterschiedlichen Ordnern. In jedem Ordner immer der gleiche Dateityp aber (wenn 2 Benutzer gleichzeitig arbeiten) möglicherweise aus 2 Projekten.

    4 unterschiedliche Ordner deshalb, weil sie immer in einer bestimmten Reihenfolge aneinander gehängt werden müssen (wenn Dateien vorhanden sind) .

    Wenn also in Ordner 1 keine Datei mit Projektnummer xxxyyy vorhanden ist prüfe ordner 2. Wenn da eine drin ist benutzen. Dann ordner 3 usw....

    Ich hoffe meine Logik ist verständlich und ergibt auch ein wenig :)

    Beste Grüße

    DGI

  • Denkanstoß gesucht.

    • dgi
    • 20. August 2021 um 09:37

    Ich greife das Thema nochmal auf.

    Ich habe wie fgolgt eine GUI erstellt:

    C
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    
        ;GUI erstellen
        Local $hGUI = GUICreate("Dokument erstellen", 280, 225, 180, 122)
    
        ;Label erstellen
        Local $idLabel1 = GUICtrlCreateLabel("Bitte Projektnummer eingeben:", 16, 11, 148, 17)
        Local $idLabel6 = GUICtrlCreateLabel("Bitte Dateinamen eingeben:", 16, 163, 135, 17)
        ;Gruppe erstellen
        Local $idGroup1 = GUICtrlCreateGroup("Was soll zusammengefügt werden?", 16, 32, 249, 121)
        ;Checkboxen erstellen
        Local $idcheckbox1 = GUICtrlCreateCheckbox("Teil 1", 32, 56, 120, 17)
        Local $idcheckbox2 = GUICtrlCreateCheckbox("Teil 2", 32, 80, 120, 17)
        Local $idcheckbox3 = GUICtrlCreateCheckbox("Teil 3", 32, 104, 120, 17)
        Local $idcheckbox4 = GUICtrlCreateCheckbox("Teil 4", 32, 128, 120, 17)
        ;Inputs erstellen
        Local $idprojnr = GUICtrlCreateInput("", 168, 8, 97, 21)
        Local $idDateiname = GUICtrlCreateInput("", 168, 160, 97, 21)
        ;Buttons erstellen
        Local $idstart = GUICtrlCreateButton("Start", 16, 184, 121, 33)
        Local $idclose = GUICtrlCreateButton("Abbrechen", 144, 184, 121, 33)
        ;Gui starten
        GUISetState(@SW_SHOW, $hGUI)
        ;Loop bis Abbrechen geklickt wird
        While 1
            Switch GUIGetMsg()
                 Case $GUI_EVENT_CLOSE, $idclose
                    ExitLoop
                 Case $idstart
                    $projektnr = GUICtrlRead($idprojnr)
                    MsgBox (0, "Info", $projektnr, 0, "")
            EndSwitch
         WEnd
    Alles anzeigen

    Ich habe in den Beiträgen oben schon einige Antworten erhalten, aber komme trotzdem Gedanklich nicht weiter.

    Ich habe das Problem das manchmal 2 Dateien zusammen gefasst werden müssen und manchmal 3 oder 4. Wie kann ich das abfangen?

    Außerdem gehe aufgrund der oben gezeigten Skripte davon aus, dass ich #include <File.au3> brauche, sobald ich das aber in mein Skript mit der GUI einfüge kommt direkt eine Fehlermeldung.

    Ich stehe also insgesammt etwas auf dem Schlauch. Ich hoffe nochmals auf Unterstützung.

    Beste Grüße

    DGI

  • Denkanstoß gesucht.

    • dgi
    • 7. Juli 2021 um 09:44

    Habe inzwischen noch ein wenig weiter getestet und gelesen habe mittlerweile Funktionen hinter die beiden Buttons legen können. Wenn ich da auf dem Holzweg bin, könnt ihr mich gerne verbessern :)

    AutoIt
    #include <GUIConstantsEx.au3>
    #include <File.au3>
    
    Opt("GUIOnEventMode", 1)
    
    
    Global $prog = "C:\Program Files (x86)\prog.exe"
    Global $path1 = "C:\gui-test\input1"
    Global $path2 = "C:\gui-test\input1"
    Global $outpath = "C:\gui-test\output"
    
    Interface()
    Func Interface()
        ;GUI erstellen
        Local $hGUI = GUICreate("Dokument erstellen", 280, 225, 180, 122)
        ;Label erstellen
        Local $idLabel1 = GUICtrlCreateLabel("Bitte Projektnummer eingeben:", 16, 11, 148, 17)
        Local $idLabel6 = GUICtrlCreateLabel("Bitte Dateinamen eingeben:", 16, 163, 135, 17)
        ;Gruppe erstellen
        Local $idGroup1 = GUICtrlCreateGroup("Was soll zusammengefügt werden?", 16, 32, 249, 121)
        ;Checkboxen erstellen
        Local $idcheckbox1 = GUICtrlCreateCheckbox("Teil 1", 32, 56, 120, 17)
        Local $idcheckbox2 = GUICtrlCreateCheckbox("Teil 2", 32, 80, 120, 17)
        Local $idcheckbox3 = GUICtrlCreateCheckbox("Teil 3", 32, 104, 120, 17)
        Local $idcheckbox4 = GUICtrlCreateCheckbox("Teil 4", 32, 128, 120, 17)
        ;Inputs erstellen
        Local $idprojnr = GUICtrlCreateInput("", 168, 8, 97, 21)
        Local $idDateiname = GUICtrlCreateInput("", 168, 160, 97, 21)
        ;Buttons erstellen
        Local $idstart = GUICtrlCreateButton("Start", 16, 184, 121, 33)
        GUICtrlSetOnEvent($idstart, "OnStart")
        Local $idclose = GUICtrlCreateButton("Abbrechen", 144, 184, 121, 33)
        GUICtrlSetOnEvent($idclose, "OnClose")
    
        GUISetOnEvent($GUI_EVENT_CLOSE, "OnClose")
    
        GUISetState() ; display the GUI
    
        While 1
            Sleep(1000)
        WEnd
     EndFunc
    
    
     Func OnStart()
        MsgBox($MB_SYSTEMMODAL, "Start", "Button wurde ausgewählt...")
     EndFunc
    
     Func OnClose()
        Exit
    EndFunc
    Alles anzeigen

    Habe das Ganze nochmal als Test mit Koda gemacht :

    AutoIt
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    
        ;GUI erstellen
        Local $hGUI = GUICreate("Dokument erstellen", 280, 225, 180, 122)
    
        ;Label erstellen
        Local $idLabel1 = GUICtrlCreateLabel("Bitte Projektnummer eingeben:", 16, 11, 148, 17)
        Local $idLabel6 = GUICtrlCreateLabel("Bitte Dateinamen eingeben:", 16, 163, 135, 17)
        ;Gruppe erstellen
        Local $idGroup1 = GUICtrlCreateGroup("Was soll zusammengefügt werden?", 16, 32, 249, 121)
        ;Checkboxen erstellen
        Local $idcheckbox1 = GUICtrlCreateCheckbox("Teil 1", 32, 56, 120, 17)
        Local $idcheckbox2 = GUICtrlCreateCheckbox("Teil 2", 32, 80, 120, 17)
        Local $idcheckbox3 = GUICtrlCreateCheckbox("Teil 3", 32, 104, 120, 17)
        Local $idcheckbox4 = GUICtrlCreateCheckbox("Teil 4", 32, 128, 120, 17)
        ;Inputs erstellen
        Local $idprojnr = GUICtrlCreateInput("", 168, 8, 97, 21)
        Local $idDateiname = GUICtrlCreateInput("", 168, 160, 97, 21)
        ;Buttons erstellen
        Local $idstart = GUICtrlCreateButton("Start", 16, 184, 121, 33)
        Local $idclose = GUICtrlCreateButton("Abbrechen", 144, 184, 121, 33)
        ;Gui starten
        GUISetState(@SW_SHOW, $hGUI)
        ;Loop bis Abbrechen geklickt wird
        While 1
            Switch GUIGetMsg()
                 Case $GUI_EVENT_CLOSE, $idclose
                    ExitLoop
                 Case $idstart
                    $projektnr = GUICtrlRead($idprojnr)
                    MsgBox (0, "Info", $projektnr, 0, "")
            EndSwitch
         WEnd
    Alles anzeigen

    Jetzt warte ich aber erstmal auf Antworten sonst wirds zu kuddelmuddelig...

    Beste Grüße

    DGI

  • Denkanstoß gesucht.

    • dgi
    • 7. Juli 2021 um 08:54
    Zitat von Moombas

    Du musst also eine GUI erstellen und das dann dort umsetzen.

    Stichwort GUI. Ich habe anhand der Hilfe usw. eine GUI erstellt. Wie gesagt Neuling und so :) Ich habe das auch mal Kommentiert. Jetzt wäre der nächste Denkanstoß hilfreich :)

    AutoIt
    #include <GUIConstantsEx.au3>
    
        ;GUI erstellen
        Local $hGUI = GUICreate("Dokument erstellen", 280, 225, 180, 122)
    
        ;Label erstellen
        Local $idLabel1 = GUICtrlCreateLabel("Bitte Projektnummer eingeben:", 16, 11, 148, 17)
        Local $idLabel6 = GUICtrlCreateLabel("Bitte Dateinamen eingeben:", 16, 163, 135, 17)
        ;Gruppe erstellen
        Local $idGroup1 = GUICtrlCreateGroup("Was soll zusammengefügt werden?", 16, 32, 249, 121)
        ;Checkboxen erstellen
        Local $idcheckbox1 = GUICtrlCreateCheckbox("Teil 1", 32, 56, 120, 17)
        Local $idcheckbox2 = GUICtrlCreateCheckbox("Teil 2", 32, 80, 120, 17)
        Local $idcheckbox3 = GUICtrlCreateCheckbox("Teil 3", 32, 104, 120, 17)
        Local $idcheckbox4 = GUICtrlCreateCheckbox("Teil 4", 32, 128, 120, 17)
        ;Inputs erstellen
        Local $idprojnr = GUICtrlCreateInput("", 168, 8, 97, 21)
        Local $idDateiname = GUICtrlCreateInput("", 168, 160, 97, 21)
        ;Buttons erstellen
        Local $idstart = GUICtrlCreateButton("Start", 16, 184, 121, 33)
        Local $idclose = GUICtrlCreateButton("Abbrechen", 144, 184, 121, 33)
        ;Gui starten
        GUISetState(@SW_SHOW, $hGUI)
        ;Loop bis Abbrechen geklickt wird
        While 1
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE, $idclose
                    ExitLoop
            EndSwitch
         WEnd
    
    
         ;============================================
         ;Hier kommt der Code mit der Logik hin?!?!?!
         ;============================================
    
    
        ; GUI und Controls leeren
        GUIDelete($hGUI)
    Alles anzeigen

    Beste Grüße

    DGI

  • Denkanstoß gesucht.

    • dgi
    • 6. Juli 2021 um 11:40

    Die Anforderungen haben sich jetzt komplett geändert.

    Das verwendete Tool - PDF24 - hat nicht das getan was es sollte. Also haben wir ein anderes Tool genommen und die Dateien dorthin übergeben. Auch einen weiteren Ordner konnte Abfragen und die Datei an entsprechender Stelle einbinden.

    Danke erst einmal bis hierhin!

    Auch wenn ich jetzt eventuell zuviel erfrage schildere ich euch mal die neuen Anforderungen :

    Es geht noch immer um das Zusammenstellen von PDF Dokumenten. Das Problem ist nicht welches Tool ich nehme sondern die Selektion der Dateien die zu verbinden sind.

    • Bei Start des Skripts soll ein Fenster aufgehen.
      • In diesem Fenster soll folgendes Platz finden :
        • Textbox zur Eingabe einer 6-Stelligen Nummer
          • Diese Nummer ist in jedem Dateinamen enthalten. Anhand dieser Nummer werden Dokumente selektiert
        • 4 Checkboxen
          • Jede Checkbox steht für eine der maximal 4 PDF Dokumente die selektiert werden. Jeder der 4 Teile hat immer einen bestimmten Ausdruck im Dateinamen.
            • Checkbox 1 --> Immer den Ausdruck 'eins' im Dateinamen
            • Checkbox 2 --> Immer den Ausdruck 'zwei' im Dateinamen
            • Checkbox 3 --> Immer den Ausdruck 'drei' im Dateinamen
            • Checkbox 4 --> Immer den Ausdruck 'vier' im Dateinamen
        • Textbox zur Eingabe eines Namen
          • Dies soll der Ausgabename der zusammengefügten Dateien werden.

    In Manchen Fällen wird nur ein Teil benötigt. In anderen Fällen werden immer unterschiedliche Teile, aber nicht immer alle benötigt.

    Egal welche der 4 Teile benötigt werden, es bleibt immer die gleiche Reihenfolge - Teil 1 - Teil 2 - Teil 3 - Teil 4 Auch wenn zwischendurch immer unterschiedliche Teile nicht mit zusammengefügt werden sollen.

    Teile 1 bis 3 liegen immer in einem Ordner der Struktur %userprofile%\path\to

    Teil 4 liegt immer einem bestimmten anderen Ordner

    Die Variante mit den Checkboxen, ist die für mich einzig logische Möglichkeit nur die Teile mit zusammenzufügen, die auch angewählt worden sind.

    Es sollen also immer die Dokumente zusammengefügt werden, die die 6-Stellige Nummer und den Ausdruck des Teils der Checkboxen im Namen haben.

    Diese sollen dann in der Reihenfolge Teil1 - 4 zusammengefügt und mit dem angegeben Dateinamen an einem bestimmten Ort abgelegt werden.


    Ich hoffe das war eingermaßen verständlich erklärt. Die Logik ist mir soweit klar einzig die Umsetzung bereitet mir Schwierigkeiten.

    Ich freue mich also weiterhin über jede Form der Hilfe, die Ihr mir zukommen lassen könnt.

    Nachfolgend noch die erste Variante, die ich als blutiger Anfänger nach den alten Anforderungen mit Hilfe eurer Hilfen zusammen gebastelt hatte.

    AutoIt
    #include <File.au3>
    
    Global $prog = "C:\Program Files (x86)\prog\prog.exe"
    Global $aPathSource[] = ["\\path\to\1", "\\path\to\2", "\\path\to\3", "\\path\to\4"]
    Global $outpath = "\\path\to\Output"
    Global $aFileSource[UBound($aPathSource)] ; gleiche Größe wie Array mit Ordnern
    Global $aTmp
    For $i = 0 To UBound($aPathSource) -1
        $aTmp = _FileListToArray($aPathSource[$i], '*.pdf', 1, True)
        $aFileSource[$i] = $aTmp[1]
    Next
    Global $outputname = InputBox('Dokument erstellen', 'Bitte Dateinamen angeben')
    Global $sCmd = StringFormat('%s "%s" "%s" "%s" "%s"', $prog, _
                                $aFileSource[0], $aFileSource[1], $aFileSource[2], $aFileSource[3])
    Run($sCmd, '', @SW_HIDE) ; evtl. WorkingDir-Angabe erforderlich
    
    Local $nWnd = WinWait("Fenster1","Dateien in einem PDF-Dokument kombinieren", 4)
    ControlClick($nWnd, "", "Button12")
    
    Local $nWnd2 = WinWait("Fenster2","Auftragswarteschlange", 4)
    ControlClick($nWnd2, "", "Button3")
    
    Local $nWnd = WinWaitActive("Fenster1","Dateien in einem PDF-Dokument kombinieren", 4)
    Send("{ESC}")
    
    Sleep(1500)
    
    Global $aOutFile = _FileListToArray($outpath, '*.pdf', 1) ; $FLTA_FILES (1) = Return files only
    $sFileOldstr = StringFormat('%s\%s', $outpath, $aOutFile[1])
    $sFileOld = $sFileOldstr
    $sFileRenamedstr = StringFormat('%s\%s.pdf', $outpath, $outputname)
    $sFileRenamed = $sFileRenamedstr
    FileMove($sFileOld, $sFileRenamed)
    Alles anzeigen

    Beste Grüße DGI

  • Denkanstoß gesucht.

    • dgi
    • 6. Juli 2021 um 11:09

    Das Errorhandling hat das Problem gelöst :) Vielen Dank.

  • Denkanstoß gesucht.

    • dgi
    • 5. Juli 2021 um 11:43
    Zitat von BugFix

    _FileListToArray bietet auch die Rückgabe des kpl. Pfades an. Das vereinfacht das Skript dann etwas und Nutzung von Arrays macht es übersichtlicher (und bei großer Anzahl auch kürzer):

    AutoIt
    #include <File.au3>
    
    Global $prog = "C:\Program Files (x86)\PDF24\pdf24-DocTool.exe"
    Global $aPathSource[] = ["\\path\to\1", "\\path\to\2", "\\path\to\3"]
    Global $outpath = "\\path\to\output"
    Global $aFileSource[UBound($aPathSource)] ; gleiche Größe wie Array mit Ordnern
    Global $aTmp
    For $i = 0 To UBound($aPathSource) -1
        $aTmp = _FileListToArray($aPathSource[$i], '*.pdf', 1, True)
        $aFileSource[$i] = $aTmp[1]
    Next
    Global $outputname = InputBox('PDF Join', 'Bitte Dateinamen angeben')
    Global $sCmd = StringFormat('%s -join -profile default/best -outputFile "%s\%s.pdf" "%s" "%s" "%s"', $prog, $outpath, $outputname, _
                                $aFileSource[0], $aFileSource[1], $aFileSource[2])
    Run($sCmd, '', @SW_HIDE) ; evtl. WorkingDir-Angabe erforderlich
    For $i = 0 To UBound($aFileSource) -1
        FileDelete($aFileSource[$i])
    Next
    Alles anzeigen

    Hi, danke für die Antworten! :)

    Auf meinem Rechner läuft es, auf einem anderen gleiches System und gleicher Install bekomme ich eine Fehlermeldung:

    (10) : ==> Subscript used on non-accessible variable.:

    $aFileSource[$i] = $aTmp[1]

    $aFileSource[$i] = $aTmp^ ERROR

    Beste Grüße

    DGI

  • Denkanstoß gesucht.

    • dgi
    • 2. Juli 2021 um 10:40

    Das sieht mega aus. Spuckt nur ein Problem aus.

    Das joinen funktioniert nicht weil das Skript die PDFs löscht bevor die Verarbeitung abgeschlossen ist. Ohne das Löschen klappt es wunderbar.

    Ich habe eben noch irgendwas mit RunWait gefunden. Wäre das eine Lösung?

    EDIT : RunWait hat das Problem gelöst :)

    Beste Grüße

    DGI

  • Denkanstoß gesucht.

    • dgi
    • 2. Juli 2021 um 10:04

    In dieser Variante ist in jedem Ordner nur eine Datei.

    Daher auch jeweils Pfad1 und Datei1.

  • Denkanstoß gesucht.

    • dgi
    • 2. Juli 2021 um 09:46

    Hey BugFix,

    vielen Dank für die Antwort.

    Zunächst habe ich das mal getestet und siehe da es klappt :)


    Relativ Simpel :

    Code
    #include <MsgBoxConstants.au3>
    
        $variable = InputBox("Test", "Variable eingeben")
        Run(".\mybat.bat" & " " & $variable)

    Die Batch macht zum Testen nichts anderes als die Variable auszugeben.

    Wenn ich mehrere Werte übergeben will geht es in der Batch mit %2 und %3 weiter usw.

    Soweit so gut. Erstmal was gelernt :)

    Ich könnte jetzt also meine existierende Batch über eine grafische Oberfläche ansteuern - Klasse :)

    Das kann man alles auch AutoIT ausführen.... klingt interessant.

    Ich beschreibe mal was ich ereichen will :

    PDF Merge mit Doc-Tools von PDF24

    1. Aus 3 Verzeichnissen die dort liegenden PDF Dateien einlesen (Pfad und Name) und jeweils in eine Variable speichern
    2. Aus den 3 Variablen den Befehl für die Doc-Tools.exe zusammenbauen und eine zusammengefügte PDF erzeugen
    3. Den vorher abgefragten Namen für die Ausgabe PDF nutzen um die PDF zu speichern
    4. Die Dateien aus den 3 Verzeichnissen löschen

    Die Batch sieht so aus :

    Code
    @echo off
    set prog="C:\Program Files (x86)\PDF24\pdf24-DocTool.exe"
    set path1="\\path\to\1"
    set path2="\\path\to\2"
    set path3="\\path\to\3"
    set outpath="\\path\to\output"
    For /F "delims=" %%i in ('dir /B %path1%') do set Datei1=%%~i
    Echo %Datei1%
    For /F "delims=" %%i in ('dir /B %path2%') do set Datei2=%%~i
    Echo %Datei2%
    For /F "delims=" %%i in ('dir /B %path3%') do set Datei3=%%~i
    Echo %Datei3%
    set /p outputname= Bitte Dateinamen angeben:
    %prog% -join -profile default/best -outputFile "%outpath%\%outputname%.pdf" "%path1%\%Datei1%" "%path2%\%Datei2%" "%path3%\%Datei3%"
    del "%path1%\%Datei1%" "%path2%\%Datei2%" "%path3%\%Datei3%"
    Alles anzeigen

    outputname wollte ich durch meine anfängliche Frage füllen.

    Freue mich auf Ideen :)

    Beste Grüße

    DGI

  • Denkanstoß gesucht.

    • dgi
    • 2. Juli 2021 um 08:51

    Hallo Gemeinde,

    ich bin absoluter Neuling und erhoffe mir von euch einen Denkanstoß - aber keine Lösung. Bringt ja sonst alles nichts :D

    Ich möchte eine Batchdatei ausführen und einen Parameter an diese Batchdatei übergeben. Der Parameter soll in einem Popup eingegeben werden, dann in eine Variable gespeichert und die Batch übergeben werden.

    Ich freue mich auf Denkanstöße.

    Beste Grüße

    DGI

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™