Excel Zellen auslesen und Dateien öffnen

  • Hallo,
    ich will 1500 Pdf´s mit einem Programm erzeugen. Verschiedene Wärmebilder als Pdf abspeichern.

    Hierzu habe ich mir eine Auoti Datei geschrieben die auch funktioniert.

    Um den Vorgang weiter zu automatisieren, bräuchte ich eine Funktion die in einer Excel-Liste schaute welche Bilder geöffnet werden müssen.


    Bild von Bild bis Dokumentname
    IV_00050.BMT IV_00054.BMT 0311.01.008
    IV_00055.BMT IV_00061.BMT 0311.01.009


    Beispiel: Zum Dokument 0311.01.008 gehören die Bilder IV_00050.BMT bis IV_00054.BMT diese müssen dann im Bilderordner geöffnet werden.

    Wenn die Dateien geöffnet sind geht es mit meinem bereits vorhandenen Programm weiter ist dies fertig soll es mit der nächsten Zeile weiter gehen.
    Könnt ihr mir einen Tipp/Befehl geben mit dem dies umsetzbar ist?

    Danke im Voraus

  • Hi,

    was sagen denn die vielen Beispiele zu den Excel-Befehlen in der Hilfe?
    Ist dort etwas unklar bzw. was bekommst du anhand dieser Beispiele nicht hin?

  • Hier bitte :P :

    Du musst halt nur über dein "anderes" programm die zeilen 18 und 19 dynamisch anpassen lassen.

    - Die Datei (Zeile 8 muss angepasst werden)
    - Aus BMP (hab ich zum testen genutzt) kannste wieder dein Format benutzen. (Zeile 29-33)

    Edit: Hab noch einen kleinen Fehler in der "For" -Schleife angepasst.

    3 Mal editiert, zuletzt von KriZza (5. Mai 2015 um 14:02)

  • Vielen Dank KriZza.
    Ich habe bisher nur mit dem Recorder gearbeitet.
    Ich versuche mich in deinem Programm zurecht zu finden, glaube aber das meine Kenntnisse das Problem zu lösen noch ausgebaut werden müssen.

  • Ja der Quellpfad zu deinen Bilddateien. Denk auch dran die Endung jeweils in .BMT wieder umzubenennen.

    Und natürlich die excelzellen Zeile 18-19 anzupassen. Momentan wird nur A1 bis B1 ausgelesen. Ich weil nicht wie deine Quelldatei aussieht.

    Um einen Fehler auszuschließen nimmst du statt "run" >>> "shellexecute" das zeigt den Dateinamen an falls diese nicht gefunden werden

  • hallo psjunkey
    Ich habe deine Anfrage nur kurz überflogen.
    Zufällig habe ich einige Excel Routinen, welche ich von irgend wo geklaut habe.
    Vielleicht helfen sie Dir.

    Spoiler anzeigen


    ; ***************************************************************
    ; Beispiel 1 - Schreibt in eine Zelle, nachdem eine neue Arbeitsmappe angelegt und deren Objekt-ID ermittelt wurde.
    ; Dann Speichern und Schließen der Datei.
    ; *****************************************************************
    #include <Excel.au3>


    Local $oExcel = _ExcelBookNew() ; Erzeugt eine neue Mappe, macht sie sichtbar


    _ExcelWriteCell($oExcel, "Ich hab hier mal was rein geschrieben!", 3, 2) ; Schreibt in die Zelle [3,2]


    MsgBox(0, "Beenden", "Drücke OK zum Speichern und Beenden.")
    _ExcelBookSaveAs($oExcel, @TempDir & "\Temp.xls", "xls", 0, 1) ; Jetzt wird ins Temp-Verzeichnis gespeichert; wenn nötig, werden bestehende Dateien überschrieben
    _ExcelBookClose($oExcel) ; Und schließlich machen wir die Mappe wieder zu.


    ; ***************************************************************
    ; Beispiel 2 - Schreibt mit Hilfe einer Schleife Daten in eine Zelle, nachdem eine neue Arbeitsmappe angelegt
    ; und deren Objekt-ID ermittelt wurde. Dann Speichern und Schließen der Datei.
    ; *****************************************************************
    #include <Excel.au3>


    $oExcel = _ExcelBookNew() ; Erzeugt eine neue Mappe, macht sie sichtbar


    For $i = 1 To 20 ; Schleife
    _ExcelWriteCell($oExcel, $i & ".: Ich schrieb in diese Zelle.", $i, 1) ; Schreibt in die Zelle [$i,1]
    Next


    MsgBox(0, "Beenden", "Drücke OK zum Speichern und Beenden.")
    _ExcelBookSaveAs($oExcel, @TempDir & "\Temp.xls", "xls", 0, 1) ; Jetzt wird ins Temp-Verzeichnis gespeichert; wenn nötig, werden bestehende Dateien überschrieben
    _ExcelBookClose($oExcel) ; Und schließlich machen wir die Mappe wieder zu.


    ; ***************************************************************
    ; Beispiel 3 - Schreibt mit Hilfe einer Schleife Daten in eine Zelle, nachdem eine neue Arbeitsmappe angelegt
    ; und deren Objekt-ID ermittelt wurde. Dann werden mit Formeln eingegeben und die Datei gespeichert und geschlossen.
    ; *****************************************************************
    #include <Excel.au3>


    $oExcel = _ExcelBookNew() ; Erzeugt eine neue Mappe, macht sie sichtbar


    For $i = 1 To 20 ; Schleife
    _ExcelWriteCell($oExcel, $i, $i, 1) ; Schreibt den Wert von $i in die Zelle [$i,1]
    Next


    _ExcelWriteCell($oExcel, "Schnitt:", 3, 3) ; Schreibt in die Zelle [3,3]
    _ExcelWriteCell($oExcel, "Summe:", 5, 3) ; Schreibt in die Zelle [5,3]


    _ExcelWriteCell($oExcel, "=Mittelwert(A:A)", 3, 4) ; Schreibt die Formel zur Berechnung des Mittelwerts der Daten in die Zelle [3,4] (benutzt die A1-Bezugsart, nicht Z1S1)
    _ExcelWriteCell($oExcel, "=Summe(A1:A20)", 5, 4) ; Schreibt die Formel zur Berechnung der Summe der Daten in die Zelle [5,4] (benutzt eine weitere Variante der A1-Bezugsart, nicht Z1S1)


    MsgBox(0, "Beenden", "Drücke OK zum Speichern und Beenden.")
    _ExcelBookSaveAs($oExcel, @TempDir & "\Temp.xls", "xls", 0, 1) ; Jetzt wird ins Temp-Verzeichnis gespeichert; wenn nötig, werden bestehende Dateien überschrieben
    _ExcelBookClose($oExcel) ; Und schließlich machen wir die Mappe wieder zu.


    mfg Silvermoon

  • Wenn du damit nicht klar kommst, kannste ja auch mal ein kleines Paket mit deinen Beispielen erstellen und hier hochladen. Ich denke dann wird das noch etwas eindeutiger wo es noch klemmt. ;)

  • Vielen Dank Silvermoon und KriZza,

    ich habe die Funktion zum laufen bekommen:

    [autoit]


    #include <Array.au3>
    #include <Excel.au3>
    #include <MsgBoxConstants.au3>

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

    ; Create application object and open an example workbook
    Local $oAppl = _Excel_Open()
    If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeRead Example", "Error creating the Excel application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    Local $oWorkbook = _Excel_BookOpen($oAppl, @ScriptDir & "\test2.xlsx")
    If @error Then
    MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeRead Example", "Error opening workbook '" & @ScriptDir & "\Extras\_Excel1.xls'." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    _Excel_Close($oAppl)
    Exit
    EndIf

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

    ; *****************************************************************************
    ; Read data from a single cell on the active sheet of the specified workbook
    ; *****************************************************************************
    Local $sResult = _Excel_RangeRead($oWorkbook, Default, "A1")
    Local $sResult2 = _Excel_RangeRead($oWorkbook, Default, "B1")
    If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeRead Example 1", "Error reading from workbook." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    $sResult = StringTrimLeft($sResult,3)
    $sResult = StringTrimRight($sResult,4)
    $sResult2 = StringTrimLeft($sResult2,3)
    $sResult2 = StringTrimRight($sResult2,4)

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

    for $i = string($sResult) to string($sResult2)
    ;~ $exec = ShellExecute(@ScriptDir & "\IV_"&$i&".bmp")
    shellexecute("IV_000"&$i&".bmt", "", @SW_HIDE)
    Next
    Sleep(20000)
    Func _Au3RecordSetup()
    Opt('WinWaitDelay',100)
    Opt('WinDetectHiddenText',1)
    Opt('MouseCoordMode',0)
    Local $aResult = DllCall('User32.dll', 'int', 'GetKeyboardLayoutNameW', 'wstr', '')
    If $aResult[1] <> '00000407' Then
    MsgBox(64, 'Warning', 'Recording has been done under a different Keyboard layout' & @CRLF & '(00000407->' & $aResult[1] & ')')
    EndIf

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

    EndFunc

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

    Func _WinWaitActivate($title,$text,$timeout=0)
    WinWait($title,$text,$timeout)
    If Not WinActive($title,$text) Then WinActivate($title,$text)
    WinWaitActive($title,$text,$timeout)
    EndFunc

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

    _AU3RecordSetup()
    #endregion --- Internal functions Au3Recorder End ---
    ;*************************************************************************************************
    ;Ab hier startet meine Automatisierung. habe einfach die Mouseklicks automatisiert. Bevor ich den Ablauf gestartet habe, habe die Nummer des späteren PDF mit STRG+C in
    ;den Zwischenspeicher gelegt und dann die ensprechenden Bilder händisch heraus gesucht.
    ;****************************************************************************************************
    _WinWaitActivate("testo IRSoft Software","")
    MouseClick("left",164,42,1)
    _WinWaitActivate("testo IRSoft Software","")
    MouseClick("left",59,100,1)
    _WinWaitActivate("Berichtsassistent","")
    MouseClick("left",108,53,1)
    MouseClick("left",497,211,1)
    MouseMove(460,57)
    MouseDown("left")
    MouseMove(461,50)
    MouseUp("left")
    MouseClick("left",289,102,1)
    ;Hier wird die Dokumentnummer mit STRG+V eingefügt
    Send("{CTRLDOWN}a{CTRLUP}{CTRLDOWN}v{CTRLUP}")
    MouseClick("left",578,54,1)
    Sleep(10000)
    _WinWaitActivate("Berichtsassistent", "PDF")
    MouseClick("left",97,83,1)
    _WinWaitActivate("Speichern des Berichts als PDF Datei ...","")
    MouseClick("left",452,451,1)
    _WinWaitActivate("Berichtsassistent","")
    MouseClick("left",608,667,1)
    _WinWaitActivate("Frage 1004","")
    MouseClick("left",300,156,1)
    _WinWaitActivate("testo IRSoft Software","")
    MouseClick("left",1276,8,1)

    [/autoit]

    Könnt ihr mir noch helfen das ganze zu automatisieren?

    Die Excelliste sieht wie im Beitrag oben aus.
    Zelle C1 Soll der Dokumentname geben bisher wurde dieser mit STRG+C kopiert und in meiner Mouseklickautomatisierung mit STRG+ V an der richtigen stelle eingefügt. Anschließend sollen die entsprechenden Bilder von bis geöffnet werden. Dann die Mouseklickautomatisierung ausgeführt werden.
    Anschließen soll es bei C2 weiter gehen un dass ganze soll durchlaufen bis in Spalte C keine daten mehr sind.


    Wäre cool ihr mir noch mal helfen könntet.

  • Excel hat eine hervorragend Sortier u. Such Funktion schau mal unter dem Menü
    Daten -> Filter
    Auch beherrscht Excel Visual Basic (VBA) und hat einen Macrorekorder.
    Ich glaube damit bist du bestens gerüstet.
    Ansonsten schliesse ich mich KriZza an

    Wenn du damit nicht klar kommst, kannste ja auch mal ein kleines Paket mit deinen Beispielen erstellen und hier hochladen. Ich denke dann wird das noch etwas eindeutiger wo es noch klemmt.

    Silvermoon