Forenindex » Programmierung/Entwicklung » AppleScript » pdf Dateien anhand einer Excel Tabelle umbenennen???

pdf Dateien anhand einer Excel Tabelle umbenennen???

meister eder
Beiträge gesamt: 1114

6. Mär 2014, 14:24
Bewertung:

gelesen: 29875

Beitrag als Lesezeichen
Hallo Forum,

ich habe eine Datei die aus Eindrucken besteht, diese Datei erstelle ich durch ein Bildners. Bis dahin ist alles perfekt. Nach dem Teilen dieser PDF Datei (stammt aus Indesign) habe ich ca. 400 Einzelseiten die sich "Dateiname_teil1.pdf" usw. nennen!
Ich besitze aber eine Excel Tabelle in der steht "Dateiname_teil1.pdf soll 12345-1234.pdf heissen usw. Ist dies mit Apple Script bzw für mich als nicht Scripter mit Apple Automator möglich umzurennen?

Gruß und schon mal vielen Dank

Eder
----------------
Wer nicht fragt, bekommt keine Antwort!

pdf Dateien anhand einer Excel Tabelle umbenennen???

Hans Haesler
  
Beiträge gesamt: 5826

6. Mär 2014, 18:47
Bewertung:

gelesen: 29821

Beitrag als Lesezeichen
Hallo Eder,

für einen Nicht-Scripter ist diese Aufgabe zu happig. Und "Automator" würde ich dafür nicht benutzen.

Mein Angebot: Wenn Du mir die Excel-Datei zustellst, werde ich versuchen, ein AppleScript zu schreiben.

Allerdings müsstest Du Dich etwas gedulden, denn ich bin noch im Ski-Urlaub. Bis Samstag.

Gruss, Hans

pdf Dateien anhand einer Excel Tabelle umbenennen???

Hans Haesler
  
Beiträge gesamt: 5826

10. Mär 2014, 13:10
Bewertung:

gelesen: 29758

Beitrag als Lesezeichen
Hallo Eder,

ich habe Dir das Droplet per PM zugestellt.

Zum Gebrauch:
– Excel starten;
– das Dokument "neue Namen" / "alte Namen" öffnen;
– den Quellordner mit den PDF-Dateien auf das Icon des Droplets ziehen.

Am Schluss kommt eine Meldung mit der Anzahl der umbenannten Dateien. Es wird auch gemeldet, wieviele Dateien nicht gefunden werden konnten. Oder wieviele neue Namen schon existieren.

Im Excel-Dokument beginnen die Namen in Reihe 3. Die "neuen" Namen sind in Spalte "A", die "alten" Namen befinden sich in Spalte "B".

Der folgende Code im Dateiformat "Programm" gespeichert, ergibt ein Droplet.

Code
(* 
PDFs_umbenennen_01d.app
Dieses Script benennt PDF-Dateien anhand eines Excel-Dokumentes um.
© 10.03.14 / Hans Häsler, Châtelard 52, CH-1018 Lausanne
*)

global ctr
global folPath
global oldNames
global newNames
global missCtr
global probCtr

-- einen Dialog zeigen, falls der Anwender einen Doppelklick auf das Droplet macht
on run
display dialog "Den Quellordner auf das Icon
dieses Droplets ziehen." buttons "OK" default button 1 with icon 0
end run

-- der 'open handler', welcher auf das Fallenlassen von Objekten reagiert
on open allObjects
-- Variablen vorbereiten
set ctr to 0
set missCtr to 0
set probCtr to 0
-- den Handler aufrufen, welcher prüft, ob Excel läuft
testApp()
-- den Handler aufrufen, welcher die Namen auflistet
getNames()
-- das Ergebnis prüfen
set nOld to count of oldNames
set nNew to count of newNames
if nOld is 0 then
activate me
display dialog "Das Excel-Dokument enthält" & return & "keine \"alten\" Namen." buttons ¬
"OK" default button 1 with icon 0
error number -128
end if
if nNew is 0 then
activate me
display dialog "Das Excel-Dokument enthält" & return & "keine \"neuen\" Namen." buttons ¬
"OK" default button 1 with icon 0
error number -128
end if
-- den Inhalt der Namenslisten prüfen
if oldNames contains "" then
activate me
display dialog "Die \"alten\" Namen enthalten ein leeres Feld." buttons ¬
"OK" default button 1 with icon 0
error number -128
else if newNames contains "" then
activate me
display dialog "Die \"neuen\" Namen enthalten ein leeres Feld." buttons ¬
"OK" default button 1 with icon 0
error number -128
end if
-- das erste gedroppte Objekt zum Handler 'processObject' schicken
processObject(item 1 of allObjects)
-- den Handler aufrufen, welcher den Anwender informiert
infUser()
end open


