Fischer-Bayern.de
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Wörter in Word-Dokumenten ersetzen

 
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> AppleScript X
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
kipp
•-->
•-->


Anmeldedatum: 27.03.2007
Beiträge: 73
Wohnort: Göttingen

BeitragVerfasst am: 23.10.2007 - 13:22    Titel: Wörter in Word-Dokumenten ersetzen Antworten mit Zitat

Hallo in die Runde,

kann mir jemand mit einem Script helfen, mit dem in sämtlichen Word-Dateien eines bestimmten Ordners ein dateiübergreifendes "Suchen & Ersetzen" ausgeführt werden kann? Komme mit meinen stümperhaften Basteleien da alleine nicht weiter... :o(

Mein bisheriger Ansatz war: alten Namen für die Suche eingeben, neuen Namen für das Ersetzen eingeben und Applescript einfach alle Dokumente in dem Ordner / bzw. die auf das Droplet gezogen werden abarbeiten lassen. Aber leider verstehen Applescript und ich uns wieder einmal nicht...

Hier das zusammengebastelte Script, mit dem es schon mal nicht geht:

Code:

on open fileList
   repeat with oneFile in fileList
      set oneFile to oneFile as alias
      ProcessItem(oneFile)
   end repeat
end open

on run
   
   set temp1 to display dialog "alten Projektnamen eingeben !" default answer ""
   set temp2 to display dialog "neuen Projektnamen eingeben !" default answer ""
   set _altesProjekt to text returned of temp1
   set _neuesProjekt to text returned of temp2
   
   set fileList to (choose file) as list
   repeat with oneFile in fileList
      set oneFile to oneFile as alias
      log oneFile
      ProcessItem(oneFile)
   end repeat
end run

on ProcessItem(oneFile)
   
   tell application "Microsoft Word"
      
      set _range to text object of active document
      execute find find object of _range find text _altesProjekt replace with _neuesProjekt replace replace all
      activate
      try
         open oneFile
      on error errText
         display dialog errText
      end try
      
      set allText to text of document 1
      close document 1
      display dialog allText
   end tell
   
end ProcessItem



>>> kipp :o)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
chebfarid
•-->
•-->


Anmeldedatum: 10.02.2007
Beiträge: 106
Wohnort: Milano

BeitragVerfasst am: 24.10.2007 - 20:53    Titel: Antworten mit Zitat

Ciao Kipp,

Dein Scriptversuch ist in einigen Ansätzen richtig, aber recht konfus zusammengebaut. Im "Schweinsgalopp" Very Happy :

Zitat:
on open fileList
repeat with oneFile in fileList
set oneFile to oneFile as alias
ProcessItem(oneFile)
end repeat
end open

Du rufst in der vierten Zeile bereits den Handler ProcessItem auf, das hat zur Folge, daß der gesamte Code in der Mitte des Scripts (on run...) nie ausgeführt wird, weshalb Du dann auch keine Ergebnisse (oder nur Fehlermeldungen) erhältst.

Zitat:
set temp1 to display dialog "alten Projektnamen eingeben !" default answer ""
set temp2 to display dialog "neuen Projektnamen eingeben !" default answer ""
set _altesProjekt to text returned of temp1
set _neuesProjekt to text returned of temp2

Dieser Block muß vor dem Repeat-Loop ausgeführt werden, Du brauchst den Inhalt der Variablen _altesProjekt und _neuesProjekt ja später.
Allerdings müssen diese Variablen auch für ProcessItem zugänglich sein, d.h. entweder gibst Du sie als Parameter an den Handler weiter oder Du benutzt die Klasse Property, die global für das gesamte Script lesbar ist.

Zitat:
set fileList to (choose file) as list
repeat with oneFile in fileList
set oneFile to oneFile as alias
log oneFile
ProcessItem(oneFile)
end repeat

Ist komplett überflüssig: Du hast die ausgewählten Files ja bereits auf das Droplet gezogen.

Zitat:
on ProcessItem(oneFile)

tell application "Microsoft Word"

set _range to text object of active document
execute find find object of _range find text _altesProjekt replace with _neuesProjekt replace replace all
activate
try
open oneFile
on error errText
display dialog errText
end try

set allText to text of document 1
close document 1
display dialog allText
end tell

end ProcessItem

Ist alles ein wenig durcheinander:
a) Word muß ja als erstes den File öffnen, sonst hast Du kein "text object" im offenen Dokument (Du hast noch nicht mal das Dokument)
b) den neuen Text (allText) des veränderten Dokuments bekommst Du so:
Code:
set allText to content of text object of document 1


