[GastForen Programmierung/Entwicklung AppleScript Dateiliste mit Änderungsdatum aus Ordner in Excel

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Dateiliste mit Änderungsdatum aus Ordner in Excel

mb_new
Beiträge gesamt: 123

10. Mär 2022, 16:02
Beitrag # 1 von 6
Bewertung:
(6656 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Werte AppleScripter!

Ich möchte die Dateinamen und das dazugehörige Änderungsdatum von allen in einem Ordner liegenden Pdfs auslesen und in ein Excel Dokument bringen.

Ich schaffe es "unsauber" in ein Textdokument, aber dass ich das ins Excel bringe, daran bin ich gescheitert.

Grandios wäre noch, wenn das dann auch noch nach dem Datum (auf- oder absteigend) sortiert wäre. Das aber nur als Gimmick.

Eine generelle Frage noch: ich habe das Änderungsdatum ausgewählt um herauszufinden, wann die Datei in den Ordner gelegt wurde. Eigentlich möchte ich das Datum, wann die Datei in den Ordner gelegt wurde, also beim Mac "Hinzugefügt am". Doch dazu habe ich nichts herausgefunden, wie ich das Datum anspreche. Mit Änderungsdatum geht es aber auch, nur wenn jemand die Datei verändert zwischenzeitlich, stimmt es halt nicht mehr ganz.

Hier meine bisherigen Ansätze, die zu einem Textdokument führen, wo aber das Ergebnis unsauber ist und ich dann nicht sehe, welche Datei wann geändert wurde.

Code
set aFolder to (choose folder with prompt "Bitte einen Ordner wählen.") as Unicode text  

tell application "Finder"
set allFiles to files of folder aFolder

-- eine Liste mit Änderungsdatumvorbereiten
set dateList to {}
-- eine Schleife durch die Namen
repeat with n from 1 to count allFiles
-- das aktuelle Element
set curFile to item n of allFiles
--Änderungsdatum
set curDate to modification date of curFile

-- Datumsformat ändern
set curDay to text -2 thru -1 of ("0" & curDate's day)
set curMonth to text -2 thru -1 of ("0" & ((month of curDate) * 1))
set curYear to ((year of curDate) as text)

set newDate to curDay & "." & curMonth & "." & curYear

set end of dateList to newDate
end repeat


-- eine Liste mit Dateinamen vorbereiten
set nameList to {}
-- eine Schleife durch die Namen
repeat with n from 1 to count allFiles
-- das aktuelle Element
set curFile to item n of allFiles
--Änderungsdatum
set curName to name of curFile

set end of nameList to curName
end repeat

end tell

-- die Liste in einen String verwandeln
set AppleScript's text item delimiters to return
set dateString to every text item of dateList as string
set nameString to every text item of nameList as string
set AppleScript's text item delimiters to {""}


-- die Liste mit TextEdit anzeigen
tell application "TextEdit"
activate
make new document
set text of document 1 to "Pdfs wurden hinzugefügt am:" & return & dateString & nameString



Danke für eure Hilfe
X

Dateiliste mit Änderungsdatum aus Ordner in Excel

TMA
Beiträge gesamt: 399

11. Mär 2022, 08:45
Beitrag # 2 von 6
Beitrag ID: #582909
Bewertung:
(6617 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen,
hier mal eine schnelle, unoptimierte Version, die dir weiterhelfen sollte.

Es wird direkt in einer Schleife alles verarbeitet. Die Infos der aktuellen Datei werden dann direkt in eine CSV-Datei geschrieben, die du in einem Office Programm öffnen/importieren kannst.

Code
set aFolder to (choose folder with prompt "Bitte einen Ordner wählen.") as Unicode text 
set logFile to ((path to desktop) as string) & "dateiliste.csv"

tell application "Finder"
set allFiles to files of folder aFolder

-- eine Schleife durch die Namen
repeat with curFile in allFiles
--Änderungsdatum
set curDate to modification date of curFile
-- Dateiname
set curName to name of curFile

-- Datumsformat ändern
set curDay to text -2 thru -1 of ("0" & curDate's day)
set curMonth to text -2 thru -1 of ("0" & ((month of curDate) * 1))
set curYear to ((year of curDate) as text)
set newDate to curDay & "." & curMonth & "." & curYear

-- CSV-Zeile schreiben
my logString(curName & ";" & newDate, logFile)
end repeat
end tell

on logString(theString, logFile)
try
set logFile1 to quoted form of (POSIX path of logFile) as text
do shell script ("echo '" & theString & "' >> " & logFile1 as text)
return true
on error
return false
end try
end logString


Gruß
TMA


als Antwort auf: [#582908]

Dateiliste mit Änderungsdatum aus Ordner in Excel

Hans Haesler
  
Beiträge gesamt: 5826

11. Mär 2022, 10:11
Beitrag # 3 von 6
Beitrag ID: #582910
Bewertung:
(6591 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo mb_new,

mit einer Ordneraktion werden zwei Deiner Anforderungen erfüllt:
– herausfinden, wann die Datei in den Ordner gelegt wurde;
– die Sortierung.

Code
on adding folder items to this_folder after receiving fileList 
repeat with aFile in fileList
tell application "Finder" to set curName to name of aFile
if curName ends with ".pdf" then
# die aktuelle Zeit
set curDate to ((current date) as string)
# den aktuellen String zusammenfègen
set repString to curName & tab & curDate & return
# den Handler aufrufen
writeDate(repString)
end if
end repeat
end adding folder items to

on writeDate(repString)
set filePath to ((path to desktop as string) & "Rapport.txt")
try
open for access file filePath with write permission
write repString to file filePath starting at eof
close access file filePath
on error
try
close access file filePath
end try
end try
end writeDate

Die Textdatei kann bei Bedarf mit Excel geöffnet werden.

Gruss, Hans


als Antwort auf: [#582908]

Dateiliste mit Änderungsdatum aus Ordner in Excel

mb_new
Beiträge gesamt: 123

11. Mär 2022, 13:28
Beitrag # 4 von 6
Beitrag ID: #582915
Bewertung:
(6545 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Perfekt,
danke euch beiden für die Ansätze.
Ich muss da ein wenig probieren, welche Variante mit Anpassungen für mich am sinnvollsten ist.

Martin


als Antwort auf: [#582910]

Dateiliste mit Änderungsdatum aus Ordner in Excel

mb_new
Beiträge gesamt: 123

12. Mär 2022, 18:23
Beitrag # 5 von 6
Beitrag ID: #582928
Bewertung:
(6396 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo TMA!

Ich werde das über die csv-Datei lösen, da die Ordner laufend wechseln und somit die Ordneraktionen immer neu gesetzt werden müssten. Aber für die Ordneraktion hab ich auch Verwendung.

Frage an TMA:
Ich frage jetzt noch ein Datum/Stichtag ab.
Danach möchte ich mit einer Formel abgleichen, welche Dateien nach dem Stichtag erstellt wurden.

Datum "myStichtag" soll in Zelle C3 geschrieben weren und die Formel "myFormel" in C5.
Wie bringe ich die 2 Werte noch in die csv-Datei?

Code
set myDlg to display dialog "Stichtag eingeben: (z.B. 12.03.2022)" default answer "" buttons {"Abbrechen", "OK"} default button "OK" 
set myStichtag to text returned of myDlg

set myFormel to "=ZÄHLENWENN(B1:B14;\">=\"&C3)" as text


Ich habe es bis jett nur geschafft, indem ich die Datei öffne und die Daten reinschreiben lasse. Eleganter wäre es natülich, wenn die Daten gleich reingeschrieben werden, ohne öffnen.

Das war mein Ansatz:
Code
tell application "Microsoft Excel" 
activate
open logFile
delay 0.5
select sheet "dateiliste.csv"
select range "C3"
set value of active cell to myStichtag as text
select range "C5"
set value of active cell to myFormel
end tell



Noch eine weitere Frage: derzeit wird die csv-Datei "dateiliste.csv" erstellt. Das Tabellenblatt heisst ebenfalls "dateiliste.csv".
Ist es möglich, dass das Tabellenblatt wie der Ordner benannt ist, der abgefragt wird?

Und wäre es auch möglich, dass zu einem anderen Zeitpunkt ein 2. Ordner abgefragt wird, dessen Daten dann ebenfalls in die Datei "dateiliste.csv" aber dann in ein neues Tabellenblatt kommt?

Danke für eure Hilfe
Martin


als Antwort auf: [#582915]

Dateiliste mit Änderungsdatum aus Ordner in Excel

TMA
Beiträge gesamt: 399

14. Mär 2022, 08:36
Beitrag # 6 von 6
Beitrag ID: #582931
Bewertung:
(6275 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,
in dieser Version wird zumindest der gewählte Ordner als CSV-Dateiname gesetzt und das eingegebene Datum in Spalte 3 geschrieben.

Code
set aFolder to (choose folder with prompt "Bitte einen Ordner wählen.") as Unicode text 
tell application "Finder" to set folderName to name of folder (aFolder as string)

set logFile to ((path to desktop) as string) & folderName & ".csv"

set myDlg to display dialog "Stichtag eingeben: (z.B. 12.03.2022)" default answer "12.03.2022" buttons {"Abbrechen", "OK"} default button "OK"
set myStichtag to text returned of myDlg

tell application "Finder"
set allFiles to files of folder aFolder

-- eine Schleife durch die Namen
repeat with curFile in allFiles
--Änderungsdatum
set curDate to modification date of curFile
-- Dateiname
set curName to name of curFile

-- Datumsformat ändern
set curDay to text -2 thru -1 of ("0" & curDate's day)
set curMonth to text -2 thru -1 of ("0" & ((month of curDate) * 1))
set curYear to ((year of curDate) as text)
set newDate to curDay & "." & curMonth & "." & curYear

-- CSV-Zeile schreiben
my logString(curName & ";" & newDate & ";" & myStichtag, logFile)
end repeat
end tell

on logString(theString, logFile)
try
set logFile1 to quoted form of (POSIX path of logFile) as text
do shell script ("echo '" & theString & "' >> " & logFile1 as text)
return true
on error
return false
end try
end logString


Mir ist noch nicht ganz klar, warum du die Berechnung in Excel machen möchtest.

Im Script hast du beide Datumsangaben an der Hand und kannst somit direkt einen Vergleich machen. Das Ergebnis, wie auch immer du das aufbereiten möchtest, kannst du direkt als Spalte 4 mit in die CSV schreiben.

Zu Excel-Scripting kann ich dir nicht viel sagen, ich vermeide es wenn es geht.

Gruß
TMA


als Antwort auf: [#582928]
(Dieser Beitrag wurde von TMA am 14. Mär 2022, 08:38 geändert)
X