Zwischensumme auf jeder Seite in der Fußzeile

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

Moderator: Moderatoren

MasterCAD
Beiträge: 7
Registriert: Do, 28.06.2007 19:20

Zwischensumme auf jeder Seite in der Fußzeile

Beitrag von MasterCAD »

Hallo an alle,
wie mir im Calc forum geraten, sollte ich mich wohl eher mal an das Basic Forum wenden.
Und zwar suche ich die Möglichkeit auf unseren Vereins Beitragsseiten die Zwischensummen immer in der Fußzeile jeder Seite anzeigen zu lassen.
Da ich schon vergeblich nach so einer Programmfunktion suche bleibt mir wohl nix anderes übrig, wie ein Makro zu schreiben, am ende hoffentlich
mit eurer Hilfe. Ich programmiere zwar selbst in Javascript Php und C++ aber Basic hab ich zur Zeit noch keinen Dunst von der Syntax und auch keine
wirkliche Zeit mich nur wegen einem Makro komplett in die Syntax einzulesen. Ich wäre euch sehr dankbar wenn mir da wer von euch weiterhelfen könnte,
da ich es eigentlich schon gestern benötige und damit sicher auch meiner Kollegin ne riesen Freude machen könnte ;)

mfg und ein nettes wochenende
CAD
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Zwischensumme auf jeder Seite in der Fußzeile

Beitrag von turtle47 »

Hi CAD,

ich hoffe Dir ist klar, dass die Fußzeile für alle Tabellenblätter gleich ist.
Hier ein Code der den Wert von Zelle A1 in die Fußzeile einträgt:

Code: Alles auswählen

Sub WertFusszeile
	myDoc = thiscomponent
	StyleFamilies = myDoc.StyleFamilies
	PageStyles = StyleFamilies.getByName("PageStyles")
	DefPage = PageStyles.getByName("Standard")
	DefPage.HeaderIsOn = False 'Kopfzeile ausgeschaltet
	DefPage.FooterIsOn = True 'Fusszeile eingeschaltet
	HContent = DefPage.RightPageFooterContent
	myDoc = thisComponent
	mySheet = myDoc.sheets(0) 'Erstes Tabellenblatt
	mycell = mysheet.getCellRangeByName("A1") 'Wert Zelle A1
	myvalue=mycell.value
	z=myvalue
	HContent.RightText.String = "Zwischensumme: " & z
	HContent.LeftText.String = "" 'kein Text linker Bereich
	HContent.CenterText.String = "" 'kein Text rechter Bereich
	DefPage.rightPageFooterContent = Hcontent   
End Sub
Viel Erfolg.

Jürgen

P.S. Sorry, muss mich korrigieren bzgl:
ich hoffe Dir ist klar, dass die Fußzeile für alle Tabellenblätter gleich ist.
denn siehe folgendes Thread: viewtopic.php?f=2&t=9411
Das Makro könnte man somit entsprechen anpassen.
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
MasterCAD
Beiträge: 7
Registriert: Do, 28.06.2007 19:20

Re: Zwischensumme auf jeder Seite in der Fußzeile

Beitrag von MasterCAD »

oha oha das ging ja rasend schnell turtle, leider müssen wir erst einmal mit dem verein auf ein kinderfest, aber da das sicher nicht so spät wird werde ich das morgen gleich erstmal versuchen. ich danke dir vielmals und wünsche dir natürlich für deine überaus nette hilfe ein extra schönes wochenende

;)

mfg CAD
MasterCAD
Beiträge: 7
Registriert: Do, 28.06.2007 19:20

Re: Zwischensumme auf jeder Seite in der Fußzeile

Beitrag von MasterCAD »

guten morgen an alle,
ich hab das makro nun eingebaut, aber wenn ich es ausführe, passiert rein garnix. es erstellt keine fußleiste und es füllt auch keine bereits vorhandene fußleiste mit daten. da ich wie gesagt von basic keinen wirklichen plan habe, kann ichs mir auch nicht mal schnell umbaun. das prob an deine makros, turtle ist nämlich außerdem, das mir zelle A1 nix nutzt ich brauch dynamisch aus den jeweiligen bereits gelaufenen seiten, die zwischensumme. ich weis aber bei erstellen des dokuments nicht wann die nächste seite beginnen würde, und da ich das nicht dauernd selber von hand machen möchte, suche ich ein makro dafür :).

