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

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

agrupe
****
Beiträge: 108
Registriert: Do, 08.12.2005 17:23

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

Beitrag 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
Zuletzt geändert von agrupe am Fr, 01.06.2007 14:00, insgesamt 3-mal geändert.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Beitrag 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

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?
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)
agrupe
****
Beiträge: 108
Registriert: Do, 08.12.2005 17:23

Beitrag 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
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Beitrag 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!
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)
agrupe
****
Beiträge: 108
Registriert: Do, 08.12.2005 17:23

Beitrag 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
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Beitrag 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....?
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)
agrupe
****
Beiträge: 108
Registriert: Do, 08.12.2005 17:23

Beitrag 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
agrupe
****
Beiträge: 108
Registriert: Do, 08.12.2005 17:23

Beitrag 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 ...
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Beitrag 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").
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)
agrupe
****
Beiträge: 108
Registriert: Do, 08.12.2005 17:23

Beitrag 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
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Beitrag 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
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)
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Beitrag 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!
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)
agrupe
****
Beiträge: 108
Registriert: Do, 08.12.2005 17:23

Beitrag 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 :P
OO 3.2 unter OpenSuse 11
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Beitrag von komma4 »

Du (aus Author) kannst wohl das erste posting über die entsprechende Schaltfläche editieren....
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)
Antworten