Calc - Skalierungsfaktor der Druckseite per Makro auslesen

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

Moderator: Moderatoren

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

Calc - Skalierungsfaktor der Druckseite per Makro auslesen

Beitrag von Stephan »

Hallo,

in Calc kann ich im Dialog für die Seitenvorlage (erreichbar z.B. über das Menü: Format-Seite) im Register "Tabelle" den Skalierungsmodus einstellen.

Wenn dieser Modus auf "Druckbereich(e) auf Seitenanzahl anpassen" (http://www.openoffice.org/api/docs/comm ... aleToPages) eingestellt ist, ist es dann möglich per Makro den effektiv resultierenden Skalierungsfaktor (im %) zu ermitteln? Wenn ja, wie?

Wozu brauche ich das?
Ich würde gerne die Schriftfontgröße der Fußzeile, abhängig von der Seitenskalierung, verändern. Ziel ist es die resultierende effektive Schriftgröße der Fußzeile auf dem Wert zu halten, welcher der Größe bei Skalierungsfaktor 100% der Seitengröße entspricht.


Gruß
Stephan

Benutzeravatar
Faol
****
Beiträge: 195
Registriert: Di, 26.01.2016 21:18

Re: Calc - Skalierungsfaktor der Druckseite per Makro auslesen

Beitrag von Faol »

Hallo Stephan,

meinst Du so etwas?

Code: Alles auswählen

REM  *****  BASIC  *****
Sub ScaleFact
Dim sStyle
Dim oStyle 
	  sStyle = ThisComponent.CurrentController.getActiveSheet().PageStyle
		oStyle = ThisComponent.StyleFamilies.getByName("PageStyles").getByName(sStyle)

 	print oStyle.PageScale

End Sub
Gruß
Faol

Tipp des Tages:
Heute schon an eine Sicherungskopie gedacht?


⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒
Win.10 Prof. (x64) • AOO 4.1.6 • LibO 6.4.4.2 (x64)
⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐

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

Re: Calc - Skalierungsfaktor der Druckseite per Makro auslesen

Beitrag von Stephan »

meinst Du so etwas?
Eigentlich nein, denn das Problem ist, das die Eigenschaft .PageScale IMMER den Wert 0 hat, WENN .ScaleToPages (oder auch ScaleToPagesX und ScaleToPagesY) einen Wert hat.



Gruß
Stephan

Benutzeravatar
Faol
****
Beiträge: 195
Registriert: Di, 26.01.2016 21:18

Re: Calc - Skalierungsfaktor der Druckseite per Makro auslesen

Beitrag von Faol »

Hallo Stephan,
Stephan hat geschrieben:Eigentlich nein, denn das Problem ist, das die Eigenschaft .PageScale IMMER den Wert 0 hat, WENN
"0" kann ich nicht bestätigen.
Nur bei der Eigenschaft "ScaleToPages" trifft dies laut MRI zu. Habe dazu ein Sheet mit zwei Seiten erstellt.

Habe dazu mal diese Makro zusammengebaut, etwas erweitert; MRI zeigt die Eigenschaften:
Quelle des Makros: https://de.openoffice.info/viewtopic.php?t=68540

Code: Alles auswählen

REM  *****  BASIC  *****

Sub FZL_drucken
    	dim oRanges(0)
oSeitenvorlage=Thiscomponent.getStyleFamilies().getByName("PageStyles").getByName("Standard")

REM -------------------------------------------------------------------------------------------------------------
REM Es kommt auf die Reihenfolge an, ob ScaleFactor oder ScalToPages aktiv ist:
REM Variante A)
	oSeitenvorlage.PageScale=70			' bleibt auf 100%, auch wenn Faktor zuvor unter "Menü Format → Seite → Tabelle" geändert wurde
	oSeitenvorlage.ScaleToPages=1		' wird bei Ausführung automatisch auf 0 gesetzt
	oSeitenvorlage.ScaleToPagesX=1		' ist/ bleibt  = 1
	oSeitenvorlage.ScaleToPagesY=1		' ist/ bleibt  = 1

REM Variante B)
'	oSeitenvorlage.PageScale=70			' bleibt auf 100%, auch wenn Faktor zuvor unter "Menü Format → Seite → Tabelle" geändert wurde
'	oSeitenvorlage.ScaleToPages=2		' bleibt immer auf 0
'	oSeitenvorlage.ScaleToPagesX=0		' ist/ bleibt  = 0
'	oSeitenvorlage.ScaleToPagesY=0		' ist/ bleibt  = 0