--///////////////////////////////////////////////////////////////////////////////////////
-- die Handler
--///////////////////////////////////////////////////////////////////////////////////////

-- der Handler, welcher prüft, ob Excel läuft
on testApp()
tell application "System Events"
activate
set curProc to (name of every process) as string
end tell
if curProc does not contain "Microsoft Excel" then
activate me
display dialog "Bitte \"Microsoft Excel\" starten." buttons "OK" default button 1 with icon 2
error number -128
end if
end testApp

-- alte und neue Namen auflisten
on getNames()
global tmpList
tell application "Microsoft Excel"
activate
set nDocs to count windows
if nDocs is greater than 1 then
display dialog "Es darf nur *ein* Excel-Dokument geöffnet sein." buttons ¬
"OK" default button 1 with icon 0
error number -128
else if nDocs is 0 then
set filePath to (choose file with prompt "Bitte das Excel-Dokument öffnen.") as Unicode text
open filePath
end if
try
tell workbook 1
tell sheet 1
set tmpList to value of used range
end tell
end tell
end try
end tell

-- das Ergebnis in zwei Listen aufteilen
set oldNames to {}
set newNames to {}
repeat with k from 3 to count of tmpList
set end of oldNames to item 2 of item k of my tmpList
set end of newNames to item 1 of item k of my tmpList
end repeat
end getNames

-- das Objekt behandeln
on processObject(aObject)
global oldNames
global newNames
set folPath to aObject as Unicode text
-- wenn der Pfad mit ":" endet, ist das Objekt ein Ordner
if folPath ends with ":" then
repeat with n from 1 to count oldNames
set curPath to folPath & item n of my oldNames
set newName to item n of my newNames
set newPath to folPath & newName
tell application "Finder"
if file curPath exists then
if not (file newPath exists) then
try
set name of file curPath to newName
set ctr to ctr + 1
end try
else
set probCtr to probCtr + 1
end if
else
set missCtr to missCtr + 1
end if
end tell
end repeat
else
activate me
display dialog "Nur einen *Ordner* droppen." buttons "OK" default button 1 with icon 2
error number -128
end if
end processObject

-- den Anwender informieren
on infUser()
activate me
if ctr is 0 then
display dialog "Fertig." & return & return & "Keine Dateien umbenannt." buttons ¬
"OK" default button 1 with icon 2
else if ctr is 1 then
display dialog "Fertig." & return & return & "Nur eine Datei ist umbenannt." buttons ¬
"OK" default button 1 with icon 1 giving up after 5
else
display dialog "Fertig." & return & return & ctr & " Dateien sind umbenannt." buttons ¬
"OK" default button 1 with icon 1 giving up after 5
end if
if missCtr is 1 then
display dialog "Eine Datei nicht gefunden." buttons "OK" default button 1 with icon 2
else if missCtr is greater than 1 then
display dialog "" & missCtr & " Dateien nicht gefunden." buttons "OK" default button 1 with icon 2
end if
if probCtr is 1 then
display dialog "Eine Datei nicht umbenannt." & return & return & ¬
"Der neue Name existiert schon." buttons "OK" default button 1 with icon 2
else if probCtr is greater than 1 then
display dialog "" & probCtr & " Dateien nicht umbenannt." & return & return & ¬
"Die neuen Namen existieren schon." buttons "OK" default button 1 with icon 2
end if
end infUser