mfg CAD
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Zwischensumme auf jeder Seite in der Fußzeile

Beitrag von turtle47 »

Hallo CAD,
ich hab das makro nun eingebaut, aber wenn ich es ausführe, passiert rein garnix
dann hast Du es nicht richtig eingebaut oder es wird nicht gestartet, oder aber
es gibt noch die andere Möglichkeit, dass zum Beispiel der Name der Seitenvorlage ein anderer als "Standard" ist.
Das Makro bearbeitet die Fusszeile in der Seitenvorlage "Standard":

Code: Alles auswählen

DefPage = PageStyles.getByName("Standard")
ich weis aber bei erstellen des dokuments nicht wann die nächste seite beginnen würde
Wenn Du es schon nicht weißt, woher soll ich es dann wissen? Werde mir wohl die Glaskugel von Karolus mal ausleihen müssen. :wink:
es erstellt keine fußleiste und es füllt auch keine bereits vorhandene fußleiste mit daten
Ich hoffe wir reden von ein und demselben. Bei mir heißt das nämlich Fußzeile.
Als Anhang ein kleines Beispiel.
Diese Beispiel ist mit zwei Seitenvorlagen: "Seite1" und "Seite2" damit zwei verschiedene Zwischensummen
übertragen werden können.

Jürgen
Dateianhänge
Fusszeile.zip
(8.14 KiB) 226-mal heruntergeladen
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
MasterCAD
Beiträge: 7
Registriert: Do, 28.06.2007 19:20

Re: Zwischensumme auf jeder Seite in der Fußzeile

Beitrag von MasterCAD »

hmm danke jürgen,
soweit funzt das in deinem beispiel ja super, nur is halt das prob ich will das nicht auf jeder seite extra angeben müssen, dann brauch ich auch kein makro sondern kann die zwischensumme selbst erstellen. es sollte doch aber möglich sein das man ein makro hat, was ausrechnet wieviele zeilen auf einer seite stehen würden, und dann abhängig davon die zwischensumme in die fußzeile schreibt. ne zwischensumme von hand angeben und diese dann nur noch in ne fußzeile schieben ist genau der weg den ich zur zeit gehe und den ich aber als zu umständlich betrachte.

danke dir übrigens auch vielmals für deine mühe mit dem beispiel :) haste fein gemacht ^^

mfg CAD
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Zwischensumme auf jeder Seite in der Fußzeile

Beitrag von turtle47 »

Hi CAD,

in folgendem Beispiel gehe davon aus, dass die Daten alle in einer Tabelle stehen.
Wie gesagt, es ist nur ein Beispiel. Anpassen musst Du das schon selber da ich
Deine Tabelle nicht kenne.

Hier kann man die Anzahl der Zeilen auf einem Tabellenblatt einstellen:

Code: Alles auswählen

AnzZeilen = 50 'entsprechend anpassen
Hier kann man die Anzahl der benötigten Tabellenblätter einstellen:

Code: Alles auswählen

AnzahlBlaetter = 3 'entsprechend anpassen
Die Spalte G kann ausgeblendet werden, da diese nur für die Berechnung der
Zwischensummen bestimmt ist. Sollte die Anzahl der sichtbaren Spalten grösser
sein, dann muss man diese im Makro "verlegen".

In dem Makro ist Zwischensumme und Endsumme berücksichtigt. :D

Da man für ein Tabellenblatt nur eine Fußzeile erstellen kann läuft das Makro folgendermassen ab:
Als erstes wird der erste Druckbereich definiert und die zugehörige Summe der Fußzeile hinzugefügt.
Das ganze wird dann direkt an den Standarddrucker gesendet.
Das ganze folgt dann für die nächsten Druckbereiche in gleicher Form.

