LibreOffice - bordeigener PNG-Export für Calc

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

Moderator: Moderatoren

Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

LibreOffice - bordeigener PNG-Export für Calc

Beitrag von Stephan »

Hallo,

es geht mir um die Funktin PNG-Export (über Datei-Exportieren) die es in neueren LO-Versionen gibt, weil diese Funktion bei Calc-Tabellenblättern auch Kopf- und Fußzeile exportiert.

(nebenbei: diese Funktion exportiert immer nur das Tabellenblatt mit Index 0, und nicht das aktuelle Blatt, was offfensichtlich ein Fehler ist)

Wenn ich das per Dispatcher aufzeichne erhalte ich z.B.:

Code: Alles auswählen

sub png_test
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(3) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = "file:///D:/test.png"
args1(1).Name = "FilterName"
args1(1).Value = "calc_png_Export"
args1(2).Name = "FilterData"
args1(2).Value = Array(Array("PixelWidth",1,1123,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PixelHeight",0,794,com.sun.star.beans.PropertyState.DIRECT_VALUE))
args1(3).Name = "SelectionOnly"
args1(3).Value = True

dispatcher.executeDispatch(document, ".uno:ExportTo", "", 0, args1())


end sub
Wenn ich dieses Makro dann starte reagiert LO jedoch weder auf die Pixel-Einstellungen noch auf die Einstellung für "SelectionOnly" sondern zeigt immer den Dialog für die Pixeleinstellungen nochmals an und exportiert ohne die Selection zu beachten.


Weiß jemand etwas darüber?


Ausdrücklich sei nochmals betont das es mir nicht um eine reine Möglichkeit geht png zu exportieren (z.B. siehe https://forum.openoffice.org/en/forum/v ... portFilter), denn diese ist mir bekannt, sie enthält aber die Kopf- und Fusszeilen nicht.



Gruß
Stephan
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: LibreOffice - bordeigener PNG-Export für Calc

Beitrag von Toxitom »

Hey Stephan,

hmm, warum so umständlich? Der Dispacher-Code ist wiirkich nicht immer das ideale... hier wird ja eine eingabaute Funktiuon aufgerufen. Da bekommste den Dialog nicht weg.

Aber: Du hast doch alle Daten.... kannste doch direkt aufrufen:

Code: Alles auswählen

sub png_test2
dim oDoc, sUrl
rem get access to the document
odoc   = ThisComponent
sUrl = "file:///D:/test2.png"


rem ----------------------------------------------------------------------
dim args1(3) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = sUrl
args1(1).Name = "FilterName"
args1(1).Value = "calc_png_Export"
args1(2).Name = "FilterData"
args1(2).Value = Array(Array("PixelWidth",1,1123,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PixelHeight",0,794,com.sun.star.beans.PropertyState.DIRECT_VALUE))
args1(3).Name = "SelectionOnly"
args1(3).Value = True

oDoc.storeToURL(sUrl, args1)

end sub
und schon hast Du, was Du brauchst. Nun kannst Du auch beliebig die Parameter im Code wechseln... sollte alles funktionieren;)

Viele Grüße
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: LibreOffice - bordeigener PNG-Export für Calc

Beitrag von Stephan »

hmm, warum so umständlich?
weil das sich das zufällig ergeben hatte und in konkreter Form zufällig den einen Einstelldialog zeigt denn eigentlich sollte ja args1(2) das abdecken, andererseits kam mir diese Anzeige des Dialogs ganz gelegen, weil heute plötzlich (bei einem Kunden) das ursprünglich funktionierende Makro einen zu kleinen Auschnitt des Tabellenblatts exportierte, nachdem er sein Linux geupdatet hatte und das gleiche Makro in der gleichen LO-Version unter Linux und Windows zu unterschiedlichen Ergebnissen führte.

Leider funktioniert Dein Code-Vorschlag auch nicht richtig (LO 5.1.6.2, Windows), die zwei Parameter args1(2) und args1(3) werden nicht berücksichtigt. Für args1(2) wird scheinbar(?) der letzte Wert genommen der über Datei-Exportieren eingestellt war (eine Änderung im Code bewirkt nichts) und args1(3) funktioniert weder wenn ich ein Diagramm-Objekt, ein Text-Objekt (aus der Zeichenleiste) noch eine Zellbereich auswähle.

Im Moment hat der Kunde schon den workaround in dem Einstellfester manuell die Pixel einzustelllen, was ich weitergehend tue muss ich sehen.


Ursprünglich (als es den PNG-Export bei LO noch nicht gab) hatte ich ein Makro geschrieben das das anders löste (siehe mein Hinweis-Link im ersten Post) und das lief prima.
Dann entdeckte der Anweder den neuen Export in LO und das damit auch Kopf- und Fußzeile exportiert werden und wollte nun die ursprüngliche Variante nicht mehr. Das entsprechende neu geschriebene Makro lief prima bis gestern, dann kam die Mail das es nicht mehr richtig läuft und der Kunde meint das hinge mit einem Linux-Update zusammen.
Die angezeigte LO-Version ist aber unverändert und so fürchte ich mich das es wohl wieder das LO-Benutzerverzeichnis erwischt hat, was deswegen ein 'Problem' ist weil der Kunde beim Neuanlegen immer diverse Einstellungen verliert, was ihn ärgert. Was aber soll man tun? Natürlich sind nicht alle Änderungen systematisch erfasst die der Anwender über Wochen/Mopnate nebenher einstellt und selbst wenn, wie will man das mit vertretbarem (Kosten-)Aufwand neu einstellen bei einem Einzelanweder?




Gruß
Stephan
Antworten