Ich habe Excel nur unter "Snow Leopard" installiert. Für "Lion", "Mountain Lion" und "Mavericks" habe ich mir ein Testscript gemacht, in welchem die alten und neuen Namen im Code aufgelistet sind. Mit allen Systemversionen funktionierte das Droplet ohne jede Änderung.

Achtung: Immer ein Backup der Dateien zur Hand haben.

Ich hoffe, dass es wie erwartet funktionieren wird.

Gruss, Hans

pdf Dateien anhand einer Excel Tabelle umbenennen???

kkauer
Beiträge gesamt: 661

10. Mär 2014, 17:35
Bewertung:

gelesen: 29722

Beitrag als Lesezeichen
Ich verstehe den Workflow nicht wirklich: Wäre es nicht effektiver, die richtigen Benennungen direkt beim Export aus Indesign oder wenigstens beim Aufteilen der Seiten aus/in Acrobat anzuwenden?

pdf Dateien anhand einer Excel Tabelle umbenennen???

meister eder
Beiträge gesamt: 1114

19. Mär 2014, 21:13
Bewertung:

gelesen: 29649

Beitrag als Lesezeichen
Hallo Hans,

herzlichen Dank, das Script funktioniert nun (neu abgespeichert) perfekt und auf Anhieb!

Durch die Kombination der Exceltabelle mutiert das Script gerade zur Allzweckwaffe und ersetzt mir zum Teil meine Heliosfunktionalität!

Danke Dir für die schnelle und vor allen Dingen kompetente Unterstützung!

Aleks
----------------
Wer nicht fragt, bekommt keine Antwort!

pdf Dateien anhand einer Excel Tabelle umbenennen???

Mesut Okyay
Beiträge gesamt: 3

22. Mai 2014, 09:47
Bewertung:

gelesen: 29386

Beitrag als Lesezeichen
Hallo Hans,
ich wollte mich herzlich bedanken. Dein Droplet war genau das richtige Werkzeug für mich, dadurch habe ich mehrere Arbeitsstunden gespart.

Vielen Dank für Deine Mühe!

pdf Dateien anhand einer Excel Tabelle umbenennen???

Hans Haesler
  
Beiträge gesamt: 5826

22. Mai 2014, 15:30
Bewertung:

gelesen: 29363

Beitrag als Lesezeichen
Hallo Mesut,

herzlich willkommen im AppleScript-Forum auf HDS! :-)

Bitte sehr. Ich bedanke mich für die positive Rückmeldung. Gut zu wissen, dass das Script die Aufgabe korrekt ausführt.

Gruss, Hans

pdf Dateien anhand einer Excel Tabelle umbenennen???

wam
Beiträge gesamt: 2

7. Okt 2014, 08:54
Bewertung:

gelesen: 28797

Beitrag als Lesezeichen
Hallo,

ich bin beim Googeln auf diese Seite gestoßen. Da ich ein ähnliches Problem habe, wollte ich dieses Droplet gleich einmal ausprobieren - und bin kläglich gescheitert.
Außer dem Hinweis "Quellordner auf dieses Icon ziehen" bekomme ich keinerlei Reaktion. Allerdings weiß ich auch nicht, was ich falsch gemacht habe:
- Code in Automator als APP abgespeichert
- Exceldatei erstellt: ab 3. Zeile, Spalte A: neue Dateinamen; Spalte B: alte Dateinamen
- Exceldatei geöffnet
- Quellordner (Ordner mit umzubenennenden PDFs auf das Droplet gezogen

Werner

pdf Dateien anhand einer Excel Tabelle umbenennen???

Hans Haesler
  
Beiträge gesamt: 5826

7. Okt 2014, 10:41
Bewertung:

gelesen: 28767

Beitrag als Lesezeichen
Hallo Werner,

herzlich willkommen im AppleScript-Forum auf HDS! :-)

Versuche es bitte mal ohne Automator.

So sollte es klappen:
- AppleScript-Editor starten.
- Im Forum die Code-Zeilen auswählen, kopieren ...
- ... und in ein neues Fenster des AppleScript-Editors einfügen.
- Speichern: Einen Namen eintippen ...
- ... und beim lokalen Menü "Dateiformat" den Artikel "Programm" wählen.

