Gelöst: Texttabelle getRows() getColumns() Spaltenbreite

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Gelöst: Texttabelle getRows() getColumns() Spaltenbreite

von komma4 » Fr, 01.06.2007 10:03

Du (aus Author) kannst wohl das erste posting über die entsprechende Schaltfläche editieren....

von agrupe » Fr, 01.06.2007 08:20

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 :P

von komma4 » Do, 31.05.2007 20:08

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!

von komma4 » Do, 31.05.2007 19:33

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

von agrupe » Do, 31.05.2007 18:38

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

von komma4 » Do, 31.05.2007 17:30

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").

von agrupe » Do, 31.05.2007 13:14

... 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 ...

von agrupe » Do, 31.05.2007 13:09

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

von komma4 » Do, 31.05.2007 09:40

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....?

von agrupe » Do, 31.05.2007 05:26

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

von komma4 » Mi, 30.05.2007 16:05

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!

von agrupe » Mi, 30.05.2007 15:23

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

von komma4 » Mi, 30.05.2007 10:46

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

Code: Alles auswählen

iAnzahlSpalten = oTextTable.getColumns().getCount()
und zum Färben dann sowas wie

Code: Alles auswählen

oSpalte=oTextTable.getCellRangeByName( "B1:B" & iAnzahlSpalten )
Hilft das weiter?

Gelöst: Texttabelle getRows() getColumns() Spaltenbreite

von agrupe » Di, 29.05.2007 23:58

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

Nach oben