Zellenwert in Kopfzeile übernehmen

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

fiz
**
Beiträge: 44
Registriert: Di, 16.01.2007 12:54
Wohnort: Hannover

Zellenwert in Kopfzeile übernehmen

Beitrag von fiz »

Hallo Leute,

hat jemand eine Idee bzw. Lösung, wie man einen errechneten Zellenwert in einer Tabelle in die Kopfzeile des Dokumentes übernehmen kann?

Gruß,
fiz
RS
*******
Beiträge: 1088
Registriert: Fr, 14.01.2005 10:27

Re: Zellenwert in Kopfzeile übernehmen

Beitrag von RS »

Hi,

nicht ohne Umweg, s. folgende Beiträge hier aus dem Forum (Suchwort Kopfzeile): viewtopic.php?f=2&t=7726&p=29544&hilit=kopfzeile#p29544 und viewtopic.php?f=2&t=4062&p=15291&hilit=kopfzeile#p15291.

Gruß,

Rebecca
fiz
**
Beiträge: 44
Registriert: Di, 16.01.2007 12:54
Wohnort: Hannover

Re: Zellenwert in Kopfzeile übernehmen

Beitrag von fiz »

Hallo Rebecca,

danke für die Antwort. Schade, dass es da keine einfachere Lösung gibt.
Deine zwei Links haben mir leider nicht weiter geholfen.

Der erste führt zu einem Kopfzeilentool, das mir in meiner Fragestellung nicht weiterhilft,
der zweite führt zu einem Makro das mir wohl helfen würde, aber leider liefert es bei mir einen Laufzeitfehler und ich bin nicht der "Makroheld" um zu verstehen, wie es laufen sollte und warum es nicht funktioniert.
Kann das an der OOo-Version liegen? Wenn ja, kannst Du (oder irgendwer) mir evtl. einen Hinweis geben, was an dem Makro zu ändern wäre, damit es unter OOo 2.3.1 läuft? Damit man nicht zappen muss, kopiere ich es noch einmal hier rein.

Code: Alles auswählen

sub Kopfzeile
odoc = thisComponent   'oder  StarDesktop.getCurrentComponent()
oZellInhalt = odoc.sheets(0).getCellRangeByName("A35").value
oSeitenFormat = odoc.StyleFamilies.getByName("PageStyle").getbyName("Standard")
oSeitenFormat.HeaderIsOn = true      'Kopfzeile einschalten
oSeitenFormat.HeaderIsShared = true  'beide Seiten gleich!
oHT = oSeitenFormat.rightPageHeaderContent    'Textobjekt der Kopfzeile
oTest = oHT.CenterText   'mittlerer Textabschnitt
oText.setString(CStr(oZellInhalt))         'Inhalt schreiben
oSeitenformat.rightPageHeaderContent = oHT   'rückschreiben
end sub


Gruß,
fiz
chrk
*******
Beiträge: 1670
Registriert: Sa, 22.09.2007 18:09

Re: Zellenwert in Kopfzeile übernehmen

Beitrag von chrk »

Könnte das ein einfacher Tippfehler sein?
Vergleiche die beiden Zeilen:

Code: Alles auswählen

oTest = oHT.CenterText   'mittlerer Textabschnitt
oText.setString(CStr(oZellInhalt))         'Inhalt schreiben
und entscheide Dich für eins.
fiz
**
Beiträge: 44
Registriert: Di, 16.01.2007 12:54
Wohnort: Hannover

Re: Zellenwert in Kopfzeile übernehmen

Beitrag von fiz »

Hallo chrk,

leider kommt das Makro gar nicht bis dahin.
Wenn es abbricht kommt folgende Fehlermeldung:
Basic Laufzeitfehler
Es ist eine Exception aufgetreten
Type: com.sun.star.container.NoSuchElementException
Message:
und die 4.Zeile wird gehighlighted, also diese hier:

Code: Alles auswählen

