[gelöst ] Fragen zums Dispatcher ?

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

Moderator: Moderatoren

Benutzeravatar
boser
*****
Beiträge: 264
Registriert: Mi, 02.09.2009 08:28
Kontaktdaten:

[gelöst ] Fragen zums Dispatcher ?

Beitrag von boser »

Hallo,

ich habe folgendes Problem.
Gegeben eine Calc-Datei mit mehre Tabellen, aus dem nur jeweils ein Ausschnitt in eine PDF Datei exportiert werden soll, und das am besten dadurch , das ich noch mal eine Tabellenblatt anhänge und auf dem in einer Liste , die Tabellenblätter mit dem zu exportierenden Bereich steht.
Jetzt zu meiner Frage, ich würde gerne den Dispatcher verwenden, hab aber noch zu wenig Erfahrung.

1. Wo bekomme ich eine knappe Erklärung über das Teil her ?
2. Welche Parameter müssen wo , wie angegeben werden ? Gibt es dazu eine Liste ?
3. Gibt es irgendwo eine Beispielsammlung ?

Ich wäre für Tipps und Hinweise , sehr dankbar, da selbst Google meine Wissensdurst nicht befriedigt hat.
Zuletzt geändert von boser am Fr, 25.01.2013 15:15, insgesamt 1-mal geändert.
mfg
boser

linux suse 11.4 / 12.2 ; LibreOffice 3.4.2
Benutzeravatar
boser
*****
Beiträge: 264
Registriert: Mi, 02.09.2009 08:28
Kontaktdaten:

Re: Fragen zums Dispatcher ?

Beitrag von boser »

Hallo,

ich hab jetzt mal ein Makro geschrieben.
Es wäre nett, wenn es einige Leute bei sich ausprobieren können und mit ein Feedback geben können.
es ist erst mal nur der Erste Versuch.
Bitte die Hinweise aus dem Tabellenblatt "PDF" beachten.

Ich freue mich schon auf eure Hinweise und Tipps, so wie Anregungen.
Dateianhänge
PDF_Test.ods
(23.3 KiB) 230-mal heruntergeladen
mfg
boser

linux suse 11.4 / 12.2 ; LibreOffice 3.4.2
HHTiger
**
Beiträge: 27
Registriert: Di, 18.12.2012 15:57

Re: Fragen zums Dispatcher ?

Beitrag von HHTiger »

Hallo boser,
boser hat geschrieben:Bitte die Hinweise aus dem Tabellenblatt "PDF" beachten.
für das Problem slash oder backslash am Ende des Pfads habe ich Dir schnell mal eine kleine Funktion geschrieben, die das Problem löst:

Code: Alles auswählen

Function fncPathCorrected(sPath as String) as String 'Function to ensure slash or backslash at the end of string

	Dim iPos as Integer
	Dim sLastCharacter as String
	
	sLastCharacter = Right(sPath,1)
	iPos = InStr(sPath, "/")
	
	If iPos = 0 Then 'it's a Windows path
		If sLastCharacter <> "\" Then 'backslash is missing
			sPath = sPath & "\"
		End If
	Else 'it's a Linux path
		If sLastCharacter <> "/" Then 'slash is missing
			sPath = sPath & "/"
		End If
	End If
	
	fncPathCorrected = sPath	

End Function
Aufgerufen wird sie z.B. so:

Code: Alles auswählen

    sDirectory = fncPathCorrected(objBlatt.getCellRangeByName("N3").String)
Allerdings hast Du noch beim "speichern" im Code das Problem, dass es nur für Linux funzt. Du kannst allerdings meine Funktion ensprechend erweitern, oder eine weitere Funktion nach meinem Beispiel schreiben, die auch das löst.

Sowohl das Speichern, als auch das Zusammensetzen des Dateinamens liegen komplett in der FOR NEXT Schleife. Das macht nicht wirklich Sinn. Ausserdem würde ich Dir empfehlen, alle Befehle innerhalb der Schleife einzurücken, damit Du nicht den Überblick verlierst.

Gruß Klaus
ich verwende OpenOffice 3.1.4 auf Windows 7 Ultimate
juetho
******
Beiträge: 617
Registriert: Di, 20.04.2010 15:46
Wohnort: Berlin