Das Ergebnis ist ein Droplet, auf dessen Icon Du den Ordner ziehen kannst.

Ich bin gerade unterwegs und kann erst abends bessere Ratschläge erteilen.

Gruss, Hans

pdf Dateien anhand einer Excel Tabelle umbenennen???

wam
Beiträge gesamt: 2

7. Okt 2014, 13:18
Bewertung:

gelesen: 28686

Beitrag als Lesezeichen
Hallo

: So sollte es klappen:
: - AppleScript-Editor starten.

das wars!
Jetzt läuft es! Danke!

Werner

pdf Dateien anhand einer Excel Tabelle umbenennen???

mgrams
Beiträge gesamt: 28

25. Feb 2016, 09:33
Bewertung:

gelesen: 26349

Beitrag als Lesezeichen
Hallo Hans,

ich bin zufällig auf dieses Script zum Umbenennen von PDF Dateien gestoßen und finde es sehr brauchbar. Zwei Fragen hätte ich dann aber doch:
1. Ist es zwingend notwendig, in der Excel-Liste mit der Zeile 3 zu beginnen?
In Zeile 2 nach einer Kopfzeile fände ich angenehmer.
Und die Spalten für "alt" und "neu" eventuell tauschen.

Und 2. Muss es denn unbedingt mit der Droplet-Funktion angestossen werden?
Ein ausführbares Programm, wenn ein Ordner Daten erhält, sollte doch auch gehen (z.B. per FolderActionScript)

Viele Grüße, Michael
mg

pdf Dateien anhand einer Excel Tabelle umbenennen???

Hans Haesler
  
Beiträge gesamt: 5826

25. Feb 2016, 10:16
Bewertung:

gelesen: 26329

Beitrag als Lesezeichen
Hallo Michael,

1. Die Startzeile 3 entspricht dem Excel-Dokument des Hilfesuchenden vor zwei Jahren.
Diese kann ohne weiteres Deinem Dokument angepasst werden: ... from 2 to count of ...
Dasselbe gilt für "neu | alt". Für Dich die Zahlen 1 und 2 austauschen.

Code
repeat with k from 2 to count of tmpList  
set end of oldNames to item 1 of item k of my tmpList
set end of newNames to item 2 of item k of my tmpList
end repeat

2. Ein Droplet ist doch benutzerfreundlich. Zudem zuverlässiger als eine Folder-Action.

Gruss, Hans

pdf Dateien anhand einer Excel Tabelle umbenennen???

mgrams
Beiträge gesamt: 28

25. Feb 2016, 10:37
Bewertung:

gelesen: 26314

Beitrag als Lesezeichen
Hallo Hans,

vielen Dank für die schnelle Antwort. Die unter 1. geführten Codezeilen hatte ich gesehen. Ich wollte nur wissen, ob eventuell ein ganz spezieller Grund für die Anordnung vorliegt. So flexibel gehalten ist es natürlich gut.

Zu 2. Natürlich ist ein Droplet benutzerfreundlich. Ich arbeite halt ab und zu mit überwachten Ordnern, wo Leute Dateien ablegen können, die dann ohne mein Zutun im Hintergrund verarbeitet werden. Von daher die Frage, ist in dem Fall aber nicht unbedingt nötig.

Danke und viele Grüße, Michael
mg

pdf Dateien anhand einer Excel Tabelle umbenennen???

JoZap
Beiträge gesamt: 2

9. Okt 2022, 14:39
Bewertung:

gelesen: 15429

Beitrag als Lesezeichen
Hallo Hans,
ich bin auf dein 2014 geschriebenes Script gestoßen, weil ich ein ähnliches Problem habe. Nur müssten anhand einer Excel Tabelle keine pdfs sondern jpgs umbenannt werden.
Die Excel-Tabelle und das Droplet sind erstellt, nur endet der Vorgang mit dem Dialog „Keine Dateien umbenannt“
Ich habe das ganze auf einem älteren MacBook Air mit macOS Sierra 10.12.6 laufen.
Liegt es an den jpg‘s? Ich sehe im Script aber keinen Hinweis, dass es dringend pdf‘s sein müssten.
Beste Grüße
Hannes

