Seite 1 von 1
Makro auf alle Dateien im Ordner anwenden
Verfasst: Do, 08.01.2015 14:11
von hildebfl
Hallo zusammen und schonmal vielen Dank, für die ganzen Tipps die ich als Mitleser abgreifen konnte.
Jetzt habe ich aber ein Problem, dass ich so bisher nicht lösen konnte.
Ich habe ein Makro geschrieben, dass eine .rpt-Datei über den OO-Writer nach meinen Wünschen formatiert und als .txt-Datei abspeichert. Dieses Makro muss ich jedoch auf ungefähr 800 Dateien anwenden und der Durchlauf pro Datei dauert ungefähr sieben Minuten. Das würde ich gerne automatisieren. dabei habe ich mir folgenden ablauf vorgestellt:
- 1.Datei öffnen (alle Dateien sind in einem Ordner, alle haben die Endung rpt)
- Makro RPT_zu_Text ausführen
- Datei Schließen
- nächste Datei öffnen
usw.
Ist so ein Makro für einen Anfänger realisierbar oder hat wer Tipps? In der Suche hat mir leider nichts wirklich weitergeholfen.
Schonmal vielen Dank für alle konstruktive Antworten!
Re: Makro auf alle Dateien im Ordner anwenden
Verfasst: Do, 08.01.2015 16:04
von balu
Hallo hildebfl,
Ist so ein Makro für einen Anfänger realisierbar
Weiss ich nicht, da ich nicht weiß wie Du dein Makro erstellt hast; Makrorecorder oder direkt programmiert.
hat wer Tipps?
Ändere und ergänze dein bisheriges Makro, und zwar nach folgendem Prinzip:
- Makro öffnet die zu bearbeitende Datei aber mit dem Status "hidden"
- Die Datei wird vom Makro bearbeitet, und anschließend gespeichert und geschlossen
- Die nächste Datei wird geöffnet
- ....
Da Du ja keine Beispieldatei mit deinem bisherigen Makro, oder zumindest den Makro-Code, hier nicht zeigst, kann ich erstmal nicht mehr sagen. Wenn Du mehr wissen willst, dann mußt Du auch mehr infos geben.
Gruß
balu
Re: Makro auf alle Dateien im Ordner anwenden
Verfasst: Do, 08.01.2015 16:07
von Karolus
Hallo
Zeig doch mal den Code der eine .rpt "konvertiert".
Wie groß ist so eine .rpt im Schnitt, kanst du die in ein zip-Archiv packen zusammen mit der daraus resultierenden .txt ??
Karolus
Re: Makro auf alle Dateien im Ordner anwenden
Verfasst: Do, 08.01.2015 17:20
von hildebfl
Vielleicht sehe ich den Wald vor lauter Bäumen nicht. Deswegen gehe ich mal genauer auf mein Problem ein. Denn meine Lösung kommt mir relativ umständlich vor.
Die .rpt Dateien kann man normal mit dem Writer oder Editor öffnen. Die Dateien sind ungefähr 1 MB groß und ist so aufgebaut mit 20000 Zeilen
A1 B1 C1 D1 E1 F1 G1 H1 I1
J1 K1
A2 B2 C2 D2 E2 F2 G2 H2 I2
J2 K2
usw.
In dieser Form kann ich die Daten aber nicht in eine Calc-Tabelle umwandeln. Also habe ich die Zeilenumbrüche durch den Buchstaben Q ersetzt und danach das eine Q plus 7 Leerzeichen in ein Leerzeichen und die restlichen Q´s wieder zurück in Umbrüche.

