Seite 1 von 1

[gelöst]Einfärben der Zellenränder einer Writer Texttabelle

Verfasst: Di, 30.10.2012 22:04
von F3K Total
Guten Abend zusammen,

mit meinem Makro habe ich folgendes Problem:
Ich öffne per Makro einen mit dem Reportbuilder erzeugten Bericht. Dieser Bericht ist ein reines Writer-Dokument.
Es enthält anstelle der Kontrollfelder, die im Bearbeitungsmodus des Berichts plaziert werden, Writer Tabellen, die z.B über

Code: Alles auswählen

otable = oReport.TextTables.getbyindex(2)
angesprochen werden können.
Einem Zellbereich einer Tabelle kann z.B. über

Code: Alles auswählen

dim oborder as new com.sun.star.table.BorderLine
ocellrange = otable.getcellrangebyposition(0,j,1,k)
    with oborder
        .Color = 13421772
        .OuterLineWidth = 25
    end with
    with ocellrange
        .TopBorder = oborder
        .LeftBorder = oborder
        .RightBorder = oborder
        .BottomBorder = oborder
    end with
die Farbe der Bereichsränder sowie die Strichstärke zugeordnet werden.
Das klappt wunderbar, wenn ich das Dokument sichtbar öffne.

Wenn ich es aber unsichtbar, im Hintergrund öffne, fehlen Randabschnitte, aber nur auf der ersten Seite des Berichtes.
Baue ich ein XRAY ein, oder schalte ich das Dokument einmal per

Code: Alles auswählen

oFrame = oreport.currentcontroller.frame
owindow = oframe.containerwindow
owindow.setVisible(true)
sichtbar, sind alle gewünschten Zellränder eingefärbt.
Der Fehler hängt irgendwie mit der nicht erzeugten Ansicht zusammen.
Hat jemand dazu eine Idee?

Anbei zwei Beispieldokumente, die mit dem gleichen Makro formatiert und gespeichert wurden.

Beste Grüße von Rik

Re: Einfärben der Zellenränder einer Writer Texttabelle

Verfasst: Di, 30.10.2012 23:47
von Karolus
Hallo
Ich hab da ein Verständnissproblem - warum will man unsichtbaren Dingen irgendwelche optische Attribute zuordnen?

Kannst du das nicht zu dem Zeitpunkt machen wenn das Dok tatsächlich sichtbar geöffnet wird?

Karolus

Re: Einfärben der Zellenränder einer Writer Texttabelle

Verfasst: Mi, 31.10.2012 06:48
von F3K Total
Hallo Karolus,
es handelt sich um den automatischen Export von etwa 20 Dateien, die direkt als .pdf gespeichert werden.
Wenn ich sie sichtbar öffne, flackern sie nacheinander auf den Schirm, werden gespeichert und wieder geschlossen.
Das sieht nicht schön aus. Darum möchte ich sie im Hintergrund öffen und bearbeiten. Sichtbar ist nur der wachsende Statusbalken: Datei 1/21, Datei 2/21 usw.

Gruß Rik

Re: Einfärben der Zellenränder einer Writer Texttabelle

Verfasst: Mi, 31.10.2012 10:51
von balu
Hallo Rik,

nein, ich hab mir deine Dateien nicht angeschaut. Das nur am Rande.

Wenn ich dich jetzt richtg versteh, hast Du ein Problem mit der "ViewData", siehe auch meinen Thread dazu: Hidden-Datei kein Fenster fixierbar?. Dort hatten mir DPunch und Karolus mitgeteilt das dies nicht direkt geht, sondern eventuell nur mittels Stream-Zugriff auf die settings.xml.
Wie das allerdings mit dem streamen geht, weiß ich nicht, keine Ahnung. Aber da können dir wohl andere helfen, z.B. Karolus oder DPunch.

Es kann aber auch sein, das ich mit meiner Vermutung "ViewData" vollkommen daneben liege.

Vielleicht solltest Du mal anstatt mit Hidden lieber mit Minimized testen.



Gruß
balu

Re: Einfärben der Zellenränder einer Writer Texttabelle

Verfasst: Mi, 31.10.2012 20:50
von F3K Total
Hallo Balu,
balu hat geschrieben:Wenn ich dich jetzt richtg versteh, hast Du ein Problem mit der "ViewData"
Das weiss ich eben leider nicht. Ich kann nur beobachten, dass die Zellränder dann komplett eingefärbt werden, wenn ich zwischendurch z.B. Xray oder eine Messagebox öffne. Versuche mit dem ViewCursor ala

Code: Alles auswählen

    oViewCursor.jumpToFirstPage
    oViewCursor.jumpToStartOfPage
    oViewCursor.jumpToEndOfPage
    oViewCursor.jumpToLastPage
bringen insoweit eine Verbesserung, als dass nun alle Ränder richtig eingefärbt werden, wenn die Tabelle länger als die erste Seite ist. Befindet sich die Tabelle nur auf der ersten Seite, bleibt der Fehler.

Beste Grüße von Rik

Re: [gelöst]Einfärben der Zellenränder einer Writer Texttabe

Verfasst: Mi, 31.10.2012 21:17
von F3K Total
Hallo zusammen,
ich habe eine Lösung gefunden. Wenn ich statt des Cellranges wie hier

Code: Alles auswählen

dim oborder as new com.sun.star.table.BorderLine
ocellrange = otable.getcellrangebyposition(0,j,1,k)
    with oborder
        .Color = 13421772
        .OuterLineWidth = 25
    end with
    with ocellrange
        .TopBorder = oborder
        .LeftBorder = oborder
        .RightBorder = oborder
        .BottomBorder = oborder
    end with
die einzelnen Zellen direkt anspreche:

Code: Alles auswählen

for m = 0 to 1
   for n = 0 to 6
     ocell = onewcellrange.getcellbyposition(m,n)
      if n = 0 then ocell.TopBorder = oborder
      if m = 0 then ocell.LeftBorder = oborder
      if m = 1 then ocell.RightBorder = oborder
      if n = 6 then ocell.BottomBorder = oborder
   next n
next m
ist alles wie gewünscht.
Grüße von Rik