Seite 1 von 1
Gelöst: Texttabelle getRows() getColumns() Spaltenbreite
Verfasst: Di, 29.05.2007 23:58
von agrupe
Hi,
ich versuche gerade eine Spalte einer Texttabelle zu adressieren mit dem Ziel sie später in der Breite anzupassen.
Die Zuweisung von oSpalten im Code (s.u.) geht.
Die Zuweisung von oSpalte liefert NULL bei der Zuweisung und somit eine Fehlermeldung beim Versuch, die Spalte einzufärben.
oSpalten=oTextTable.getColumns
oSpalte=oSpalten.getByIndex(0)
oSpalte.backColor=RGB(215,255,255)
Ersetze ich getColumns durch getRows und lasse alles andere unverändert kann ich die erste Zeile prima einfärben.
Das kann doch nicht sein, oder?
Gruß
Andreas
Verfasst: Mi, 30.05.2007 10:46
von komma4
getColumns() liefert Dir nicht das gesuchte Objekt - sondern "nur" einen Container, der das Einfügen und Löschen von Spalten erlaubt.
Hole Dir die Anzahl der Spalten mit
und zum Färben dann sowas wie
Code: Alles auswählen
oSpalte=oTextTable.getCellRangeByName( "B1:B" & iAnzahlSpalten )
Hilft das weiter?
Verfasst: Mi, 30.05.2007 15:23
von agrupe
Hi,
eigentlich such ich eine Möglichkeit, die Breite einer Spalte zu ändern, das Färben war nur ein Beispiel (das bei Zeilen einwandfrei läuft).
Ich verstehe dennoch nicht, warum ich mit getRows eine Zeile adressieren kann, getColumns aber einen Fehler erzeugt, wenn ich eine Spalte ansprechen will.
Wie auch immer - kannst du mir sagen, wie ich die Spaltenbreite ändern kann?
Merci
Andreas
Verfasst: Mi, 30.05.2007 16:05
von komma4
Mit getRows() bekommst Du ein anders geartetes Objekt zum Arbeiten zurück: deswegen geht es mit Zeilen.
Spaltengrösse geht über ein gesondertes Objekt: TableColumnSeparators
Ein Beispiel findest Du in
ATL2 - AutoTextListe2, Auszug:
Code: Alles auswählen
oTabTrenner = oTable.TableColumnSeparators
oTabTrenner( 0 ).Position = 2500
oTabTrenner( 1 ).Position = 3500
oTable.TableColumnSeparators = oTabTrenner
Viel Erfolg!
Verfasst: Do, 31.05.2007 05:26
von agrupe
Hi Winfried,
wenn ich das einbaue, bekomme ich zur Laufzeit bereits bei der Zuweisung
oTabTrenner = oTextTable.TableColumnSeparators
fogende Fehlermeldung:
Kein Zugriff auf Objekt.
Falsche Verwendung eines Objekts.
Gruß
Andreas
Verfasst: Do, 31.05.2007 09:40
von komma4
ist aus der Ferne schwierig zu beurteilen: kannst Du mehr Code zeigen, damit wir die Definiton / Verwendung der beteiligten Variablen sehen...
Hast Du xray im Einsatz und kannst die Objekte näher untersuchen....?
Verfasst: Do, 31.05.2007 13:09
von agrupe
Hi,
klar kann ich mehr zeigen. Der Code lief bislang einwandfrei; ich habe lediglich die DIM Zeile eingebaut und die letzte zeile, in der das Programm dann auch den Fehler meldet.
Danke schon mal für die Hilfe!
Andreas
--------------------
...
Dim oTabTrenner as Object
sURL=convertToURL("home/OO/Documents/SalesDB/Rechnungsformular.odt")
oDoc = StarDesktop.loadComponentFromURL(sURL, "_blank",0, Arg())
oText=oDoc.Text ' Text des Dokuments
oTextCursor = oText.createTextCursor() ' Textcursor im Textteil des Dokuments erzeugen
oTextCursor.gotoEnd(False) ' Textcursor ans Dokumentende setzen
oTextTable = oDoc.createInstance("com.sun.star.text.TextTable")
With oTextTable
.HoriOrient = 0
.leftMargin=1000
.rightMargin=1000
.Name="Überschrift"
.initialize (iMaxZeilen+1,5) '# (Zeilen, Spalten ab 1 gezählt)
End with
oText.insertTextContent( oTextCursor, oTextTable, FALSE) 'tabelle wird ins Dokument geschrieben
'tabellenzellen füllen
oTextTable.setDataArray(aTabinh()) ' das gefüllte Array wird nun angezeigt
oTabTrenner = oTextTable.TableColumnSeparators
Verfasst: Do, 31.05.2007 13:14
von agrupe
... eines noch - im normalen Variableninspektor in der IDE kann ich auf das Tabellenelement zugreifen und auch die Werte prima lesen; es sind 4 mit den Werten 2000, 4000, 6000 und 8000 bei Position sowie jeweils dem Wert "True" bei IsVisible.
Für mich sieht es so aus, als muesste ich eine Funktion aufrufen, um die Werte auszulesen und nicht einfach eine Zuweisung auf ein Objekt machen ...
Verfasst: Do, 31.05.2007 17:30
von komma4
oTabTrenner ist kein Object, sondern es wird ein Array von Tabellentrenn-Objekten zurück gegeben.
Leider läuft der Code hier nicht (mehr?): muss das genauer untersuchen, ich vermute aber mal einen Fehler der 2.2.0 ("Früher ging's noch").
Verfasst: Do, 31.05.2007 18:38
von agrupe
Hallo,
danke für deine Hilfe. Wenn es tatsächlich ein bug ist, bekomme ich die Krätze ...
Ich brauche die "handgeschriebene" Tabelle ja, weil es einen Bug im PDF-Export des Formular-Tabellenelements gibt und sie der work-around dafür sein soll...
Schönen Abend noch!
Andreas
Verfasst: Do, 31.05.2007 19:33
von komma4
Ich nehme das mit dem Bug zurück: nach dem Posting liess ich ATL2 auf der Kiste (XPpro/2.2.0) laufen, da ging's.
Ich schau' mit das nochmal jetzt hier (Linux/2.2.0) an.... l'8ter
Verfasst: Do, 31.05.2007 20:08
von komma4
sorry: auch Dein Beispielcode (ohne das Füllen) läuft nun einwandfrei.
Allerdings habe ich andere Variablennamen verwendet. In einem Modul meiner Test-Bibliothek, war ein OPTION EXPLICIT, welches die Definition der verwendeten Variablen erforderte. Einige -wie oTable- waren anderswo definiert, andere nicht: deshalb der Namenswechsel.
Dieses Beispiel nun habei ch in die (fast leere) STANDARD-Bibliothek eingetragen und auf ein manuell (STRG+N) erzeugtes, leeres Dokument angewendet: OK
Checke doch mal, ob die von Dir verwendeten Variablen anderswo definiert werden.
this one is working with OOo2.2.0
Code: Alles auswählen
Sub TTS_TextTabellenSpalten
oTTS_Dokument = ThisComponent
oTTS_Text = ThisComponent.Text
oTTS_Cursor = oTTS_Text.createTextCursor()
oTTS_Cursor.gotoEnd(False) ' Textcursor ans Dokumentende setzen
oTTS_Tabelle = ThisComponent.createInstance("com.sun.star.text.TextTable")
With oTTS_Tabelle
.HoriOrient = 0
.leftMargin=1000
.rightMargin=1000
.Name="Überschrift"
.initialize (125,5) '# (Zeilen, Spalten ab 1 gezählt)
End with
oTTS_Text.insertTextContent( oTTS_Cursor, oTTS_Tabelle, FALSE) 'tabelle wird ins Dokument geschrieben
'tabellenzellen füllen
'oTextTable.setDataArray(aTabinh()) ' das gefüllte Array wird nun angezeigt
oTTS_TabTrenner = oTTS_Tabelle.TableColumnSeparators
' Trennposition in 10-Tausendstel
oTTS_TabTrenner( 0 ).Position = 2500
oTTS_TabTrenner( 1 ).Position = 3500
oTTS_Tabelle.TableColumnSeparators = oTTS_TabTrenner
End Sub
Viel Spass!
Verfasst: Fr, 01.06.2007 08:20
von agrupe
Danke für die Hinweise.
Der Fehler war, dass ich den oTabTrenner per
DIM oTabTrenner as Object
definiert habe.
Richtig ist:
DIM oTabTrenner()
da (wie du bereits in einer vorhergehenden Antwort geschrieben hast) kein Objekt sondern ein Array von Objekten zurück gegeben wird.
Nun klappt es auch mit option explicit.
Da soll man drauf kommen ...
Andreas
P.S. Wie setzt man den Titel auf gelöst (und benennt ihn um, denn das eigentliche Problem lag ja woanders)
Schön, dass ich keine Krätze kriegen muss

Verfasst: Fr, 01.06.2007 10:03
von komma4
Du (aus Author) kannst wohl das erste posting über die entsprechende Schaltfläche editieren....