Re: Fragen zums Dispatcher ?

Beitrag von juetho »

Die Frage slash/backslash bzw. Linux/Windows ist nebensächlich; darauf haben die Entwickler von OO schon geachtet. Zum Öffnen und Schließen von Dateien stehen Funktionen wie convertToUrl und loadComponentFromUrl zur Verfügung, mit denen das gesteuert wird (und die schon benutzt werden). Mehr Beispiele gibt es bei Andrew Pitonyak und Dannenhöfer (siehe die Links in den Hinweisen zur StarBasic-Programmierung).

Zu allem anderen kann ich nichts sagen; so tief bin ich in Calc nicht eingestiegen. Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
Benutzeravatar
boser
*****
Beiträge: 264
Registriert: Mi, 02.09.2009 08:28
Kontaktdaten:

Re: Fragen zums Dispatcher ?

Beitrag von boser »

@Klaus,

danke für deine function, ich hab sie erst mal übernommen und werde sie noch mal testen.
Zu deiner Anmerkung, warum ich das in einer For-Next-Schleife drin habe, ist zu sagen, das die Anforderung so war, das ich pro Tabellblatt ein PDF erzeugen sollte, deshalb auch der verzweifelte Versuch mit dem Zusammensetzten des PDF_Dateinamen aus einen Allg. Teil, den der Benutzer eintragen kann und einen Teil aus dem Tabellenblattname , damit man schon anhand des PDF-Dateiname sehen kann , um welches Tabellblatt es sich handelt.
Zum Speicherproblem kann ich mom. nichts sagen, da ich nur openSUSE 11.4 und 12.2 am Start habe.

@Jürgen,
danke für den Hinweis.
Das was ich da geschrieben haben sind meine ersten Gehversuche im OO-Basic , bzw. LO-Basic. Ich werde mir diese zwei Funktionen noch genauer anschauen.

Über Kritik , wie Verbesserungsvorschläge freue ich mich.

[Edit]
@Klaus,
Könntest du mal als Pfad folgendes eingeben : C\:\\........ , damit einam die Doppelpunkte und der eine Backslash maskiert ist.

[/EDIT]
mfg
boser

linux suse 11.4 / 12.2 ; LibreOffice 3.4.2
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Fragen zums Dispatcher ?

Beitrag von balu »

Hallo bose,

ich weiß nicht ob dispatcher so gut ist. Besser ist es wenn Du dich mit richtiger Programmierug befasst, da kannst Du unter umständen einiges an Code-Zeilen einsparen. Und nein, ich kenne momentan keine Lektüre für den dispatcher.

Zu dem Slash. Das ganze geht auch bedeutend kürzer.

Code: Alles auswählen

Sub Slash_Backslash
REM 1 = Windows _ 3 = MacOS _ 4 = Unix
	OS = GetGUIType()
	if OS = 1 then sStrich = "\" REM Windows
	if OS = 4 then sStrich = "/" REM Unix / MacOS 
	print sStrich 
end sub

Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Benutzeravatar
boser
*****
Beiträge: 264
Registriert: Mi, 02.09.2009 08:28
Kontaktdaten:

Re: Fragen zums Dispatcher ?

Beitrag von boser »

Hallo balu,

danke für den Programmschnipsel, werde ich mir anschauen.
Aber, was meinst du mit "richtiger" Programmierung ? Wie kann man sonst Teile eines Tabellenblattes in einem PDF konvertieren und die einzelene Blätter , einzeln Speichern ohne Dispatcher.
Hast du Beispiele oder eine Anleitung dazu ? ( richtigen Programmieren )

Ich hab früher mal mit VB und anderen Basic-Dialekt programmiert.
mfg
boser

linux suse 11.4 / 12.2 ; LibreOffice 3.4.2
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Fragen zums Dispatcher ?

Beitrag von turtle47 »

Hall Balu,
Das ganze geht auch bedeutend kürzer.
[Besserwissmodus on]

Code: Alles auswählen

Sub Main
print getpathseparator 'Pfadtrenner des aktiven Betriebssystems
End Sub
[Besserwissmodus off] :wink:

Gruß
Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Benutzeravatar
boser
*****
Beiträge: 264
Registriert: Mi, 02.09.2009 08:28
Kontaktdaten:

Re: Fragen zums Dispatcher ?

Beitrag von boser »

An Alle,
eine Dispatcher- Anleitung ist hier zu finden.
http://de.scribd.com/doc/86875934/144/F ... h-commands
danach hab ich mehre Tage gesucht. :evil:
mfg
boser

linux suse 11.4 / 12.2 ; LibreOffice 3.4.2
Benutzeravatar
lorbass
********
Beiträge: 4116
Registriert: Mo, 01.05.2006 21:29
Wohnort: Bonn

Re: Fragen zums Dispatcher ?

Beitrag von lorbass »

boser hat geschrieben:eine Dispatcher- Anleitung ist hier zu finden.
http://de.scribd.com/doc/86875934/144/F ... h-commands
Andrew Pitonyak stellt fertige Teile der Version 3 seines von dir verlinkten Werkes OpenOffice.org Macros Explained zum Download zur Verfügung. Eine deutsche Übersetzung von Teilen daraus ist bei Volker Lenhardt erhältlich.

Gruß
lorbass
HHTiger
**
Beiträge: 27
Registriert: Di, 18.12.2012 15:57

Re: Fragen zums Dispatcher ?

Beitrag von HHTiger »

Hi boser,
boser hat geschrieben:deshalb auch der verzweifelte Versuch mit dem Zusammensetzten des PDF_Dateinamen aus einen Allg. Teil, den der Benutzer eintragen kann und einen Teil aus dem
das ist ja auch ok, aber den allgemeinen Teil des Benutzers brauchst Du nur einmal vor der Schleife holen!
boser hat geschrieben:Zum Speicherproblem kann ich mom. nichts sagen, da ich nur openSUSE 11.4 und 12.2 am Start habe.
Könntest du mal als Pfad folgendes eingeben : C\:\\........ , damit einam die Doppelpunkte und der eine Backslash maskiert ist.
Ob maskiert oder unmaskiert .... es kommt die selbe Fehlermeldung. Leider kenne ich mich zu wenig mit openSUSE und OO aus, um Dir mit dem Problem weiterhelfen zu können. Vielleicht kann hierzu ja noch einmal einer der richtigen Spezies etwas sagen.

Gruss Klaus
Dateianhänge
FehlerPDF.PNG
FehlerPDF.PNG (9.31 KiB) 6071 mal betrachtet
ich verwende OpenOffice 3.1.4 auf Windows 7 Ultimate
HHTiger
**
Beiträge: 27
Registriert: Di, 18.12.2012 15:57

Re: Fragen zums Dispatcher ?

Beitrag von HHTiger »

@balu:
balu hat geschrieben: Zu dem Slash. Das ganze geht auch bedeutend kürzer.

Code: Alles auswählen

Sub Slash_Backslash
REM 1 = Windows _ 3 = MacOS _ 4 = Unix
	OS = GetGUIType()
	if OS = 1 then sStrich = "\" REM Windows
	if OS = 4 then sStrich = "/" REM Unix / MacOS 
	print sStrich 
end sub
Eleganter ist das auf jeden Fall, aber selbst dabei brauchst Du noch ein paar Zeilen Code mehr, um den vom Benutzer vorgegebenen Pfad zu korrigieren! :wink:
Es ging ja nicht darum, auf welchem System das Makro läuft, sondern darum den vom Benutzer eingegebenen Pfad zu korrigieren. Aber wenn man beide Codes zusammenbringt, dann kann man natürlich auch noch einen Fehler abfangen, falls ein Windows-Pfad auf einem Linux-System (oder umgekehrt) verwendet wird.


Gruss Klaus
Zuletzt geändert von HHTiger am Fr, 21.12.2012 19:21, insgesamt 1-mal geändert.
ich verwende OpenOffice 3.1.4 auf Windows 7 Ultimate
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Fragen zums Dispatcher ?

Beitrag von turtle47 »