Zum Testen habe ich den FreePDF XP benutzt um Papier zu sparen!

Ich hoffe ich konnte Dir und den anderen, die sowas schon gesucht haben, helfen.

Viele Grüße.

Jürgen
Dateianhänge
Fusszeile2_PDF.zip
(7.22 KiB) 177-mal heruntergeladen
Fusszeile2.zip
(11.6 KiB) 194-mal heruntergeladen
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
MasterCAD
Beiträge: 7
Registriert: Do, 28.06.2007 19:20

Re: Zwischensumme auf jeder Seite in der Fußzeile

Beitrag von MasterCAD »

So, sorry das ich mich erst heute melde :?

und einen riesen dank an turtle, ich habe ne menge streß mit dem netzwerk bei uns gehabt, da ich das spontan und eher ungewollt umstruckturiert habe und das nun wieder erstmal zum reibungslosen ablauf bewegen musste :)

dein code klappt super und ist genau das was ich gesucht habe, leider hatte ich mir das nur alles ein wenig einfacher vorgestellt.
ist super nett von dir, das du mir/uns das gebaut hast und ich wollte das hier nicht so undankbar stehen lessen, wie die meisten
die hilfe suchen und sich dann nie wieder melden ;)

schönen tag noch an euch alle und besonders an turtle, ich hoffe ich komm mal bei zeiten dazu, mir starbasic anzusehen, da kann
man sehr nette spielereien mit machen ^^

mfg und nochma vielen dank
CAD
Ey-Ko
Beiträge: 8
Registriert: Di, 08.12.2009 15:46

Re: Zwischensumme auf jeder Seite in der Fußzeile

Beitrag von Ey-Ko »

Hallo, :D

ist es hier möglich 2 Zellinhalte hintereinander (mit leertaste) einzufügen?

mycell = mysheet.getCellRangeByName("A1") 'Wert Zelle A1

also sowas wie...
mycell = mysheet.getCellRangeByName("A1"+Leerzeile+"A2") 'Wert Zelle A1

grüße Ey-Ko
Ey-Ko
Beiträge: 8
Registriert: Di, 08.12.2009 15:46

Re: Zwischensumme auf jeder Seite in der Fußzeile

Beitrag von Ey-Ko »

so habs selbst schon erledigt...

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

Sub KopfzeileAusZelle
odoc = thisComponent 'oder StarDesktop.getCurrentComponent()
oZellInhalt = odoc.sheets.getByName("Kontrollliste").getCellRangeByName("B3").string
oSeitenFormat = odoc.StyleFamilies.getByName("PageStyles").getByName("Standard")
oSeitenFormat.HeaderIsOn = true 'Kopfzeile einschalten
oSeitenFormat.HeaderIsShared = true 'beide Seiten gleich!
oHT = oSeitenFormat.rightPageHeaderContent 'Textobjekt der Kopfzeile
oTest = oHT.CenterText 'mittlerer Textabschnitt
oTest.setString(CStr(oZellInhalt)) 'Inhalt schreiben
oSeitenformat.rightPageHeaderContent = oHT 'rückschreiben

odoc = thisComponent 'oder StarDesktop.getCurrentComponent()
oZellInhalt1 = odoc.sheets.getByName("Kontrollliste").getCellRangeByName("B4").string
oZellInhalt2 = odoc.sheets.getByName("Kontrollliste").getCellRangeByName("C4").string
oSeitenFormat = odoc.StyleFamilies.getByName("PageStyles").getByName("Standard")
oSeitenFormat.HeaderIsOn = true 'Kopfzeile einschalten
oSeitenFormat.HeaderIsShared = true 'beide Seiten gleich!
oHT = oSeitenFormat.rightPageHeaderContent 'Textobjekt der Kopfzeile
oTest = oHT.leftText 'linker Textabschnitt
oTest.setString(CStr(oZellInhalt1 &" "& oZellInhalt2)) 'Inhalt schreiben
oSeitenformat.rightPageHeaderContent = oHT 'rückschreiben
End Sub

grüße
Antworten