pdf Dateien anhand einer Excel Tabelle umbenennen???

Hans Haesler
  
Beiträge gesamt: 5826

9. Okt 2022, 20:56
Bewertung:

gelesen: 15376

Beitrag als Lesezeichen
Hallo Hannes,

herzlich willkommen im AppleScript-Forum auf "HilfDirSelbst"! :-)

Es können beliebige Dateien sein. Aber das Excel-Dokument muss die kompletten Namen samt Endungen enthalten: Neu.jpg | Alt.jpg

Ich habe ein vorbereitetes Excel-Dokument offen und einen Ordner mit fünf JPG-Dateien auf das Icon des Droplets gezogen. Ergebnis: Alle Dateien sind wie erwartet umbenannt worden.

Damit wir hoffentlich herausfinden können, weshalb es bei Dir nicht funktioniert, habe ich den Code etwas abgeändert:

Code
(*  
Dateien_umbenennen_01d.app
Dieses Script benennt Dateien anhand eines Excel-Dokumentes um.
© 09.10.2022 / Hans Häsler, Châtelard 52, CH-1018 Lausanne
*)

global ctr
global folPath
global oldNames
global newNames
global missCtr
global probCtr

-- Variablen vorbereiten
set ctr to 0
set missCtr to 0
set probCtr to 0
-- den Handler aufrufen, welcher prüft, ob Excel läuft
testApp()
-- den Handler aufrufen, welcher die Namen auflistet
getNames()
-- das Ergebnis prüfen
set nOld to count of oldNames
set nNew to count of newNames
if nOld is 0 then
activate me
display dialog "Das Excel-Dokument enthält" & return & "keine \"alten\" Namen." buttons ¬
"OK" default button 1 with icon 0
error number -128
end if
if nNew is 0 then
activate me
display dialog "Das Excel-Dokument enthält" & return & "keine \"neuen\" Namen." buttons ¬
"OK" default button 1 with icon 0
error number -128
end if
-- den Inhalt der Namenslisten prüfen
if oldNames contains "" then
activate me
display dialog "Die \"alten\" Namen enthalten ein leeres Feld." buttons ¬
"OK" default button 1 with icon 0
error number -128
else if newNames contains "" then
activate me
display dialog "Die \"neuen\" Namen enthalten ein leeres Feld." buttons ¬
"OK" default button 1 with icon 0
error number -128
end if
-- den Ordner wählen lassen ...
activate me
set curFolder to (choose folder with prompt "Bitte einen Ordner wählen.") as Unicode text
-- ... und diesen zum Handler 'processObject' schicken
processObject(curFolder)
--den Handler aufrufen, welcher den Anwender informiert
infUser()

--///////////////////////////////////////////////////////////////////////////////////////
-- die Handler
--///////////////////////////////////////////////////////////////////////////////////////

-- der Handler, welcher prüft, ob Excel läuft
on testApp()
tell application "System Events"
activate
set curProc to (name of every process) as string
end tell
if curProc does not contain "Microsoft Excel" then
activate me
display dialog "Bitte \"Microsoft Excel\" starten." buttons "OK" default button 1 with icon 2
error number -128
end if
end testApp

-- alte und neue Namen auflisten
on getNames()
global tmpList
tell application "Microsoft Excel"
activate
set nDocs to count windows
if nDocs is greater than 1 then
display dialog "Es darf nur *ein* Excel-Dokument geöffnet sein." buttons ¬
"OK" default button 1 with icon 0
error number -128
else if nDocs is 0 then
set filePath to (choose file with prompt "Bitte das Excel-Dokument öffnen.") as Unicode text
open filePath
end if
try
tell workbook 1
tell sheet 1
set tmpList to value of used range
end tell
end tell
end try
end tell

-- das Ergebnis in zwei Listen aufteilen
set oldNames to {}
set newNames to {}
repeat with k from 3 to count of tmpList
set end of oldNames to item 2 of item k of my tmpList
set end of newNames to item 1 of item k of my tmpList
end repeat
end getNames

