Hallo JK
JK hat geschrieben:Hallo,
ich bin mir nicht sicher, dass es hier im richtigen Forum ist, bitte ggf. verschieben. Danke!
Ich denke schon, dass du hier richtig bist.
JK hat geschrieben:Folgende Fragen:
Welche Übergabeparameter (außer "(OUTFILE)") stehen mir zur Verfügung bei der Verwendung eines (eigenen) Skriptes das als PDF-Drucker mittels spadmin als Drucker registriert ist?
Wie kann ich eine Liste der geöffneten Dokumente (vielleicht sogar des gerade aktiven) in OpenOffice mittels eines Shellskriptes bekommen?
Ich weiß zwar nicht, welche Übergabeparameter dir zur Verfügung stehen,aber ich kann dir vielleicht sagen, wie du eine Liste der geöffneten Dokumente, und des aktiven Dokuments bekommst:
du kannst aus deinem Skript ein Makro starten, dass diese Parameter ausließt und sie dann an dein Skript zurück gibt.
Der Aufruf sieht aus der windows-Schell dann so aus:
I:\Program Files (x86)\LibreOffice 3\program>soffice.exe macro:///standard.module3.fnComponent_Names
Und Das Makro(abgewandelte form des Makros aus Andrew Pitonyaks Buch
"OpenOffice.org Macros Explained", Kapittel 12.3.2)
Code: Alles auswählen
function fnComponent_Names () As String
Dim vComps 'Objekt des enumerierten Zugriffs
Dim vEnumerate 'Enumerationsobjekt
Dim vComp 'Einzelne Komponente
Dim sTitle AS String ' Ausgabe-String
REM Die Bibliothek Tools wird geladen, weil deren Modul Strings
REM die Funktion GetFileNameWithoutExtension enthält
GlobalScope.BasicLibraries.LoadLibrary("Tools")
vComps=StarDesktop.getComponents() 'com.sun.star.container.XEnumerationAccess
If NOT vComps.hasElements() Then 'Das muss ich nicht tun, aber
fnComponent_Names= "Es gibt keine Komponenten" 'es zeigt, dass ich es tun kann
Exit function
End If
sTitle =GetFileNameWithoutExtension( StarDesktop.getCurrentComponent.Title )'Aktives dokument
vEnumerate = vComps.createEnumeration() 'com.sun.star.container.XEnumeration
Do While vEnumerate.hasMoreElements() 'Gibt es noch weitere Elemente?
vComp = vEnumerate.nextElement() 'Das nächste Element
REM Der Titel wird nur von Dokument-Komponenten bezogen
REM Dadurch wird beispielsweise die IDE überschlagen
If HasUnoInterfaces(vComp, "com.sun.star.frame.XModel") Then
sTitle= sTitle & Chr(10) & GetFileNameWithoutExtension( vComp.Title )
'Statt Chr(10) kannst du natürlich auch andere Trenner benutzen z.B: ","
End If
Loop
fnComponent_Names = sTitle
Rem aufruf deines Skriptes, und übergabe der parameter:
'Shell("/Pfad zu deinem Spript/Skript.h " & sTitle())'aufruf deines Skriptes, und übergabe der parameter
Rem Eine andere Möglichkeit wäre, dass du die Namen in eine Tämporäre Datei schreibst,
Rem und diese Datei dann aus deinem Skript ausließt.
End function
Da ich mich leider nicht so gut mit Shell-Skripten auskenne, weiß ich nicht, ob dir das wirklich hilft.
Ich habe aber gerade herausbekommen, wie man mit einem Python Skript aus der Kommandozeile z.B. den Name des aktuellen Dokuments Auslesen Kann:
Zuerst musst du OO oder LO mit den folgenden Parametern starten:(auch wenn es schon offen ist.)
Code: Alles auswählen
c:\Programe\OpenOffice1.1\program> soffice "-accept=socket,host=localhost,port=2002;urp;"
Dann Startest du folgendes Skript (Name: bei mir:)
Code: Alles auswählen
#import socket # only needed on win32-OOo3.0.0
import uno
# get the uno component context from the PyUNO runtime
localContext = uno.getComponentContext()
# create the UnoUrlResolver
resolver = localContext.ServiceManager.createInstanceWithContext(
"com.sun.star.bridge.UnoUrlResolver", localContext )
# connect to the running office
ctx = resolver.resolve( "uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext" )
smgr = ctx.ServiceManager
# get the central desktop object
desktop = smgr.createInstanceWithContext( "com.sun.star.frame.Desktop",ctx)
# access the current writer document
model = desktop.getCurrentComponent()
Title = model.Title
print("%s" % (Title))
Und so startest du das Skript:
Code: Alles auswählen
I:\Program Files (x86)\LibreOffice 3\program> .\python C:\Users\Nansen\Desktop\T
est.py
Es Liefert dir dann den Titel des aktuellen Dokuments auf die Standard-Ausgabe
Gruß Frieder