oSeitenFormat = odoc.StyleFamilies.getByName("PageStyle").getbyName("Standard")
Gruß,
fiz
chrk
*******
Beiträge: 1670
Registriert: Sa, 22.09.2007 18:09

Re: Zellenwert in Kopfzeile übernehmen

Beitrag von chrk »

Hey, jetzt bin ich richtig ein Bisschen stolz auf mich. :shock:
Mit der Coderei habe ich mich schon seit zwei/drei Jahren nicht mehr beschäftigt, und mit StarBasic schon gar nie.

Thomas hat sich zweimal vertippt, aber das ist nie aufgefallen, weil der ursprüngliche Fragesteller keine Rückmeldung gegeben hat.

Code: Alles auswählen

Sub KopfzeileAusZelle
odoc = thisComponent   'oder  StarDesktop.getCurrentComponent()
oZellInhalt = odoc.sheets(0).getCellRangeByName("A1").value
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
End Sub
NoSuchElementException konnte sich in der betreffenden Zeile auf zwei Elemente beziehen, und die Vorlage "Standard" existiert, aber PageStyle muss PageStyles heißen.

Und mit oTest/oText habe ich richtig gelegen, da ist er auch vor stehen geblieben, weil die Variable nicht vorbelegt war.
chrk
*******
Beiträge: 1670
Registriert: Sa, 22.09.2007 18:09

Re: Zellenwert in Kopfzeile übernehmen

Beitrag von chrk »

Neu28052008 hat geschrieben:Wie wird denn die Tabelle als Quelle für den Inhalt im Makro definiert ist? oZellInhalt = odoc.sheets(0); ist die 0 automatisch die Tabelle1?
odoc.sheets(0) ist das Objekt für die erste Tabelle, unabhängig vom Namen.

Es gibt für sheets bestimmt auch noch eine .count - Methode oder ähnliches, damit könnte man die letzte Tabelle im Dokument ermitteln, wenn man da zentrale Einstellungen unterbringen möchte.

Wenn Du aber über den Namen auswählen willst, geht folgende Variante:

Code: Alles auswählen

oZellInhalt = odoc.sheets.getByName("Tabelle3").getCellRangeByName("A1").value
Euch sollte übrigens bewusst sein, dass das Makro in dieser Form eine Kopfzeile für alle Tabellen setzt, die der Seitenvorlage "Standard" unterliegen. Das war ja auch nur ein schneller Wurf von Thomas. Alle Variablen sind lokal und wirken damit nicht dynamisch wie Feldbefehle. Da müsste man noch was komplexeres bauen.
fiz
**
Beiträge: 44
Registriert: Di, 16.01.2007 12:54
Wohnort: Hannover

Re: Zellenwert in Kopfzeile übernehmen

Beitrag von fiz »

HAllo Christian,

Wie bei dem Gast erscheint bei mir in der Kopfzeile nur eine "0"

Wenn wir da noch den tatsächlichen Zellwert von A1 reinkriegen, dann bist Du "mein Held".

Gruß,
fiz
chrk
*******
Beiträge: 1670
Registriert: Sa, 22.09.2007 18:09

Re: Zellenwert in Kopfzeile übernehmen

Beitrag von chrk »

Hallo fiz,
ich hab mich ganz heldenhaft durch diese Dokument gekämpft http://users.ooodev.org/~joesch/forum/calc_basic.pdf.

.value gibt nur nummerische Werte zurück, und mit solchen habe ich getestet.

Für Zeichenketten brauchst Du die .String Eigenschaft, also

Code: Alles auswählen

oZellInhalt = odoc.sheets(0).getCellRangeByName("A1").String
fiz
**
Beiträge: 44
Registriert: Di, 16.01.2007 12:54
Wohnort: Hannover

Re: Zellenwert in Kopfzeile übernehmen

Beitrag von fiz »

Vielen Dank Christian,
jetzt funktioniert es.

Absolut fantastisch wäre es, wenn man die Kopfzeile nun auch noch formatieren könnte.

Ich habe es mal versuchsweise mit

Code: Alles auswählen