Hallo,
Ob maskiert oder unmaskiert .... es kommt die selbe Fehlermeldung.
kontrolliere doch mal die Pfadangabe mit einer Printanweisung:
Path.jpg
Path.jpg (15.42 KiB) 6061 mal betrachtet
Gruß
Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
HHTiger
**
Beiträge: 27
Registriert: Di, 18.12.2012 15:57

Re: Fragen zums Dispatcher ?

Beitrag von HHTiger »

@Jürgen:
turtle47 hat geschrieben:kontrolliere doch mal die Pfadangabe mit einer Printanweisung:
wen sprichst Du damit gerade an? Falls Du mich meinst, dann würde ich fragen, wie dieser Paramater denn für den Dispatcher unter Windows aussehen müßte (wie er jetzt aussieht weiß ich).

Gruß Klaus
ich verwende OpenOffice 3.1.4 auf Windows 7 Ultimate
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Fragen zums Dispatcher ?

Beitrag von F3K Total »

Hallo Boser,
da ich die Dispatcher Befehle nicht leiden kann, habe ich dein Makro mal umgeschrieben.
Dieses arbeitet ohne Export mit dem Setzen von Druckbereichen. Funktioniert unter Windows und Linux.

Code: Alles auswählen

REM  *****  BASIC  *****
option explicit

REM XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
REM XX       Macro : Zum erzeugen von PDF-Dateien      XX
REM XX        erstellt am : 21.12.2012                 XX
REM XX          Autoren : boser, F3K Total             XX
REM XX                                                 XX
REM XX   Hinweise auf dem Tabellblatt "PDF" beachten   XX
REM XX                                                 XX
REM XX          Version : 0.1? ( Testversion )         XX
REM XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Sub PDF_Dateien_erzeugen
	Dim objDatei as Object
	Dim objBlaetter as Object
	Dim objBlatt as Object
	Dim objZelle as Object
	dim objCursor as Object
	Dim objExportBlatt as Object
	Dim sRangename as String
	dim oRange as Object
    dim oRanges(0) as Object
	Dim sDirectory as String
	Dim sZellwertN4 as String
	Dim i as Integer
	Dim j as integer     rem Tabellblattnummer
	Dim intZeilen as Integer
	Dim strTab as String
	Dim von as String
	Dim bis as String
	Dim sURL as String
	Dim myProps(0) as New com.sun.star.beans.PropertyValue

	
	objDatei = ThisComponent
	objBlaetter = objDatei.Sheets
	objBlatt = objBlaetter.getByName("PDF")

	objZelle = objBlatt.getCellRangebyName("A1")	
	objCursor = objBlatt.createCursorByRange(objZelle)
	objCursor.collapseToCurrentRegion()
	intZeilen = objCursor.Rows.Count

	For i = 2 to intZeilen-1
		objZelle = objBlatt.getCellByPosition(0, i)
		strTab = objZelle.String
		objZelle = objBlatt.getCellByPosition(1, i)
		von = objZelle.String
		objZelle = objBlatt.getCellByPosition(3, i)
		von = von & objZelle.VALUE
		objZelle = objBlatt.getCellByPosition(2, i)
		bis = objZelle.String
		objZelle = objBlatt.getCellByPosition(4, i)
		bis = bis & objZelle.VALUE

		sRangename = von & ":" & bis
        objExportBlatt = objBlaetter.getbyname(strTab)
        oRange = objExportBlatt.getCellRangeByName(sRangename)

        'Druckbereich setzen
        oRanges(0) = oRange.RangeAddress
        objExportBlatt.setprintAreas(oRanges())
        sDirectory = objBlatt.getCellRangeByName("N3").String
        sZellwertN4 = objBlatt.getCellRangeByName("N4").String
        sURL = converttourl(sDirectory & sZellwertN4 & "_" & strTab & ".pdf")'passt den Pfad dem Betriebssystem an
        'PDF exportieren
        myProps(0).Name="FilterName"
        myProps(0).Value = "calc_pdf_Export"
        objDatei.storetoUrl(sURL,myProps())
        objExportBlatt.setprintAreas(array())'Druckbereich löschen
   next i

	msgbox "Ende"
End Sub
Viel Spaß
Gruß R
Antworten