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. MiX-MoX

Beiträge von MiX-MoX

  • Microsoft Word: Suche und ersetze Text in den Inhalten der VBA-Progammierung (gelöst)

    • MiX-MoX
    • 20. Juli 2023 um 13:18

    Moombas

    sorry für mein langes schweigen. Hab Sommergrippe und warte noch auf Genesung bzw. einen klaren Kopf...

    Soweit ich das beim Überfliegen erkennen kann passt das soweit - zum Testen bin ich noch nicht gekommen.

  • Microsoft Word: Suche und ersetze Text in den Inhalten der VBA-Progammierung (gelöst)

    • MiX-MoX
    • 7. Juli 2023 um 08:20

    Hab mal Testdateien hochgeladen

    f_search.txt enthält die Such-Matrix

    12345678.txt enthält die Daten die in das Word-Dokument rein sollen

    Das Word-Dokument steht für ein Datenblatt, in dem die zu ersetzenden Strings stehen.

    Dateien

    Files.zip 12,76 kB – 153 Downloads
  • Microsoft Word: Suche und ersetze Text in den Inhalten der VBA-Progammierung (gelöst)

    • MiX-MoX
    • 5. Juli 2023 um 09:55

    Moin!

    vielen Dank für die Erläuterungen und Codeanpassungen.

    Ihr habt den Code aber nicht getestet, oder? - da stecken noch drei kleine Fehler drin:

    in Zeile 24 muss die Variable $aTags als Array definiert sein, also Global $aTags [1]

    in Zeile 46 muss Next durch WEnd ersetzt werden.

    Außerdem habe ich festgestellt, dass das Array $aTags leer bleibt - muss noch prüfen, woran das liegt.

  • Microsoft Word: Suche und ersetze Text in den Inhalten der VBA-Progammierung (gelöst)

    • MiX-MoX
    • 4. Juli 2023 um 12:49

    Hallo Water,

    vielen Dank für Deine kritische Betrachtung.

    Tatsächlich kann ich auf FileOpen verzichten, da ich die Files nur auslese, aber nicht manipuliere.

    $col wird mit Funktionsaufruf von _read_file definiert.

    Beim ersten Funktionsaufruf von _read_file ist das Array von $aTags noch 1D,

    Beim zweiten Funktionsaufruf von _rad_file ist es 2D.

    $file_s und $file_r müssen so belegt sein, dass die Zeilen entsprechend korrespondieren.

    In jeder Zeile von $aTags steht dann in der ersten Spalte der Such-String und in der zweiten Spalte der entsprechende Ersetzen-String.
    Sonst würde der Aufruf von $aTags in Word_DocFindReplace auch nicht funktionieren.

    Buchstabe "W" hatte ich eigentlich schon herauseditiert - keine Ahnung, weshalb Du den noch sehen konntest.

    Der Code ist nur um sehr spezifische Datails gekürzt, dennoch voll funktionsfähig, so wie er da steht.

  • Microsoft Word: Suche und ersetze Text in den Inhalten der VBA-Progammierung (gelöst)

    • MiX-MoX
    • 3. Juli 2023 um 08:11

    Hallo zusammen,

    hier mein Code:

    C
    #include <File.au3>
    #include <FileConstants.au3>
    #include <MsgBoxConstants.au3>
    #include <StringConstants.au3>
    #include <Word.au3>
    #include <WordConstants.au3>
     ; https://autoit.de/thread/87817-microsoft-word-suche-und-ersetze-text-in-den-inhalten-der-vba-progammierung-gel%C3%B6/?postID=708429#post708429
    
    ;~ #DIESE ROUTINE WIRD ÜBER PARAMETER AUFGERUFEN
    
    
    Opt("MustDeclareVars", 1)
    
    Local $sSearch_1 = $CmdLine[1]
    Local $sSearch_2 = $CmdLine[2]
    
    global $aTags [1]
    global $col
    
    
    ;~ File mit den Suchkriterien
    global $file_s = "f_search.txt"
    _read_file($file_s,1)
    
    ;~ File mit den Replace-Strings
    global $file_r = $sSearch_2 & ".txt"
    _read_file($file_r,2)
    
    
    
    Global $sExtension = ".docx" ; Verarbeite nur MS-Word Dokument ohne Macros.
    Global $sTemplate = _FileListToArrayRec(@ScriptDir, $sSearch_1 & $sExtension, $FLTAR_FILES, $FLTAR_RECUR, $FLTAR_SORT, $FLTAR_FULLPATH) ; Auflistung der rekursiv zu verarbeitenden MS-Word Dateien
    Global $iTotalProjectCount = 0, $iTotalComponentCount = 0, $iTotalReplacementCount = 0
    
    
    For $i = 1 To $sTemplate[0] ; rekursives Ermitteln der zu verarbeitenden Dateien
        _Main($sTemplate[$i])
    Next
    
    
    ;Funktion zum Einlesen der Textefiles in Arrays
    Func _read_file($file_x,$col )
    FileOpen($file_x, 0)
    
    ReDim $aTags[_FileCountLines($file_x) + 1] [$col]
    
    For $i = 1 To _FileCountLines($file_x)
        $aTags [$i-1][$col-1] = FileReadLine($file_x, $i)
    Next
    return $aTags
    FileClose($file_x)
    EndFunc
    
    
    Func _Main($sTemplate)
    
        Local $oWord = _Word_Create()
        If @error Then Return SetError(1, 0, MsgBox(16, '_Word_Open', '@error: ' & @error) * 0)
        If Not IsObj($oWord) Then Return SetError(1, 1, MsgBox(16, '_Word_DocOpen', '$oWord is not an Obj') * 0)
    
        Local $oWordDoc = _Word_DocOpen($oWord, $sTemplate)
        If @error Then Return SetError(2, 0, MsgBox(16, '_Word_DocOpen', '@error: ' & @error) * 0)
        If Not IsObj($oWordDoc) Then Return SetError(2, 0, MsgBox(16, '_Word_DocOpen', '$oWordDoc is not an Obj') * 0)
    
        For $j = 0 To UBound($aTags, 1) - 1
            _Word_DocFindReplace($oWordDoc, $aTags[$j][0], $aTags[$j][1], Default, -1)
        Next
        consolewrite(@ScriptDir&@CRLF)
        Local $sFileName = @ScriptDir & "\"&$sSearch_1&"-"&$sSearch_2 &".pdf"
        _Word_DocExport($oWordDoc, $sFileName, Default, $wdExportCurrentPage)
    
        _Word_DocClose($oWordDoc, false) ; speichern nicht vergessen
        If @error Then Return SetError(3, 0, MsgBox(16, '_Word_DocClose', '@error: ' & @error) * 0)
    
        _Word_Quit($oWord)
        If @error Then Return SetError(4, 0, MsgBox(16, '_Word_Quit', '@error: ' & @error) * 0)
    
        Return SetError(0, 0, 1)
    
    EndFunc   ;==>_Main
    Alles anzeigen

    Mit SAP hat das nur insofern zu tun, als das die beschriebene Routine über CC aufgerufen wird.
    Sie funktioniert aber auch über jede anderen Programmaufruf z.B. aus der Kommandozeile.

  • Microsoft Word: Suche und ersetze Text in den Inhalten der VBA-Progammierung (gelöst)

    • MiX-MoX
    • 30. Juni 2023 um 11:01

    Habe da ja ganz schön was losgetreten :)

    Ich benötige eine EXE um aus SAP bzw. der CoreSuite heraus einen bestimmten Prozess anzustoßen, den die bei SAP nicht hinbekommen.

    Möglicherweise könnte ich in der SAP CoreSuite direkt VBA-Code einbetten - ich finde die Möglichkeit das via AutoIT zu machen "bequemer" und potenter,

    denn im Gegensatz zu VB in der SAP - Umgebung weiß ich, dass ich über AutoIT Word-Objekte ansprechen kann.

    Mein Anliegen hat sich schon wieder fast erledigt, die Lösung über das hier vorgestellte Skript wäre die Deluxe-Lösung.

    Ich habe auf die Schnelle eines in diesem Post der erstgenannten Skripte - das für Excel gedacht war - auf Word-Objekte umgeschrieben.

    Dass passt jetzt weitestgehend, wenn auch ohne die ganze Fehlerbetrachtung und statistischen Auswertungen.

    Mein Skript wird- wenn es fertig ist - folgendes machen:

    Das Skript wird über Parameter aufgerufen.

    Die Parameter enthalten Informationen über die eine bestimmte Text-Datei und eine bestimmte Word-Datei geöffnet werden können.

    In dieser Textdatei wird ein mehrzeiliger Datensatz bereitgestellt.

    Das Skript liest die Textdatei in ein Array, und führt innerhalb des Word-Dokumentes eine Suchen und Ersetzen-Prozedur aus - mit Daten aus dem Array.
    Anschließend wird das Word-Dokument unter einem bestimmten Namen als PDF gespeichert.

    Das ganze steht im Zusammenhang mit REACH und der Verpflichtung der Hersteller, dem Handel Sicherheitsdatenblätter mit Händlerinformationen bereitzustellen.

    Serienbriefe oder ähnliches sind kein Lösungsansatz, denn es geht um ca. 8.000 Word -Dokumente (SDB) und einige hundert Händler.

    Sowohl die Händlerdaten als auch die Daten in den SDB unterliegen ständigen Änderungen.

    Ich stelle das Skript hier rein, wenn es fertig ist.

  • Microsoft Word: Suche und ersetze Text in den Inhalten der VBA-Progammierung (gelöst)

    • MiX-MoX
    • 29. Juni 2023 um 11:56

    Hallo zusammen!

    ich bin eben auf diesen grandiosen Post gestoßen, der mein Problem fast, aber eben nur fast zu lösen vermag.

    Mein Anliegen ist eigentlich etwas simpler, der hier angebotene Code allerdings so komplex, dass ich nicht daran herumschrauben (ver)mag.

    Hier mein Anliegen:

    Ich benötige die gleiche Funktionalität - allerdings nicht im VBA-Modul eines dotm sondern im Body eines docx.

    Mein Versuch den Code einfach umzuschreiben scheiterte an meinem mangelhaften Verständnis auf der Objektebene der Word-Dokumente.

    Nachdem der Text ersetzt wurde, soll das Dokument als PDF gespeichert werden - das bekäme ich noch hin :)

    Vielleicht kann mir jemand helfen?

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™