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. Time2Snowball

Beiträge von Time2Snowball

  • Ein zwei Feinschliffe bezüglich Word

    • Time2Snowball
    • 10. Januar 2015 um 22:50

    Also entweder stehe ich echt verdammt doll auf dem Schlauch, oder wir reden aneinander vorbei.

    .ParagraphFormat.Alignment = 1 zentriert den Text der Fußzeile doch "nur". In wiefern soll das mein Problem lösen? Denn das mache ich doch schon und es funktioniert.

    Mit:

    Spoiler anzeigen
    [autoit]

    With $oFooters2.Find
    .Text = "PAGE"
    .MatchCase = True
    .MatchWholeWord = True
    While .Execute
    $oFooters2.Fields.Add ($oFooters2, -1,"", False)
    $oFooters2.Collapse(0)
    WEnd
    EndWith

    [/autoit]


    Suche ich nach dem PAGE welches ich in die Fußzeile geschrieben habe und will den Feldcode drum schreiben.
    Das würde ich in VB mit dem Befehl oRng.Fields.Add oRng, wdFieldEmpty, , False machen. Meine Problematik ist das ich keinen Plan habe, wie ich die leere Eingabe darstellen soll.
    Ich habe die letzten Tage nichts anderes gemacht als mir die Finger wund zu googlen wie ich das machen kann.
    Ich würde mich ja schon freuen, wenn ihr irgend etwas zu meinem bisherigen Code sagen könntet, ich probiere und probiere, aber ohne Rückmeldung weiß ich nicht was ich machen soll. Wo ich feststecke, oder ob vielleicht doch gar nicht die Zeile das Problem ist, sondern evtl schon mein Aufruf, die Range oder was auch immer.... :(

  • Ein zwei Feinschliffe bezüglich Word

    • Time2Snowball
    • 10. Januar 2015 um 17:15

    Gibt es keinen der mir bei der Codezeile helfen kann? :/

  • Ein zwei Feinschliffe bezüglich Word

    • Time2Snowball
    • 9. Januar 2015 um 10:22

    Okay, hab was von Bugfix gefunden :)

    Zitat von BugFix

    Ich wußte nicht, welche Funktion sich dahinter verbirgt, daher auch die Frage. So sollte es gehen:

    [autoit]

    ; vba-Code:
    ; Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, text:="SEQ Step", PreserveFormatting:=True
    ; Funktion ist: Selection.Fields.Add
    ; Parameter sind: Range, Type, text, PreserveFormatting
    ; Reihenfolge der übergebenen Parameter einhalten

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

    ; Selection.Range ist die gewählte Range des Objektes
    ; wdFieldEmpty ist eine Konstante (-1)
    ; text ist die Bezeichnung für das Feld
    ; PreserveFormatting, ein boolscher Parameter

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

    $oWord = ObjCreate("Word.Application")
    $oWord.Selection.Fields.Add( $oWord.Selection.Range, -1, "SEQ Step", False )

    [/autoit]
    Alles anzeigen

    ich nutze den VBCode:

    Spoiler anzeigen
    Code
    Option Explicit
    Sub ScratchMacro()
    Dim oWordApp As Object
    Dim oDoc As Object
    Dim oRng As Range
    Dim oFooterRng1 As Range
    Dim oFooterRng2 As Range
    
    
    Set oWordApp = CreateObject("Word.application")
    oWordApp.Visible = True
    Set oDoc = oWordApp.Documents.Add()
      Set oRng = oDoc.Sections(1).Footers(wdHeaderFooterPrimary).Range
      With oRng
        .Text = "Page PAGE of NUMPAGES Pages"
        Set oFooterRng1 = oRng.Words(2)
        Set oFooterRng2 = oRng.Words(4)
      End With
      'Insert the field code around PAGE expression
      fInsertFields oFooterRng1, "PAGE"
      'Insert the field code around the NUMPAGES expressions
      fInsertFields oFooterRng2, "NUMPAGES"
      oRng.Fields.Update
      ActiveWindow.View.ShowFieldCodes = False
    lbl_Exit:
      Exit Sub
    End Sub
    Public Sub fInsertFields(oRng As Range, Optional strText As String)
      With oRng
        'Find the expression and add a field around it
        With .Find
          .Text = strText
          .MatchCase = True
          .MatchWholeWord = True
          While .Execute
            oRng.Fields.Add oRng, wdFieldEmpty, , False
            oRng.Collapse wdCollapseEnd
          Wend
        End With
      End With
    lbl_Exit:
      Exit Sub
    End Sub
    Alles anzeigen


    damit habe ich folgendes geschaft:

    Spoiler anzeigen
    [autoit]


    $oWord = ObjCreate("Word.Application")
    $oWord.Visible = False ; bleibt unsichtbar
    $oWord.Documents.Open ($sFileName) ; eine bestehende Datei aufrufen
    Local $oFooters = $oWord.ActiveDocument.Sections(1).Footers($wdHeaderFooterPrimary).Range
    With $oFooters
    .Text = "Seite PAGE von NUMPAGES Seiten"
    .ParagraphFormat.Alignment = 1
    Local $oFooters2 = $oFooters.Words(2)
    Local $oFooters4 = $oFooters.Words(4)
    .ParagraphFormat.Alignment = 1
    EndWith

    With $oFooters2.Find
    .Text = "PAGE"
    .MatchCase = True
    .MatchWholeWord = True
    While .Execute
    $oFooters2.Fields.Add ($oFooters2, -1,"", False)
    $oFooters2.Collapse(0)
    WEnd
    EndWith

    With $oFooters4.Find
    .Text = "NUMPAGES"
    .MatchCase = True
    .MatchWholeWord = True
    While .Execute
    $oFooters4.Fields.Add ($oFooters4, -1,"", False)
    $oFooters4.Collapse(0)
    WEnd
    EndWith

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

    $oWord.Application.DisplayAlerts = False
    $oWord.ActiveDocument.Save
    $oWord.Quit

    [/autoit]

    ich hab dadurch eine schön zentrierte Fußzeile mit dem Text "Seite von Seiten"
    also noch nicht ganz was ich suche :/

    das problem liegt denke ich bei dem vb ausdruck:

    "oRng.Fields.Add oRng, wdFieldEmpty, , False"

    den ich als

    "$oFooters4.Fields.Add ($oFooters4, -1,"", False)"

    geschrieben habe, weil er mich "($oFooters4, -1, , False)" nicht schreiben lassen wollte

  • Ein zwei Feinschliffe bezüglich Word

    • Time2Snowball
    • 8. Januar 2015 um 22:31

    Danke für die Hilfe :) von euch beiden.
    ich weiß ich hab schon so viel erfragt, aber könnte mir einer das VB in autoit übersetzen, ich bin da echt total unerfahren :/ :whistling:

  • Ein zwei Feinschliffe bezüglich Word

    • Time2Snowball
    • 8. Januar 2015 um 17:53

    Ich habe eine andere Idee, wenn das möglich wäre.
    Kann ich eine temp.docx erstellen, diese includieren, sodass ich am ende nur meine exe habe und er als template immer diese datei verwendet? wie ich das temp so nutzen könnte weiß ich, aber ich hätte es gerne so, dass ich nur meine exe zum schluss habe und keine weiteren datei.

  • Ein zwei Feinschliffe bezüglich Word

    • Time2Snowball
    • 8. Januar 2015 um 10:17

    Moin moin,
    ich hab echt alles probiert, aber deine Funktion schreibt bei mir einfach keine Fußzeile...

    Der eigentlich wichtige Teil darin ist ja:

    Spoiler anzeigen
    [autoit]

    Local $Footers = $oWord.ActiveDocument.Sections(1).Footers($wdHeaderFooterPrimary)
    $Footers.Range.Delete
    $Footers.Range.Select
    With $oWord.Application.Selection
    $oWord.NormalTemplate.AutoTextEntries("Seite x von Y").Insert(.Range, True)
    .ParagraphFormat.Alignment = 1
    EndWith

    [/autoit]

    oder etwas nicht? aber da passiert bei mir gar nichts :/

  • Ein zwei Feinschliffe bezüglich Word

    • Time2Snowball
    • 6. Januar 2015 um 17:36

    Erstmal Danke :)

    Aber wenn ich deine Funktion richtig verstehe schreibt sie doch "nur" einen String in die Fußzeile. Ich hätte aber gerne, dass die automatische Seitenzahl (z.B Seite 3 von 8) in der Fußzeile steht. Also als Feldfunktion

    Code
    Seite {PAGE  \* Arabic  \* MERGEFORMAT} von {NUMPAGES  \* Arabic  \* MERGEFORMAT}

    nur wenn ich diese als String einfüge klappt es nicht :/

  • Ein zwei Feinschliffe bezüglich Word

    • Time2Snowball
    • 6. Januar 2015 um 17:15

    Moin moin,
    erst einmal danke für das tolle Forum, ihr habt mir schon sehr gut weiter geholfen, leider konnten noch nicht all meine Probleme gelöst werden.

    Erst einmal zu dem was mein Programm machen soll:
    Ich will die Möglichkeit haben einen Screenshot vom Bildschirm zu machen, diesem eine Nummer geben und ihn kommentieren. Das ganze Produkt speicher ich dann in einer Worddatei, das geht so weiter für jeden Prüfpunkt. Im Header soll der jeweilige Test-Fall, der Namen des Testers und das heutige Datum stehen. Im Footer soll "Seite X von Y" stehen.

    Es funktioniert alles so weit ganz gut. Das größte Problem habe ich mit dem Footer, das will patu nicht klappen. Schön wäre es auch wenn ich den Header schöner erzeugen könnte, das ist aber ein Luxusproblem.

    Hier einmal mein Code

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    ; Implementierung der GUI
    #Region #
    $body = GUICreate("Screenshot-Tool", 307, 332, 193, 124)
    $header = GUICtrlCreateLabel("Screenshot-Tool", 72, 8, 175, 24)
    GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
    $wordDocInfo = GUICtrlCreateLabel("Wie soll die Worddatei heißen?", 8, 64, 181, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $info = GUICtrlCreateButton("?", 190, 58, 25, 25)
    $doc = GUICtrlCreateInput("Validierung", 8, 88, 289, 21)
    $caseInfo = GUICtrlCreateLabel("Welcher Test Case wird bearbeitet?", 8, 128, 207, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $case = GUICtrlCreateInput("Test Case / Test Fall #", 8, 152, 289, 21)
    $nameInfo = GUICtrlCreateLabel("Wie ist Ihr Name?", 8, 192, 105, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $name = GUICtrlCreateInput("Max Mustermann", 8, 216, 289, 21)
    $exit = GUICtrlCreateButton("Beenden", 216, 264, 81, 33)
    $pause = GUICtrlCreateLabel("PAUSE drücken:", 8, 264, 99, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $pauseInfo = GUICtrlCreateLabel("Screenshot machen und speichern", 8, 288, 169, 17)
    GUISetState(@SW_SHOW)
    #EndRegion #

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

    ; Das Drücken von "Pause" startet die Function print()
    HotKeySet("{PAUSE}", "print")

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

    Func print()
    Local Const $wdHeaderFooterPrimary = 1
    local $sName = GUICtrlRead($doc) ; liest die Eingabe des Dokumentennamen aus und speichert diese in der Variable sName
    local $sFileName = @ScriptDir & "\" & $sName & ".docx"
    local $sCaseNumber = GUICtrlRead($case) ; liest die Eingabe der Casenummer aus und speichert diese in der Variable sCaseNumber
    local $sUserName = GUICtrlRead($name) ; liest die Eingabe des Testers aus und speichert diese in der Variable sUserName
    local $date = @MDAY & "." & @MON & "." & @YEAR
    ; Der Header musste etwas erschummelt werden um ihn über mehrere Zeilen hin zu bekommen
    $sHeader = "Test Case/ Test Fall #: " & $sCaseNumber & " " & "Durchgeführt von: " & $sUserName & " " & "Datum: " & $date
    $sFooter = 'Seite {PAGE \* Arabic \* MERGEFORMAT} von {NUMPAGES \* Arabic \* MERGEFORMAT}' ;Feldfunktion, kann aber leider nicht als String eingefügt werden

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

    ; prüft ob ein Worddokument mit dem Namen aus dem Textfeld existiert und erstellt andernfals ein solches
    If Not (FileExists($sName & ".docx")) Then
    FileWrite($sName & ".docx","")

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

    ; schreibt header (und hoffentlich bald footer)
    $oWord = ObjCreate("Word.Application")
    $oWord.Visible = False ; bleibt unsichtbar
    $oWord.Documents.Open ($sFileName) ; eine bestehende Datei aufrufen
    $oWord.ActiveDocument.Sections(1).Headers($wdHeaderFooterPrimary).Range.Text = $sHeader
    $oWord.Application.DisplayAlerts = False
    $oWord.ActiveDocument.Save
    $oWord.Quit
    EndIf

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

    ;DRUCK drücken um einen screenshot zu machen
    Send("{PRINTSCREEN}")
    Sleep(200)

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

    ; öffnet ein Eingabefeld in dem ein Kommentar geschrieben werden kann
    local $pruefpunkt = "Prüfpunkt: " & InputBox("Prüfpunkt", "Prüfpunkt eingeben")
    local $command = InputBox("Kommentar", "Kommentar eingeben")

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

    ShellExecute($sName & ".docx", "", @ScriptDir, "edit") ; öffnet die Worddatei
    local $window = WinWait($sName,"",2) ;wartet bis zu 2 Sekunden auf das Öffnen der Worddatei, sonst Abbruch
    WinSetState($window, "", @SW_SHOW) ; legt die Worddatei in den Vordergrund

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

    ; ans Ende des Dokumentes springen, wichtig falls es geschlossen wurde oder ähnliches
    SEND("{CTRLDOWN}{END}{CTRLUP}")

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

    Send("{ENTER}")

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

    ; Prüfpunkt als Überschrift des Bildes schreiben
    Send($pruefpunkt)

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

    ; Einfügen des Bildes
    Send("{CTRLDOWN}{v}{CTRLUP}")
    Sleep(200)

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

    ; Einfügen des Kommentars
    Send("{ENTER}")
    Sleep(200)
    Send("Kommentar:")
    Sleep(200)
    Send("{SHIFTDOWN}{ENTER}{SHIFTUP}")
    Sleep(200)
    send($command)
    Sleep(200)

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

    ; neue Seite
    Send("{CTRLDOWN}{ENTER}{CTRLUP}")

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

    ; minimieren der Worddatei
    WinSetState($window, "", @SW_MINIMIZE)
    EndFunc

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE, $exit
    Exit
    Case $info
    MsgBox(64,"Info","Die Worddatei dient als Dokument, welches die einzelnen Schritte und Prüfpunkte an Hand von Screenshots speichert. Sie dient als Nachweis, dass der jeweilige Test Case bearbeitet wurde.")
    EndSwitch
    WEnd

    [/autoit]

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™