oTest.CharHeight = 24
versucht, aber das hat nicht funktioniert.
Hat jemand einen Vorschlag, wie ich die Schrift groß und bunt kriege?

Es würde ja auch schon reichen, zu wissen wo und wie man das Standardformat der Kopfzeile ändern kann.

Gruß, fiz
fiz
**
Beiträge: 44
Registriert: Di, 16.01.2007 12:54
Wohnort: Hannover

Re: Zellenwert in Kopfzeile übernehmen

Beitrag von fiz »

Ich habe inzwischen erfahren, wie man dem Standard-Tabellenblatt sagt, es möge bitte eine große rote kopfzeile produzieren.
Doch leider, wenn das makro drüber gelaufen ist, ist alles wieder beim Alten (keine schwarze Schrift) :(

Es muss doch möglich sein, den Zeichensatz im Makro zu definieren.

Gruß,
Fiz
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Zellenwert in Kopfzeile übernehmen

Beitrag von turtle47 »

Hi Fiz,
fiz hat geschrieben: Es muss doch möglich sein, den Zeichensatz im Makro zu definieren.
Ist auch wirklich kein Problem. Ich habe mal den Code von Michaels Homepage genommen und den Code um den Teil der Farbformatierung für die Schrift und den Unterstrich erweitert.

Code: Alles auswählen

sub formattextheader
     Doc = thiscomponent
     StyleFamilies = Doc.StyleFamilies
     PageStyles = StyleFamilies.getByName("PageStyles")
     DefPage = PageStyles.getByName("Standard")
     DefPage.HeaderIsOn = True
     DefPage.FooterIsOn = True
     HContent = DefPage.RightPageHeaderContent
     HContent.RightText.String = "rechter text"
     oCursor = Hcontent.RightText.createTextCursor()
     oCursor.setPropertyValue("CharFontName", "Arial")
     oCursor.setPropertyValue("CharHeight", 16)
     oCursor.setPropertyValue("CharUnderline", 1) ' Unterstrich
     oCursor.setPropertyValue("CharColor",RGB(236, 31, 33)) 'Schriftfarbe
     HContent.LeftText.String = "linker text"
     HContent.CenterText.String = "mitte"
     oCursor = Hcontent.LeftText.createTextCursor()
     oCursor.setPropertyValue("CharFontName", "Arial")
     oCursor.setPropertyValue("CharHeight", 16)
     oCursor.setPropertyValue("CharUnderline", 1) ' Unterstrich
     oCursor.setPropertyValue("CharColor",RGB(236, 31, 33)) 'Schriftfarbe
     DefPage.RightPageHeaderContent = Hcontent   
end sub
Hilft das weiter?

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
fiz
**
Beiträge: 44
Registriert: Di, 16.01.2007 12:54
Wohnort: Hannover

Re: Zellenwert in Kopfzeile übernehmen

Beitrag von fiz »

Hallo Jürgen,

Ich muß mich dringend einmal etwas in dies für mich ungewohnte Sprache einlesen.
Tatsächlich produziert dein Code eine rote fette Kopfzeile, aber ich schaffe es einfach nicht ihn mit dem Code von Christian zu kombinieren, so dass der Inhalt der Zelle A1 in rot erscheint.
Kannst Du (oder jemand anderes) mir da ein letztes mal helfen?

Gruß,
Maren
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Zellenwert in Kopfzeile übernehmen

Beitrag von komma4 »

Maren,

gesetzt wird der Text bspw. mit
HContent.RightText.String = "rechter text"
dort setzt Du die Zeile von Christian ein

Code: Alles auswählen

HContent.RightText.String = _
doc.sheets.getByName("Tabelle3").getCellRangeByName("A1").getString()
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
fiz
**
Beiträge: 44
Registriert: Di, 16.01.2007 12:54
Wohnort: Hannover

Re: Zellenwert in Kopfzeile übernehmen

Beitrag von fiz »

Danke Winfried,

jetzt klappt alles :D und ich kann diesen Thread abschließen

Danke auch an die anderen,

Ciao,
Maren
Antworten