Neuzusammengebaut sieht das ganze so aus und sollte funktionieren:
Zitat:
property _altesProjekt : ""
property _neuesProjekt : ""

on open fileList
     set temp1 to display dialog "alten Projektnamen eingeben !" default answer ""
     set temp2 to display dialog "neuen Projektnamen eingeben !" default answer ""
     set _altesProjekt to text returned of temp1
     set _neuesProjekt to text returned of temp2
     
     repeat with oneFile in fileList
          set oneFile to oneFile as alias
          
          ProcessItem(oneFile)
     end repeat
end open

on ProcessItem(oneFile)
     tell application "Microsoft Word"
          activate
          try
               open oneFile
               set _range to text object of active document
               execute find find object of _range find text _altesProjekt replace with _neuesProjekt replace replace all
               set allText to content of text object of document 1
               display dialog allText
               close document 1
               
          on error errText
               display dialog errText
          end try
     end tell
end ProcessItem
-------------------------
[This script was automatically tagged for color coded syntax by Convert Script to Markup Code]

Ich nehme mal an, daß Du anstatt den neuen Text in eienm Dialog anzuzeigen, die veränderten Wordfiles sichern möchtest. Dafür müßtest Du den Code dann noch leicht verändern.

Good scripting
Farid
_________________
Abends lustig morgens triste
Das ist Leben von Artiste
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
kipp
•-->
•-->


Anmeldedatum: 27.03.2007
Beiträge: 73
Wohnort: Göttingen

BeitragVerfasst am: 24.10.2007 - 22:00    Titel: Antworten mit Zitat

hoi chebfarid!

Hmmm - gestehe, dass ich das Skript mit meinem Viertelwissen und viel gutem Glauben an das Glück aus verschiedenen Snippets zusammengestückelt und durch ein paar Zeilen ergänzt habe (betretenaufdenbodenschau).
Bin von Deiner Erläuterung und dem Resultat sehr angetan! Ganz herzlichen Dank an dieser Stelle! Vor allem, weil Du mir die letzten Anpassungen überlassen hast und damit das Gefühl gibst, auch noch was dazu beitragen zu können ;o)

Danke für Dein Engagement!
>>> kipp ;o)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
kipp
•-->
•-->


Anmeldedatum: 27.03.2007
Beiträge: 73
Wohnort: Göttingen

BeitragVerfasst am: 25.10.2007 - 11:05    Titel: Antworten mit Zitat

Hmmm - doch noch ein Problem :o(
Die Geschichte mit dem save document 1 habe ich ja noch hinbekommen, aber sobald ich eine Kopie von der Datei speichern möchte, klappt es nicht mehr:

Code:

set the_path to ((path to desktop) as text) & _neuesProjekt
save document 1 in the_path


Den Ordner habe ich weiter oben mit dem Namen von der Eingabe _neuesProjekt anlegen lassen, aber die bearbeitete Datei bekomme ich da nicht hingespeichert...

Geht auch so, aber wenn mir da noch mal jemand unter die Arme greifen könnte würde ich heute Abend wieder besser schlafen ;o)

>>> kipp :o)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
chebfarid
•-->
•-->


Anmeldedatum: 10.02.2007
Beiträge: 106
Wohnort: Milano

BeitragVerfasst am: 25.10.2007 - 20:55    Titel: Antworten mit Zitat

Zitat:
save document 1 in ...

klappt bei mir auch nicht Confused ... Du kannst aber stattdessen save as benutzen:
Zitat:
set saveFolder to (path to desktop) as string
set fileName to "pippo.doc"
set saveFile to (saveFolder & fileName)

tell application "Microsoft Word"
     save as document 1 file name saveFile
end tell
-------------------------
[This script was automatically tagged for color coded syntax by Convert Script to Markup Code]

Good scripting
Farid
_________________
Abends lustig morgens triste
Das ist Leben von Artiste
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
kipp
•-->
•-->


Anmeldedatum: 27.03.2007
Beiträge: 73
Wohnort: Göttingen

BeitragVerfasst am: 25.10.2007 - 20:59    Titel: Antworten mit Zitat

Hmmm - damit speichert das Skript aber alle auf das Droplet gezogenen Dateien nacheinander als pippo.doc, überschreibt also die gerade bearbeitete Datei mit der nächsten, oder lese ich das falsch?

Werde mal ein bisschen damit herumprobieren... und danke wieder einmal für die prompte Hilfe!

>>> kipp :o)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
chebfarid
•-->
•-->


Anmeldedatum: 10.02.2007
Beiträge: 106
Wohnort: Milano

BeitragVerfasst am: 25.10.2007 - 21:03    Titel: Antworten mit Zitat