REM Variante C)
'	oSeitenvorlage.ScaleToPages=1		' wird bei Ausführung automatisch auf 0 gesetzt
'	oSeitenvorlage.ScaleToPagesX=1		' wird bei Ausführung automatisch auf 0 gesetzt
'	oSeitenvorlage.ScaleToPagesY=1		' wird bei Ausführung automatisch auf 0 gesetzt
'	oSeitenvorlage.PageScale=70			' wird bei Ausführung korrekt übernommen
REM -------------------------------------------------------------------------------------------------------------
    	osheet = thiscomponent.currentcontroller.activesheet
    	oRanges(0) = osheet.getcellrangebyname("A1:AI72").RangeAddress'Bereich 1
   		osheet.setprintareas(oranges)
    	dim printProp(1) as new com.sun.star.beans.PropertyValue
    	printProp(0).name = "Wait"
    	printProp(0).Value = true
    	printProp(1).name = "CopyCount"
    	printProp(1).Value = 1 

REM → → → → → → → → → → → → → → → → → → → → → → → → 
REM in keinem Fall ist der ScaleFactor bei 0
mri oSeitenvorlage
REM → → → → → → → → → → → → → → → → → → → → → → → → 

'    	ThisComponent.Print(printProp())'Bereich 1 drucken				

End Sub
Siehe auch Kommentare im Code.

Welche Funktion die Eigenschaft:
ScaleToPages = enthält die Anzahl der Seiten, auf denen das Blatt gedruckt wird.
Letztendlich hat, verstehe ich nicht so recht, da diese Eigenschaft bei mir immer den Wert 0 aufweist.
Laut:
Volker Lenhart - OpenOffice.org-Makros Erklärt → 13.15.2. Tabellendokumente drucken hat geschrieben: Um die Tabelle so zu skalieren, dass sie auf eine bestimmte Anzahl Seiten passt,
setzt man die Eigenschaft ScaleToPages auf die passende Seitenmenge.
Stephan hat geschrieben:Wozu brauche ich das?
Ich würde gerne die Schriftfontgröße der Fußzeile, abhängig von der Seitenskalierung, verändern. Ziel ist es die resultierende effektive Schriftgröße der Fußzeile auf dem Wert zu halten, welcher der Größe bei Skalierungsfaktor 100% der Seitengröße entspricht.
Dazu gemäß des o.g. Makros:
  • Variante A)
    Der Skalierungsfaktor 100% ist immer auf 100%, deshalb ist es für die Fontgröße unerheblich.
  • Variante B)
    Ist dasselbe wie Variante A)
  • Variante C)
    Hier wirkt der Skalierungsfaktor und es muss eine Berechnung zur Fontgröße erstellt werden.
Gruß
Faol

Tipp des Tages:
Heute schon an eine Sicherungskopie gedacht?


⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒
Win.10 Prof. (x64) • AOO 4.1.6 • LibO 6.4.4.2 (x64)
⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐

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

Re: Calc - Skalierungsfaktor der Druckseite per Makro auslesen

Beitrag von Stephan »

"0" kann ich nicht bestätigen.
OK, ist auch bei mir 100

Wie mir Dein Code weiterhelfen soll, verstehe ich leider nicht, denn in keiner der Varianten A-C wird der effektive Skalierungsfaktor ausgelesen, sondern immer werden nur Werte gesetzt.
Der Skalierungsfaktor 100% ist immer auf 100%, deshalb ist es für die Fontgröße unerheblich.
Das hat doch nicht mit meiner Frage zu tun. Ich spreche nicht über .PageScale sondern über den "effektiv resultierenden Skalierungsfaktor "

Was ist "effektiv resultierenden Skalierungsfaktor"?
Eine Tabelle enthielte soviel Inhalt das sie sich (bei 100% Skalierung) nicht auf eine Seite drucken lässt. Stellt man nun die Skalierung auf 1 Seite, so skaliert OO/LO automatisch so das es, ohne Verzerrung, auf eine Seite passt.
Dadurch verkleinert sich aber die Darstellung und um wieviel sie sich verkleinert, das nenne ich "effektiv resultierenden Skalierungsfaktor" und diesen Wert suche ich.
Dieser Wert sollte eigentlich dem Wert entsprechen, denn ich für PageScale einstellen muss, um die gleiche Skalierung zu bekommen wie durch die Angabe der Skalierung per Seitenzahl, nur ist das nicht dasselbe denn PageScale ist ja zum Zeitpunkt wo über die Seitenzahl skaliert wird garnicht eingestellt (bzw. steht auf 100).



Auffallen tut mir das das Setzen des Skalierungsfaktors per Code sich scheinbar(?) zu der bereits vorhandenen Skalierung addiert (LO 6.0.3).




Gruß
Stephan

Benutzeravatar
Faol
****
Beiträge: 195
Registriert: Di, 26.01.2016 21:18

Re: Calc - Skalierungsfaktor der Druckseite per Makro auslesen

Beitrag von Faol »

