[gelöst ] Fragen zums Dispatcher ?
Moderator: Moderatoren
[gelöst ] Fragen zums Dispatcher ?
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.
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
boser
linux suse 11.4 / 12.2 ; LibreOffice 3.4.2
Re: Fragen zums Dispatcher ?
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.
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
boser
linux suse 11.4 / 12.2 ; LibreOffice 3.4.2
Re: Fragen zums Dispatcher ?
Hallo boser,
Aufgerufen wird sie z.B. so:
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
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:boser hat geschrieben:Bitte die Hinweise aus dem Tabellenblatt "PDF" beachten.
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
Code: Alles auswählen
sDirectory = fncPathCorrected(objBlatt.getCellRangeByName("N3").String)
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
Re: Fragen zums Dispatcher ?
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
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
Re: Fragen zums Dispatcher ?
@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]
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
boser
linux suse 11.4 / 12.2 ; LibreOffice 3.4.2
Re: Fragen zums Dispatcher ?
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.
Gruß
balu
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
wehr rächtschraipfähler findet khan si behalden
Re: Fragen zums Dispatcher ?
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.
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
boser
linux suse 11.4 / 12.2 ; LibreOffice 3.4.2
Re: Fragen zums Dispatcher ?
Hall Balu,
[Besserwissmodus off]
Gruß
Jürgen
[Besserwissmodus on]Das ganze geht auch bedeutend kürzer.
Code: Alles auswählen
Sub Main
print getpathseparator 'Pfadtrenner des aktiven Betriebssystems
End Sub
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
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Re: Fragen zums Dispatcher ?
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.
eine Dispatcher- Anleitung ist hier zu finden.
http://de.scribd.com/doc/86875934/144/F ... h-commands
danach hab ich mehre Tage gesucht.
mfg
boser
linux suse 11.4 / 12.2 ; LibreOffice 3.4.2
boser
linux suse 11.4 / 12.2 ; LibreOffice 3.4.2
Re: Fragen zums Dispatcher ?
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.boser hat geschrieben:eine Dispatcher- Anleitung ist hier zu finden.
http://de.scribd.com/doc/86875934/144/F ... h-commands
Gruß
lorbass
Re: Fragen zums Dispatcher ?
Hi boser,
Gruss Klaus
das ist ja auch ok, aber den allgemeinen Teil des Benutzers brauchst Du nur einmal vor der Schleife holen!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
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.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.
Gruss Klaus
- Dateianhänge
-
- FehlerPDF.PNG (9.31 KiB) 6071 mal betrachtet
ich verwende OpenOffice 3.1.4 auf Windows 7 Ultimate
Re: Fragen zums Dispatcher ?
@balu:
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
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!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
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
Re: Fragen zums Dispatcher ?
Hallo,
Gruß
Jürgen
kontrolliere doch mal die Pfadangabe mit einer Printanweisung:Ob maskiert oder unmaskiert .... es kommt die selbe Fehlermeldung.
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
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Re: Fragen zums Dispatcher ?
@Jürgen:
Gruß Klaus
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).turtle47 hat geschrieben:kontrolliere doch mal die Pfadangabe mit einer Printanweisung:
Gruß Klaus
ich verwende OpenOffice 3.1.4 auf Windows 7 Ultimate
Re: Fragen zums Dispatcher ?
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.
Viel Spaß
Gruß R
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
Gruß R
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 10: AOO, LO Linux Mint: AOO, LO