Seite 1 von 1
Zellenwert in Kopfzeile übernehmen
Verfasst: Mo, 26.05.2008 16:27
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
Re: Zellenwert in Kopfzeile übernehmen
Verfasst: Di, 27.05.2008 09:48
von RS
Re: Zellenwert in Kopfzeile übernehmen
Verfasst: Di, 27.05.2008 11:46
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
Re: Zellenwert in Kopfzeile übernehmen
Verfasst: Di, 27.05.2008 11:57
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.
Re: Zellenwert in Kopfzeile übernehmen
Verfasst: Di, 27.05.2008 17:43
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
Re: Zellenwert in Kopfzeile übernehmen
Verfasst: Di, 27.05.2008 18:19
von chrk
Hey, jetzt bin ich richtig ein Bisschen stolz auf mich.
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.
Re: Zellenwert in Kopfzeile übernehmen
Verfasst: Mi, 28.05.2008 18:30
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.
Re: Zellenwert in Kopfzeile übernehmen
Verfasst: Do, 29.05.2008 16:25
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
Re: Zellenwert in Kopfzeile übernehmen
Verfasst: Do, 29.05.2008 18:33
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
Re: Zellenwert in Kopfzeile übernehmen
Verfasst: Fr, 30.05.2008 09:46
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
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
Re: Zellenwert in Kopfzeile übernehmen
Verfasst: Mo, 02.06.2008 14:57
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
Re: Zellenwert in Kopfzeile übernehmen
Verfasst: Mo, 02.06.2008 18:38
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
Re: Zellenwert in Kopfzeile übernehmen
Verfasst: Di, 10.06.2008 14:20
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
Re: Zellenwert in Kopfzeile übernehmen
Verfasst: Di, 10.06.2008 17:06
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()
Re: Zellenwert in Kopfzeile übernehmen
Verfasst: Di, 10.06.2008 18:46
von fiz
Danke Winfried,
jetzt klappt alles

und ich kann diesen Thread abschließen
Danke auch an die anderen,
Ciao,
Maren