Hallo Stephan,
Stephan hat geschrieben:Wie mir Dein Code weiterhelfen soll, verstehe ich leider nicht, denn in keiner der Varianten A-C wird der effektive Skalierungsfaktor ausgelesen, sondern immer werden nur Werte gesetzt.
Für das Auslesen im Code ist MRI zuständig.
Stephan hat geschrieben:Das hat doch nicht mit meiner Frage zu tun. Ich spreche nicht über .PageScale sondern über den "effektiv resultierenden Skalierungsfaktor "
Eingestellter Skalierungsfaktor oder der von Calc berechnete Skalierungsfaktor (effektiv), ist für mich ein und dasselbe.
Stephan hat geschrieben:Eine Tabelle enthielte soviel Inhalt das sie sich (bei 100% Skalierung) nicht auf eine Seite drucken lässt. Stellt man nun die Skalierung auf 1 Seite, so skaliert OO/LO automatisch so das es, ohne Verzerrung, auf eine Seite passt.
Ist mir vollkommen klar, aber ich erwarte von Calc bei der automatischen Berechnung, dass der Skalierungfaktor NICHT bei 100%
stehen bleibt, sondern eben Deinen "effektiven Faktor anzeigt". Diesen Mangel zeigt mein Code und darum geht es doch schlußendlich.
Das Ergebnis dieser Berechnung befindet sich wohl ausschließlich in den Weiten des Arbeitsspeichers.

UND:
100% vom halben Kuchen
oder
100% vom ganzen Kuchen
sind für mich zwei unterschiedliche Werte/ Faktoren.

Das genau ist hier der Fall.

Ich habe in der Zwischenzeit verschiedenste Tests durchgeführt, konnte das Problem aber nicht lösen,
auch nicht über eine Herleitung z.B. über Änderung der Spaltenbreite/ Schriftgröße wenn "Skalierung auf 1 Seite" eingestellt ist.

MRI zeigt mir keine Änderungen an.

Wo sind nun die von Calc berechneten Skalierungsfaktoren?

Ich komme leider nicht weiter und bin dann mal weg. Sorry :oops:
Gruß
Faol

Tipp des Tages:
Heute schon an eine Sicherungskopie gedacht?


⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒
Win.10 Prof. (x64) • AOO 4.1.6 • LibO 6.4.4.2 (x64)
⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐⇐

mikeleb
******
Beiträge: 928
Registriert: Fr, 09.12.2011 16:50

Re: Calc - Skalierungsfaktor der Druckseite per Makro auslesen

Beitrag von mikeleb »

Hallo,
ich vermute mal, dass man an diesen effektiven Skalierungsfaktor nicht direkt herankommt.
Näherungsweise könnte man die Seitengröße und die Größe des zu druckenden Zellbereichs ins Verhältnis setzen (dabei noch Kopf- und Fußzeilen beachten). Da beim Ausdruck ja noch andere Feinheiten gesetzt werden können (Formeln etc.) bleibt es eine Näherung.
Gruß,
mikeleb

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

Re: Calc - Skalierungsfaktor der Druckseite per Makro auslesen

Beitrag von Stephan »

Eingestellter Skalierungsfaktor oder der von Calc berechnete Skalierungsfaktor (effektiv), ist für mich ein und dasselbe.
Ja gerne, nur existiert doch kein eingestellter Skalierunsfaktor (sondern nur eine Seitenanzahl zur Skalierung). Der Skalierungsfaktor steht derweil auf 100 (fälschlich schrieb ich ursprünglich 0 und Du hattest mich korrigiert), was ich zwar auslesen kann, was mir aber nicht weiterhilft.
Ist mir vollkommen klar, aber ich erwarte von Calc bei der automatischen Berechnung, dass der Skalierungfaktor NICHT bei 100% stehen bleibt, sondern eben Deinen "effektiven Faktor anzeigt".
Das tut Calc aber leider offensichtlich nicht.
UND:
100% vom halben Kuchen
oder
100% vom ganzen Kuchen
sind für mich zwei unterschiedliche Werte/ Faktoren.
Wenn wir hier dasselbe meinen ist das Problem das die durch das Makro durchgeführte Skalierung nicht in der GUI angezeigt wird (ich hatte das nicht betont)

Im Übrigen: Danke fürs Nachdenken.
Näherungsweise könnte man die Seitengröße und die Größe des zu druckenden Zellbereichs ins Verhältnis setzen (dabei noch Kopf- und Fußzeilen beachten). Da beim Ausdruck ja noch andere Feinheiten gesetzt werden können (Formeln etc.) bleibt es eine Näherung.
Ja, stimmt.
Ich hatte nur gefragt in der Hoffnung das doch jemand eine genaue Lösung weiß, denn ich brauche das für ein Kundenprojekt und je nachdem wie später die konkreten Anwendungsfälle sind passt die Näherungslösung nicht richtig.

Auch Dir Danke fürs Überlegen.


Gruß
Stephan

Antworten