-- das Objekt behandeln
on processObject(aObject)
global oldNames
global newNames
set folPath to aObject as Unicode text
-- wenn der Pfad mit ":" endet, ist das Objekt ein Ordner
if folPath ends with ":" then
repeat with n from 1 to count oldNames
set curPath to folPath & item n of my oldNames
set newName to item n of my newNames
set newPath to folPath & newName
tell application "Finder"
if file curPath exists then
if not (file newPath exists) then
try
set name of file curPath to newName
set ctr to ctr + 1
end try
else
set probCtr to probCtr + 1
end if
else
set missCtr to missCtr + 1
end if
end tell
end repeat
else
activate me
display dialog "Nur einen *Ordner* droppen." buttons "OK" default button 1 with icon 2
error number -128
end if
end processObject

-- den Anwender informieren
on infUser()
activate me
if ctr is 0 then
display dialog "Fertig." & return & return & "Keine Dateien umbenannt." buttons ¬
"OK" default button 1 with icon 2
else if ctr is 1 then
display dialog "Fertig." & return & return & "Nur eine Datei ist umbenannt." buttons ¬
"OK" default button 1 with icon 1 giving up after 5
else
display dialog "Fertig." & return & return & ctr & " Dateien sind umbenannt." buttons ¬
"OK" default button 1 with icon 1 giving up after 5
end if
if missCtr is 1 then
display dialog "Eine Datei nicht gefunden." buttons "OK" default button 1 with icon 2
else if missCtr is greater than 1 then
display dialog "" & missCtr & " Dateien nicht gefunden." buttons "OK" default button 1 with icon 2
end if
if probCtr is 1 then
display dialog "Eine Datei nicht umbenannt." & return & return & ¬
"Der neue Name existiert schon." buttons "OK" default button 1 with icon 2
else if probCtr is greater than 1 then
display dialog "" & probCtr & " Dateien nicht umbenannt." & return & return & ¬
"Die neuen Namen existieren schon." buttons "OK" default button 1 with icon 2
end if
end infUser

– Als normales Script speichern.
– Das Excel-Dokument öffnen.
– Im Script-Editor das Fenster "Verlauf des Event-Protokolls" öffnen.
– Das Script starten.
– Den Ordner auswählen und mit Klick auf "Wählen" bestätigen.

Zuletzt den Inhalt des Event-Protokolls auswählen, kopieren und mir zustellen.
Entweder als Datei oder einsetzen in eine E-Mail oder in eine Persönliche Nachricht.

Gruss,
Hans

pdf Dateien anhand einer Excel Tabelle umbenennen???

JoZap
Beiträge gesamt: 2

10. Okt 2022, 08:46
Bewertung:

gelesen: 9424

Beitrag als Lesezeichen
Hallo Hans,
vielen Dank für deine prompte Antwort!
Nachdem ich mir das Protokoll angeschaut habe, war klar, dass die alten Namen in der Excel Tabelle zwar nach dem Schema 0001.jpg, 0002.jpg, 0003.jpg … dargestellt wurden, aber durch das Script als 1.0, 2.0, 3.0, … gelesen und daher nicht erkannt wurden.
Vermutlich weil ich für die laufenden Nummern in der Excel Spalte B eine eigene Benutzerdefinierte Zellen-Formatierung erstellt hatte. Nachdem ich diese geändert habe, läuft dein Script perfekt und die Bilder werden umbenannt.
Tausend Dank für deine schnelle Hilfe und einen guten Wochenstart!
Hannes

pdf Dateien anhand einer Excel Tabelle umbenennen???

Hans Haesler
  
Beiträge gesamt: 5826

10. Okt 2022, 09:12
Bewertung:

gelesen: 9418

Beitrag als Lesezeichen
Hallo Hannes,

bitte sehr, gerne geschehen.

Super, dass das Umbenennen nun funktioniert. Und Respekt, dass Du es – ganz nach dem Motto des Forums (= "HilfDirSelbst") – geschafft hast, die Ursache zu erkennen und die Abhilfe vorzunehmen!

Gruss,
Hans