Formatvorlage per Macro laden

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

seballa
**
Beiträge: 24
Registriert: So, 18.09.2005 10:38

Formatvorlage per Macro laden

Beitrag von seballa » Sa, 15.02.2020 11:26

Hallo,

ich öffne eine unformatierte Textdatei per Command Line .

Code: Alles auswählen

soffice.exe -n c:\path\filename.txt macro:///Standard.Format.Main --infilter="Text (encoded):UTF8" 
Damit die Datei direkt formatiert wird habe ich ein Makro aufgenommen, das bestimmte Textteile erkennt und dann die Absatzstile zuweist. Ich muss vorher allerdings mit der Hand meine Vorlage (die auch die Standardvorlage ist) mit den gewünschten Stilen laden. Diesen Schritt hat die Aufnahmefunktion nicht erkannt.

Kann ich das auch per Makro machen?

Danke
Seballa

Toxitom
********
Beiträge: 3660
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Formatvorlage per Macro laden

Beitrag von Toxitom » Sa, 15.02.2020 15:17

Hey Seballa,
..Kann ich das auch per Makro machen?
Ja, natürlich. Mit Makros kannst Du so zeimlich alles machen;)

Mit der Aufnahemfunktion allerdings nicht. Die ist sehr "beschränkt".

Wäre es aber nicht generell besser, gleich die gewünschten Formate in die Standardvorlage hinein zu packen? Dann könnteste Dir den Schritt über das Makro sparen.

Ansonsten: Poste mal Dein bisheriges Makro sowie Deine Wünsche hinsichtlich der Formate... dann gibt es bestimmt Hilfe hier:)

VG
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic

seballa
**
Beiträge: 24
Registriert: So, 18.09.2005 10:38

Re: Formatvorlage per Macro laden

Beitrag von seballa » Sa, 15.02.2020 16:45

Hallo Toxitom,

danke für die Antwort.
Wäre es aber nicht generell besser, gleich die gewünschten Formate in die Standardvorlage hinein zu packen? Dann könnteste Dir den Schritt über das Makro sparen.
Das war meine erste Idee, ich bin aber ein bisschen am Verzweifeln da es nicht wie erwartet funktioniert.
Ich habe eine Standvorlage erstellt und auch als Standard für Textdokumente gesetzt. Das funktioniertwunderbar für neue Dokumente aber nicht für eine bereits vorhandene TXT Datei, in dieser werden meine eigenen Vorlagen nicht angezeigt. Ich muss dann meine Vorlage per Hand laden.

Code: Alles auswählen

//Datei öffnen per batch datei und Makro automatisch auslösen
	-->soffice.exe -n c:\path\filename.txt macro:///Standard.Format.Main --infilter="Text (encoded):UTF8" 

//MEIN PROBLEM HIER MEINE ABSATZVORLAGEN SIND NICHT IM DER GEÖFFNETEN DATEI ENTHALTEN

//Mein aufgenommenes Makro:
	-->Markiere den gesamten Text 
	-->Benutze Absatzvorlage "MeinText"
	-->Suche alle Elemente mit dem String XXX in der Zeile
	-->Benutze Absatzvorlage "MeineÜberschrift"
	-->Ersetze alle XXX mit ""
Plan B wäre, ein neues Dokument zu öffnen und das Makro automatisch abzufeuern, dass dann den Text aus der Datei importiert, ich habe inzwischen zwei Stunden hier im Forum und im Internet gesucht und konnte es bisher nicht schaffen den Importfilter auf UTF8 zu setzten.

Code: Alles auswählen

Weg B
//Neues Dokument öffnen
	-->soffice.exe macro:///Standard.GetTextAndFormat.Main 
//Füge den die Txt Datei ein SCHEITERT DARAN DAS ICH DEN UTF8 Filter nicht gesetzt bekomme
	dim args2(1) as new com.sun.star.beans.PropertyValue
	args2(0).Name = "Name"	
	args2(0).Value = "file:///C:/Users/Dummy/Documents/filename.txt"
	args2(1).Name = "Filter"
	args2(1).Value = "Text (encoded):UTF8" //Wo ist mein Fehler TUT NICHTS!

	dispatcher.executeDispatch(document, ".uno:InsertDoc", "", 0, args2())
	
	MeinMakro...

seballa
**
Beiträge: 24
Registriert: So, 18.09.2005 10:38

Re: Formatvorlage per Macro laden

Beitrag von seballa » Sa, 15.02.2020 22:31

Es war ein langes rumprobieren, ich habe es dann mit Variante A hinbekommen:

Die Datei (in meinem Fall ist das eine PHP Webseite, die Daten aus einer Mysql Datenbank ausgibt) wird durch eine Batchdatei geladen und dabei direkt das Makro aufgerufen:

Code: Alles auswählen


	soffice.exe -n "c:\path\filename.txt" macro:///Standard.MeinMakro.Main --infilter="Text (encoded):UTF8" 

sub Main
rem define variables
	dim document   as object
	dim dispatcher as object

rem get access to the document
	document   = ThisComponent.CurrentController.Frame
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem Document mit den Templates in die Datei laden
	dim args2(1) as new com.sun.star.beans.PropertyValue
	args2(0).Name = "Name"
	args2(0).Value = "file:///C:/Path/to/tamplate/template.ott"
	args2(1).Name = "Filter"
	args2(1).Value = "writer8_template"

	dispatcher.executeDispatch(document, ".uno:InsertDoc", "", 0, args2())

rem Alles auswählen
dispatcher.executeDispatch(document, ".uno:SelectAll", "", 0, Array())

rem Set Template
dim args4(1) as new com.sun.star.beans.PropertyValue
	args4(0).Name = "Template"
	args4(0).Value = "myTemplateforText"
	args4(1).Name = "Family"
	args4(1).Value = 2

dispatcher.executeDispatch(document, ".uno:StyleApply", "", 0, args4())

rem Find all Lines containing XXX
	dim args5(21) 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.SearchFiltered"
	args5(4).Value = false
	args5(5).Name = "SearchItem.Backward"
	args5(5).Value = false
	args5(6).Name = "SearchItem.Pattern"
	args5(6).Value = false
	args5(7).Name = "SearchItem.Content"
	args5(7).Value = false
	args5(8).Name = "SearchItem.AsianOptions"
	args5(8).Value = false
	args5(9).Name = "SearchItem.AlgorithmType"
	args5(9).Value = 0
	args5(10).Name = "SearchItem.SearchFlags"
	args5(10).Value = 65536
	args5(11).Name = "SearchItem.SearchString"
	args5(11).Value = "XXX"
	args5(12).Name = "SearchItem.ReplaceString"
	args5(12).Value = ""
	args5(13).Name = "SearchItem.Locale"
	args5(13).Value = 255
	args5(14).Name = "SearchItem.ChangedChars"
	args5(14).Value = 2
	args5(15).Name = "SearchItem.DeletedChars"
	args5(15).Value = 2
	args5(16).Name = "SearchItem.InsertedChars"
	args5(16).Value = 2
	args5(17).Name = "SearchItem.TransliterateFlags"
	args5(17).Value = 1280
	args5(18).Name = "SearchItem.Command"
	args5(18).Value = 1
	args5(19).Name = "SearchItem.SearchFormatted"
	args5(19).Value = false
	args5(20).Name = "SearchItem.AlgorithmType2"
	args5(20).Value = 1
	args5(21).Name = "Quiet"
	args5(21).Value = true

	dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args5())

rem Set Template for Headline
	dim args6(1) as new com.sun.star.beans.PropertyValue
	args6(0).Name = "Template"
	args6(0).Value = "Headline"
	args6(1).Name = "Family"
	args6(1).Value = 2

	dispatcher.executeDispatch(document, ".uno:StyleApply", "", 0, args6())

rem same search but replace with empty string
	dim args7(21) 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.SearchFiltered"
	args7(4).Value = false
	args7(5).Name = "SearchItem.Backward"
	args7(5).Value = false
	args7(6).Name = "SearchItem.Pattern"
	args7(6).Value = false
	args7(7).Name = "SearchItem.Content"
	args7(7).Value = false
	args7(8).Name = "SearchItem.AsianOptions"
	args7(8).Value = false
	args7(9).Name = "SearchItem.AlgorithmType"
	args7(9).Value = 0
	args7(10).Name = "SearchItem.SearchFlags"
	args7(10).Value = 65536
	args7(11).Name = "SearchItem.SearchString"
	args7(11).Value = "XXX"
	args7(12).Name = "SearchItem.ReplaceString"
	args7(12).Value = ""
	args7(13).Name = "SearchItem.Locale"
	args7(13).Value = 255
	args7(14).Name = "SearchItem.ChangedChars"
	args7(14).Value = 2
	args7(15).Name = "SearchItem.DeletedChars"
	args7(15).Value = 2
	args7(16).Name = "SearchItem.InsertedChars"
	args7(16).Value = 2
	args7(17).Name = "SearchItem.TransliterateFlags"
	args7(17).Value = 1280
	args7(18).Name = "SearchItem.Command"
	args7(18).Value = 3
	args7(19).Name = "SearchItem.SearchFormatted"
	args7(19).Value = false
	args7(20).Name = "SearchItem.AlgorithmType2"
	args7(20).Value = 1
	args7(21).Name = "Quiet"
	args7(21).Value = true

	dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args7())


end sub



Antworten