Hallo Lilo,
mir ist eingefallen, dass ich bereits ein Makro habe, das ein Verzeichnis samt Unterordnern auflöst, also genau das, was dir zu dem von mir geschickten Makro noch fehlt.
Ich habe daraus jetzt ein vollständiges Programm gebastelt, das ein gewähltes Verzeichnis mit allen Unterordnern bearbeitet und jeweils die Automatik ausschaltet und das Dokument dann speichert. Den "Filter" in der Select-Case-Anweisung im zweiten Makro kannst du ggf. anpassen.
Achtung: es gibt einen Fehler, wenn eine der zu bearbeitenden Dateien geöffnet. Das ist zwar kein Problem, man schließt die Datei und lässt das Programm nochmals laufn, aber besser ist, vorher daran zu denken, denn es werden ja alle Dokumente erneut geändert, weil ich auf die Abfrage verzichtet habe, ob die Automatik schon aus ist; das kannst du ja nach Wunsch noch einbauen.
option explicit
Dim oSFA as object
Sub Verzeichnisbaum
Dim oDialog as Object
Dim sPfad as String
oDialog = CreateUnoService("com.sun.star.ui.dialogs.FolderPicker")
oDialog.setDescription("Bitte das Wurzel-Verzeichnis auswählen")
if oDialog.execute() then
sPfad = oDialog.Directory
end if
if sPfad = "/" then
MsgBox "nichts ausgewählt!"
Exit sub
end if
oSFA = createUnoService("com.sun.star.ucb.SimpleFileAccess")
Verzeichnisaufloesen(sPfad)
End Sub
sub Verzeichnisaufloesen(Pfad as string)
dim ListeVerz() as string
Dim PfadLokal as string
Dim obVerz as long, LaePfadLokal as long, i as long
Dim indLastFile as long, indLastFolder as long
dim arrPfad () as string
Pfadlokal = ConvertFromUrl(Pfad)
laePfadLokal = Len(PfadLokal)
ListeVerz = oSFA.getFolderContents(Pfad, TRUE)
obVerz = ubound(ListeVerz())
if obVerz = -1 then exit sub ' leeres Verzeichnis
' Dateien und/oder Ordner vorhanden
indLastFile = -1
indLastFolder = -1
for i = obVerz to 0 step -1
if oSFA.isFolder(ListeVerz(i)) then
if indlastFolder = -1 then indLastFolder = i
else if indLastFile = -1 then indLastFile = i
end if
if indLastFile >= 0 and indLastFolder >= 0 then exit for
next
' Dateien
for i = 0 to indLastFile
if not oSFA.isFolder(ListeVerz(i)) then
' msgbox ListeVerz(i)
arrPfad() = split(ListeVerz(i), ".")
Select Case arrPfad(UBound(arrPfad))
Case "odt", "ott"
AutoAus(ListeVerz(i))
Case Else
' msgbox ListeVerz(i)
end Select
ListeVerz(i) = ""
end if
next
' Ordner
for i = 0 to indLastFolder
if ListeVerz(i) <> "" then
Verzeichnisaufloesen(ListeVerz(i))
end if
next
end sub
Sub AutoAus (pfad as string)
Dim sURL as string
Dim oDoc as object
dim docArgs()
Dim Pstyles as object, style as object, i as long, upper as long
oDoc = StarDesktop.loadComponentFromURL(pfad, "_blank", 0, docArgs() )
PStyles = oDoc.StyleFamilies.getByName("ParagraphStyles")
upper = PStyles.Count - 1
for i = 0 to upper
style = PStyles.getByIndex(i)
style.isAutoUpdate = False
next
oDoc.store
oDoc.close(TRUE)
end sub
Gruß
Gerhard