"pippo.doc" war natürlich nur ein Beispiel Very Happy
Du kannst den Filenamen, wie in Deinem Script vorgesehen, sebstverständlich dynamisch erstellen.

Frohes scripten
Farid
_________________
Abends lustig morgens triste
Das ist Leben von Artiste
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
kipp
•-->
•-->


Anmeldedatum: 27.03.2007
Beiträge: 73
Wohnort: Göttingen

BeitragVerfasst am: 25.10.2007 - 21:16    Titel: Antworten mit Zitat

Nope - anscheinend reden wir da aneinander vorbei ;o) Wenn ich den Dateinamen in der Schleife angebe, werden dann nicht alle automatisch nacheinander abgearbeiteten Dateien nacheinander unter diesem (fest vergebenen) Dateinamen gespeichert? ... Habe gerade versucht, das Skript dahingehend zu ändern, dass die Dateien mit dem urspründlichen Namen auf dem Desktop gesichert werden, aber irgendwie hakt es da immernoch... :o(

>>> kipp ;o)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Wile E. Coyote
•-->
•-->


Anmeldedatum: 16.08.2007
Beiträge: 76

BeitragVerfasst am: 26.10.2007 - 11:42    Titel: Antworten mit Zitat

Hallo,

wenn Du den Filename wie nachfolgend in die Variable überträgst und danach diesen Namen vergibst, wird bei der Schleife für jede Datei der alte Namen verwendet. Mußt allerdings die Ermittlung des Namens mit in die Schleife nehmen.

tell application "Finder" to set fileName to name of oneFile as string

mit einem anschließenden

display dialog fileName

kannst Du Dir, zu Testzwecken, den Namen vorher ansehen, bevor Du ihn vergibst.

Gruß
Wile E.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden AIM-Name
kipp
•-->
•-->


Anmeldedatum: 27.03.2007
Beiträge: 73
Wohnort: Göttingen

BeitragVerfasst am: 26.10.2007 - 13:40    Titel: Antworten mit Zitat

Hüpf! Nachdem ich die Datei mitsamt dem gewünschtem Ordnernamen im Dateinamen auf dem Desktop anlegen lassen habe, hat es jetzt mit

set saveFile to ((saveFolder as string) & ":" & fileName as string)

endlich geklappt. Ich weiß zwar nicht, wie sauber oder stümperhaft das Skript zusammengetextet ist, aber Dank der grandiosen Hilfe hier läuft es jetzt auch wie gewünscht.

Für alle Forumsurfer: Das Skript als Droplet gespeichert ersetzt die Worte "Projektname" und "Projekort" in allen auf das Droplet gezogenen Word-Dateien und speichert die veränderten Dateien dann als Kopie (mit jeweils gleichem Namen) in einem neuen Ordner auf dem Desktop (der hat jetzt sogar den Namen vom neuen Projekt).

Noch einmal herzlichen Dank an die beiden Helfer!
>>> kipp :o)

Zitat:

property _Projekttitel : ""
property _Projektort : ""

on open fileList
     set temp1 to display dialog "neuen Projektnamen eingeben !" with icon alias (((path to me) as string) & "Contents:Resources:129.icns") default answer ""
     set temp2 to display dialog "neuen Untertitel / Ort eingeben !" with icon 1 default answer ""
     set _Projekttitel to text returned of temp1
     set _Projektort to text returned of temp2
     
     tell application "Finder"
          activate
          make new folder at desktop with properties {name:_Projekttitel}
     end tell
     
     repeat with oneFile in fileList
          set oneFile to oneFile as alias
          ProcessItem(oneFile)
     end repeat
end open

on ProcessItem(oneFile)
     tell application "Finder" to set fileName to name of oneFile as string
     tell application "Microsoft Word"
          activate
          try
               open oneFile
               set _range to text object of active document
               execute find find object of _range find text "Projekttitel" replace with _Projekttitel replace replace all
               execute find find object of _range find text "Projektort" replace with _Projektort replace replace all
               set saveFolder to ((path to desktop) as string) & _Projekttitel
               set saveFile to ((saveFolder as string) & ":" & fileName as string)
               save as document 1 file name saveFile
               close document 1
          on error errText
               display dialog errText
          end try
     end tell
end ProcessItem


-------------------------
[This script was automatically tagged for color coded syntax by Convert Script to Markup Code]

(jetzt sogar in Farbe...)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> AppleScript X Alle Zeiten sind GMT + 2 Stunden
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2002 phpBB Group
Deutsche Übersetzung von phpBB.de


AppleScript für absolute Starter