Makro: Basic-Extension und lesen von Datei aus der Extension

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

Moderator: Moderatoren

HardyH
Beiträge: 8
Registriert: Di, 24.03.2009 07:09

Makro: Basic-Extension und lesen von Datei aus der Extension

Beitrag von HardyH »

Hallo,

vieleicht kann mir hier jemand einen Hinweis geben?
Ich möchte in einer Extension eine Template-Datei packen und innerhalb der Extension mittels Basic weiterverarbeiten.
Mein Problem: ich kann dieses Template mit einpacken und installieren, aber irgendwie komme ich nicht dran ... :(

Hintergrund: Die Extension soll auf allen Plattformen laufen, auf denen auch OpenOffice läuft und das Auffinden der Template-Datei also auch möglichst Plattform-unabhängig ...

Wäre nett, wenn jemand eine Idee hat, meine bisherigen Suchen auch auf develepors.openoffice.org o.ä. usw. waren leider erfolglos,

Danke, HardyH
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Makro: Basic-Extension und lesen von Datei aus der Extension

Beitrag von komma4 »

Willkommen im Forum.
HardyH hat geschrieben:das Auffinden der Template-Datei also auch möglichst Plattform-unabhängig ...

Code: Alles auswählen

' http://www.oooforum.org/forum/viewtopic.phtml?t=66453
' JohnV 2007-03-11 6:27pm
Sub GetPaths
On Error goto ErrorEnd
Dim ar,c,p,iAns
ar = Array("Basic","AutoCorrect","AutoText","Backup","Gallery","Graphic","Work","Template","Temp")
GlobalScope.BasicLibraries.LoadLibrary("Tools")
For c = 0 to uBound(ar)
p = ar(c)
iAns = MsgBox (ConvertFromURL(GetPathSettings(p)),1)
If iAns = 2 then End
Next
End
ErrorEnd:
MsgBox "Can't find "& p
End Sub

Das hilft?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
HardyH
Beiträge: 8
Registriert: Di, 24.03.2009 07:09

Re: Makro: Basic-Extension und lesen von Datei aus der Extension

Beitrag von HardyH »

Danke, das hilft schon einmal ungemein weiter!
Der Pfad zur Extension ist bei "Template" dabei, jetzt bleibt nur noch die Frage, wie öffnen?

Dummerweise enthält der Pfad jetzt Systemabhängige Trennzeichen der verschiedenen Pfade, aber das werd ich dann auch noch herausfinden.

vielen Dank,
HardyH
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Makro: Basic-Extension und lesen von Datei aus der Extension

Beitrag von komma4 »

HardyH hat geschrieben: jetzt bleibt nur noch die Frage, wie öffnen?
Es gibt die (undokumentierte) Funktion getPathSeparator(), welches das systemabhängige Pfadtrennzeichen zurück gibt.


Was möchtest Du nun "öffnen"?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
HardyH
Beiträge: 8
Registriert: Di, 24.03.2009 07:09

Re: Makro: Basic-Extension und lesen von Datei aus der Extension

Beitrag von HardyH »

Hi,
jetzt komm ich voran (muss ich noch testen).
Was möchtest Du nun "öffnen"?
Ich pack in die Extension einen Template-Datei, füge eine Path.xcu hinzu und möchte diese Datei dann öffnen ...

Ich denke, jetzt habe ich alles beisammen und muss die Datei NICHT im Dateisystem ablegen. Dadurch ist das ganze dann system-unabhängig und wenn die Extension installiert ist, kann ich sicher gehen, dass das Template auch vorhanden ist ...

Danke,
HardyH
HardyH
Beiträge: 8
Registriert: Di, 24.03.2009 07:09

Re: Makro: Basic-Extension und lesen von Datei aus der Extension

Beitrag von HardyH »

... und jetzt einmal alles komplett ...

In das "Hauptverzeichnis" der Extension eine XCU-Datei legen (Name hier: Path.xcu) mit folgendem Inhalt:

Code: Alles auswählen

<?xml version='1.0' encoding='UTF-8'?>
<oor:component-data oor:package="org.openoffice.Office" oor:name="Paths" xmlns:install="http://openoffice.org/2004/installation" xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

	<node oor:name="Paths">
		<node oor:name=[b]"Template"[/b] oor:op="fuse">
			<node oor:name=[b]"InternalPaths"[/b]>
				<node oor:name=[b]"%origin%/files"[/b] oor:op="fuse"/>
			</node>
		</node>
	</node>
</oor:component-data>
Die drei fetten Einträge (klappt nicht, aber die Tags stehen noch drin) sind für diesen Kontext wohl die wichtigsten:
- "Template", bestimmt in welchem Pfad gesucht werden muss (siehe Basic-Code)
- "InternalPaths", sorgt dafür, dass dieser Pfad nicht im Optionen-Dialog erscheint
- "%origin%/files", ist das Verzeichnis innerhalb der Extension, in der die Template-Dateien liegen



Zusätzlich muss die obere Datei (Path.xcu) in die MANIFEST.XML eingetragen sein, einfach folgende Zeile zusätzlich eintragen:

Code: Alles auswählen

<manifest:file-entry manifest:full-path="Paths.xcu" manifest:media-type="application/vnd.sun.star.configuration-data"/>

und zum Schluss noch der Basic Makro-Code zur weiteren Verwendung innerhalb der Extension (hier: öffnen der Datei)

Code: Alles auswählen

REM der zweite Parameter ist der Dateiname!!!
REM hier moegliche Eintraege als erster Parameter
REM "Basic" ,"AutoCorrect", "AutoText", "Backup", "Gallery", "Graphic", "Work", "Template", "Temp"
Sub Vorlage_Oeffnen
	OpenFileInPath("Template", "datei_vorlage.ott")
end Sub

Sub OpenFileInPath(pathName as String, templateFile as String)
	Dim i as Integer, TextPos As Integer
	Dim fullPath as String
	Dim templatePfad, pfade, sep
    
	GlobalScope.BasicLibraries.LoadLibrary("Tools")
	templatePfad = GetPathSettings(pathName)

	REM eigentlich unter Linux ein ":" zur Erinnerung stehen lassen!
	sep = getPathSeparator()
	sep = ";"
	pfade = ArrayOutOfString(templatePfad, sep)
    
	dim arg(0) as new com.sun.star.beans.PropertyValue
	arg(0).Name = "AsTemplate"
	arg(0).Value = True

	REM oeffnet den ersten Treffer im Pfad und verlaesst die Schleife
	For i = 0 to uBound(pfade)
		On Error goto naechste
   		fullPath = pfade(i) + "/" + templateFile
		
		if FileExists(fullPath) then
			StarDesktop.loadComponentfromURL(fullPath, "_blank", 0, arg())
			Exit For
		end if
		naechste:
	next i
End Sub
Unter OO.org 2.4 klappt das hier, vieleicht hilft es mal jemanden weiter,
HardyH
Antworten