=)
Dann sieht die Tabelle so aus und kann in Calc übernommen werden:
A1 B1 C1 D1 E1 F1 G1 H1 I1 J1 K1
A2 B2 C2 D2 E2 F2 G2 H2 I2 J2 K2
Eine andere Lösung ist mir irgendwie nicht eingefallen und die konnte ich sogar mit den recorder aufnehmen.
Re: Makro auf alle Dateien im Ordner anwenden
Verfasst: Do, 08.01.2015 17:32
von Karolus
Hallo
Ich kann mit deiner Beschreibung in der Form überhaupt nichts anfangen, kannst du wenigstens mal die Beispielsdaten innerhalb von
tags[/code] einfügen.
Karolus
Re: Makro auf alle Dateien im Ordner anwenden
Verfasst: Do, 08.01.2015 18:12
von clag
Hallo hildebfl,
habe versucht deine ersten Wunsch umzusetzen
erstelle dir eine Datei "liste.txt" mit allen Dateinamen die du bearbeiten möchtest
edit: benenne die die Datein
*.rpt zuvor in
*.txt um, damit Writer beim öffnen nicht stolpert
auf der comandozeile im entsprechenden Pfad z.B. so
ersetze mein
g:\Test\ durch deinen Pfad
ersetze mein
print " done " durch deinen Makronamen im selben Module
Code: Alles auswählen
Sub LoadFileListe
dim myFileProp() as new com.sun.star.beans.PropertyValue
sFilename = "g:\Test\liste.txt"
iNumber = Freefile
Open sFileName For Input As iNumber
While Not EOF(iNumber)
Line Input #iNumber, sLine
sFile = "g:\Test\" & sLine
Url=converttourl( sFile )
oDoc = StarDesktop.loadComponentFromURL(Url, "_blank", 0, myFileProp() )
print " done " ' oder Makroname
oDoc.store()
odoc.close(false)
wait 500
Wend
Close #iNumber
msgbox "Ende Alle Dateien durch"
End Sub
dann sollte es laufen wie du es dir gewünscht hast
edit:
du solltest die Datein
*.rpt zuvor in
*.txt umbenennen damit Writer nicht stolpert
Re: Makro auf alle Dateien im Ordner anwenden
Verfasst: Do, 08.01.2015 20:16
von hildebfl
Schonmal vielen Dank für eure Hilfe.
Bei deiner Lösung clag kommt in der Zeile:
Code: Alles auswählen
oDoc = StarDesktop.loadComponentFromURL(Url, "_blank", 0, myFileProp() )
der BASIC-Laufzeitfehler:
Code: Alles auswählen
Es ist eine Exception aufgetreten
Type: com.sun.star.lang.IllegalArgumentException
Message: URL seems to be an unsopported one.
Hier ist das komplette Makro
Code: Alles auswählen
Sub LoaodFileListe
dim myFileProp() as new com.sun.star.beans.PropertyValue
sFilename = "C:\Users\B\Desktop\Tensor\Liste.txt"
iNumber = Freefile
Open sFileName For Input As iNumber
While Not EOF(iNumber)
Line Input #iNumber, sLine
sFile = "C:\Users\B\Desktop\Tensor\Liste.txt" & sLine ' & ""
Url=converttourl( sFile )
oDoc = StarDesktop.loadComponentFromURL(Url, "_blank", 0, myFileProp() )
RPT_zu_Text
oDoc.store()
odoc.close(false)
wait 500
Wend
Close #iNumber
msgbox "Ende Alle Dateien durch"
End Sub
sub RPT_zu_Text
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
rem ----------------------------------------------------------------------
dim args2(18) as new com.sun.star.beans.PropertyValue
args2(0).Name = "SearchItem.StyleFamily"
args2(0).Value = 2
args2(1).Name = "SearchItem.CellType"
args2(1).Value = 0
args2(2).Name = "SearchItem.RowDirection"
args2(2).Value = true
args2(3).Name = "SearchItem.AllTables"
args2(3).Value = false
args2(4).Name = "SearchItem.Backward"
args2(4).Value = false
args2(5).Name = "SearchItem.Pattern"
args2(5).Value = false
args2(6).Name = "SearchItem.Content"
args2(6).Value = false
args2(7).Name = "SearchItem.AsianOptions"
args2(7).Value = false
args2(8).Name = "SearchItem.AlgorithmType"
args2(8).Value = 1
args2(9).Name = "SearchItem.SearchFlags"
args2(9).Value = 65536
args2(10).Name = "SearchItem.SearchString"
args2(10).Value = "$"
args2(11).Name = "SearchItem.ReplaceString"
args2(11).Value = "Q"
args2(12).Name = "SearchItem.Locale"
args2(12).Value = 255
args2(13).Name = "SearchItem.ChangedChars"
args2(13).Value = 2
args2(14).Name = "SearchItem.DeletedChars"
args2(14).Value = 2
args2(15).Name = "SearchItem.InsertedChars"
args2(15).Value = 2
args2(16).Name = "SearchItem.TransliterateFlags"
args2(16).Value = 1280
args2(17).Name = "SearchItem.Command"
args2(17).Value = 3
args2(18).Name = "Quiet"
args2(18).Value = true
dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args2())
rem ----------------------------------------------------------------------
dim args3(18) as new com.sun.star.beans.PropertyValue
args3(0).Name = "SearchItem.StyleFamily"
args3(0).Value = 2
args3(1).Name = "SearchItem.CellType"
args3(1).Value = 0
args3(2).Name = "SearchItem.RowDirection"
args3(2).Value = true
args3(3).Name = "SearchItem.AllTables"
args3(3).Value = false
args3(4).Name = "SearchItem.Backward"
args3(4).Value = false
args3(5).Name = "SearchItem.Pattern"
args3(5).Value = false
args3(6).Name = "SearchItem.Content"
args3(6).Value = false
args3(7).Name = "SearchItem.AsianOptions"
args3(7).Value = false
args3(8).Name = "SearchItem.AlgorithmType"
args3(8).Value = 1
args3(9).Name = "SearchItem.SearchFlags"
args3(9).Value = 65536
args3(10).Name = "SearchItem.SearchString"
args3(10).Value = "Q "
args3(11).Name = "SearchItem.ReplaceString"
args3(11).Value = " "
args3(12).Name = "SearchItem.Locale"
args3(12).Value = 255
args3(13).Name = "SearchItem.ChangedChars"
args3(13).Value = 2
args3(14).Name = "SearchItem.DeletedChars"
args3(14).Value = 2
args3(15).Name = "SearchItem.InsertedChars"
args3(15).Value = 2
args3(16).Name = "SearchItem.TransliterateFlags"
args3(16).Value = 1280
args3(17).Name = "SearchItem.Command"
args3(17).Value = 3
args3(18).Name = "Quiet"
args3(18).Value = true
dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args3())
rem ----------------------------------------------------------------------
dim args4(18) as new com.sun.star.beans.PropertyValue
args4(0).Name = "SearchItem.StyleFamily"
args4(0).Value = 2
args4(1).Name = "SearchItem.CellType"
args4(1).Value = 0
args4(2).Name = "SearchItem.RowDirection"
args4(2).Value = true
args4(3).Name = "SearchItem.AllTables"
args4(3).Value = false
args4(4).Name = "SearchItem.Backward"
args4(4).Value = false
args4(5).Name = "SearchItem.Pattern"
args4(5).Value = false
args4(6).Name = "SearchItem.Content"
args4(6).Value = false
args4(7).Name = "SearchItem.AsianOptions"
args4(7).Value = false
args4(8).Name = "SearchItem.AlgorithmType"
args4(8).Value = 1
args4(9).Name = "SearchItem.SearchFlags"
args4(9).Value = 65536
args4(10).Name = "SearchItem.SearchString"
args4(10).Value = "Q"
args4(11).Name = "SearchItem.ReplaceString"
args4(11).Value = "\n"
args4(12).Name = "SearchItem.Locale"
args4(12).Value = 255
args4(13).Name = "SearchItem.ChangedChars"
args4(13).Value = 2
args4(14).Name = "SearchItem.DeletedChars"
args4(14).Value = 2
args4(15).Name = "SearchItem.InsertedChars"
args4(15).Value = 2
args4(16).Name = "SearchItem.TransliterateFlags"
args4(16).Value = 1280
args4(17).Name = "SearchItem.Command"
args4(17).Value = 3
args4(18).Name = "Quiet"
args4(18).Value = true
dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args4())
rem ----------------------------------------------------------------------
dim args5(18) as new com.sun.star.beans.PropertyValue
args5(0).Name = "SearchItem.StyleFamily"
args5(0).Value = 2
args5(1).Name = "SearchItem.CellType"
args5(1).Value = 0
args5(2).Name = "SearchItem.RowDirection"
args5(2).Value = true
args5(3).Name = "SearchItem.AllTables"
args5(3).Value = false
args5(4).Name = "SearchItem.Backward"
args5(4).Value = false
args5(5).Name = "SearchItem.Pattern"
args5(5).Value = false
args5(6).Name = "SearchItem.Content"
args5(6).Value = false
args5(7).Name = "SearchItem.AsianOptions"
args5(7).Value = false
args5(8).Name = "SearchItem.AlgorithmType"
args5(8).Value = 1
args5(9).Name = "SearchItem.SearchFlags"
args5(9).Value = 65536
args5(10).Name = "SearchItem.SearchString"
args5(10).Value = " "
args5(11).Name = "SearchItem.ReplaceString"
args5(11).Value = " "
args5(12).Name = "SearchItem.Locale"
args5(12).Value = 255
args5(13).Name = "SearchItem.ChangedChars"
args5(13).Value = 2
args5(14).Name = "SearchItem.DeletedChars"
args5(14).Value = 2
args5(15).Name = "SearchItem.InsertedChars"
args5(15).Value = 2
args5(16).Name = "SearchItem.TransliterateFlags"
args5(16).Value = 1280
args5(17).Name = "SearchItem.Command"
args5(17).Value = 3
args5(18).Name = "Quiet"
args5(18).Value = true
dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args5())
rem ----------------------------------------------------------------------
dim args6(18) as new com.sun.star.beans.PropertyValue
args6(0).Name = "SearchItem.StyleFamily"
args6(0).Value = 2
args6(1).Name = "SearchItem.CellType"
args6(1).Value = 0
args6(2).Name = "SearchItem.RowDirection"
args6(2).Value = true
args6(3).Name = "SearchItem.AllTables"
args6(3).Value = false
args6(4).Name = "SearchItem.Backward"
args6(4).Value = false
args6(5).Name = "SearchItem.Pattern"
args6(5).Value = false
args6(6).Name = "SearchItem.Content"
args6(6).Value = false
args6(7).Name = "SearchItem.AsianOptions"
args6(7).Value = false
args6(8).Name = "SearchItem.AlgorithmType"
args6(8).Value = 1
args6(9).Name = "SearchItem.SearchFlags"
args6(9).Value = 65536
args6(10).Name = "SearchItem.SearchString"
args6(10).Value = " "
args6(11).Name = "SearchItem.ReplaceString"
args6(11).Value = " "
args6(12).Name = "SearchItem.Locale"
args6(12).Value = 255
args6(13).Name = "SearchItem.ChangedChars"
args6(13).Value = 2
args6(14).Name = "SearchItem.DeletedChars"
args6(14).Value = 2
args6(15).Name = "SearchItem.InsertedChars"
args6(15).Value = 2
args6(16).Name = "SearchItem.TransliterateFlags"
args6(16).Value = 1280
args6(17).Name = "SearchItem.Command"
args6(17).Value = 3
args6(18).Name = "Quiet"
args6(18).Value = true
dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args6())
rem ----------------------------------------------------------------------
dim args7(18) as new com.sun.star.beans.PropertyValue
args7(0).Name = "SearchItem.StyleFamily"
args7(0).Value = 2
args7(1).Name = "SearchItem.CellType"
args7(1).Value = 0
args7(2).Name = "SearchItem.RowDirection"
args7(2).Value = true
args7(3).Name = "SearchItem.AllTables"
args7(3).Value = false
args7(4).Name = "SearchItem.Backward"
args7(4).Value = false
args7(5).Name = "SearchItem.Pattern"
args7(5).Value = false
args7(6).Name = "SearchItem.Content"
args7(6).Value = false
args7(7).Name = "SearchItem.AsianOptions"
args7(7).Value = false
args7(8).Name = "SearchItem.AlgorithmType"
args7(8).Value = 1
args7(9).Name = "SearchItem.SearchFlags"
args7(9).Value = 65536
args7(10).Name = "SearchItem.SearchString"
args7(10).Value = " "
args7(11).Name = "SearchItem.ReplaceString"
args7(11).Value = " "
args7(12).Name = "SearchItem.Locale"
args7(12).Value = 255
args7(13).Name = "SearchItem.ChangedChars"
args7(13).Value = 2
args7(14).Name = "SearchItem.DeletedChars"
args7(14).Value = 2
args7(15).Name = "SearchItem.InsertedChars"
args7(15).Value = 2
args7(16).Name = "SearchItem.TransliterateFlags"
args7(16).Value = 1280
args7(17).Name = "SearchItem.Command"
args7(17).Value = 3
args7(18).Name = "Quiet"
args7(18).Value = true
dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args7())
rem ----------------------------------------------------------------------
dim args8(18) as new com.sun.star.beans.PropertyValue
args8(0).Name = "SearchItem.StyleFamily"
args8(0).Value = 2
args8(1).Name = "SearchItem.CellType"
args8(1).Value = 0
args8(2).Name = "SearchItem.RowDirection"
args8(2).Value = true
args8(3).Name = "SearchItem.AllTables"
args8(3).Value = false
args8(4).Name = "SearchItem.Backward"
args8(4).Value = false
args8(5).Name = "SearchItem.Pattern"
args8(5).Value = false
args8(6).Name = "SearchItem.Content"
args8(6).Value = false
args8(7).Name = "SearchItem.AsianOptions"
args8(7).Value = false
args8(8).Name = "SearchItem.AlgorithmType"
args8(8).Value = 0
args8(9).Name = "SearchItem.SearchFlags"
args8(9).Value = 65536
args8(10).Name = "SearchItem.SearchString"
args8(10).Value = "."
args8(11).Name = "SearchItem.ReplaceString"
args8(11).Value = ","
args8(12).Name = "SearchItem.Locale"
args8(12).Value = 255
args8(13).Name = "SearchItem.ChangedChars"
args8(13).Value = 2
args8(14).Name = "SearchItem.DeletedChars"
args8(14).Value = 2
args8(15).Name = "SearchItem.InsertedChars"
args8(15).Value = 2
args8(16).Name = "SearchItem.TransliterateFlags"
args8(16).Value = 1280
args8(17).Name = "SearchItem.Command"
args8(17).Value = 3
args8(18).Name = "Quiet"
args8(18).Value = true
dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args8())
rem ----------------------------------------------------------------------
dim args9(1) as new com.sun.star.beans.PropertyValue
args9(0).Name = "URL"
args9(0).Value = "file:///C:/Users/B/Desktop/Tensor/Word/N01_PEEK_Tensor_RadLi2.txt"
args9(1).Name = "FilterName"
args9(1).Value = "Text"
dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, args9())
end sub
Und hier die Liste.txt:
Code: Alles auswählen
N01_PEEK_Tensor_RadLi.txt
N01_PEEK_Tensor_RadLi2.txt
N01_PEEK_Tensor_RadRe.txt
N01_PEEK_Tensor_RadRe2.txt
N03_PEEK_TEnsor_Rad.txt
N03_PEEK_TEnsor_RadLi.txt
N03_PEEK_TEnsor_RadLi2.txt
N03_PEEK_TEnsor_RadRe.txt
N03_PEEK_TEnsor_RadRe2.txt
N04_PEEK_Tensor_Rad.txt
N04_PEEK_Tensor_RadLi.txt
N04_PEEK_Tensor_RadLi2.txt
N04_PEEK_Tensor_RadRe.txt
N04_PEEK_Tensor_RadRe2.txt
N05_PEEK_Tensor_Rad.txt
N05_PEEK_Tensor_RadLi.txt
N05_PEEK_Tensor_RadLi2.txt
N05_PEEK_Tensor_RadRe.txt
N05_PEEK_Tensor_RadRe2.txt
N06_PEEK_Tensor_Rad.txt
N06_PEEK_Tensor_RadLi.txt
N06_PEEK_Tensor_RadLi2.txt
N06_PEEK_Tensor_RadRe.txt
N06_PEEK_Tensor_RadRe2.txt
N07_PEEK_Tensor_Rad.txt
N07_PEEK_Tensor_RadLi.txt
N07_PEEK_Tensor_RadLi2.txt
N07_PEEK_Tensor_RadRe.txt
N07_PEEK_Tensor_RadRe2.txt
N08_PEEK_Tensor_Rad.txt
N08_PEEK_Tensor_RadLi.txt
N08_PEEK_Tensor_RadLi2.txt
N08_PEEK_Tensor_RadRe.txt
N08_PEEK_Tensor_RadRe2.txt
N09_PEEK_Tensor_Rad.txt
N09_PEEK_Tensor_RadLi.txt
N09_PEEK_Tensor_RadLi2.txt
N09_PEEK_Tensor_RadRe.txt
N09_PEEK_Tensor_RadRe2.txt
N10_PEEK_Tensor_Rad.txt
N10_PEEK_Tensor_RadLi.txt
N10_PEEK_Tensor_RadLi2.txt
N10_PEEK_Tensor_RadRe.txt
N10_PEEK_Tensor_RadRe2.txt
N11_PEEK_Tensor_Rad.txt
N11_PEEK_Tensor_RadLi.txt
N11_PEEK_Tensor_RadLi2.txt
N11_PEEK_Tensor_RadRe.txt
N11_PEEK_Tensor_RadRe2.txt
N12_PEEK_Tensor_Rad.txt
N12_PEEK_Tensor_RadLi.txt
N12_PEEK_Tensor_RadLi2.txt
N12_PEEK_Tensor_RadRe.txt
N12_PEEK_Tensor_RadRe2.txt
N13_PEEK_Tensor_Rad.txt
N13_PEEK_Tensor_RadLi.txt
N13_PEEK_Tensor_RadLi2.txt
N13_PEEK_Tensor_RadRe.txt
N13_PEEK_Tensor_RadRe2.txt
N14_PEEK_Tensor_Rad.txt
N14_PEEK_Tensor_RadLi.txt
N14_PEEK_Tensor_RadLi2.txt
N14_PEEK_Tensor_RadRe.txt
N14_PEEK_Tensor_RadRe2.txt
Re: Makro auf alle Dateien im Ordner anwenden
Verfasst: Do, 08.01.2015 20:24
von clag
Hallo hildebfl,
ist das erste Leerzeichen in der Liste Teil des Namen
und sieht die Liste exakt so aus?
Re: Makro auf alle Dateien im Ordner anwenden
Verfasst: Do, 08.01.2015 20:31
von hildebfl
Hallo clag,
das Leerzeichen ist in der Liste.txt nicht enthalten. Ja die Liste sieht genauso aus.
Gruß
Re: Makro auf alle Dateien im Ordner anwenden
Verfasst: Do, 08.01.2015 20:41
von clag
hallo hildebfl,
du hast einen Fehler eingebaut
Zeile 8
du hast dies
sFile = "C:\Users\B\Desktop\Tensor\Liste.txt " & sLine
so sollte es aussehen
sFile = "C:\Users\B\Desktop\Tensor\" & sLine
Re: Makro auf alle Dateien im Ordner anwenden
Verfasst: Do, 08.01.2015 20:57
von hildebfl
Oh man, manchmal ist man bzw. ich echt blind.
Aber vielen vielen Dank jetzt läuft alles genau so wie ich es mir vorgestellt habe.
Das hätte ich nie hinbekommen.
Viele Grüße
hildebfl
Re: Makro auf alle Dateien im Ordner anwenden
Verfasst: Do, 08.01.2015 21:03
von clag
hi
hildebfl hat geschrieben: jetzt läuft alles genau so wie ich es mir vorgestellt habe.
das ist gut
