Hallo,
ich habe bezüglich der TextTable folgende Fragen:
1) Wie kann man die Umrandungsbreite(Border) der Tabelle ermitteln?
2) Wie findet man heraus, was in jede Zelle sich befindet (Text, Bild, ...)?
Kann jemand mir helfen?
Gruß
Tommy
table border? Inhalt der Zelle abfragen?
Moderator: Moderatoren
Hey Tommy,
zwei Fragen, zwei Antwort-Versuche:
Gruss
Thomas
zwei Fragen, zwei Antwort-Versuche:
Das sit nicht einfach. Soweit ich mich errinnere, igibt es die Gesammtumrahmung gar nicht, sondern diese setzt sich aus den Eigenschaften der Zellen-Umrahmung zusammen. Und die kannst du natürlichauslesen (Eigenschaft der Tabellenzelle).1) Wie kann man die Umrandungsbreite(Border) der Tabelle ermitteln?
Auch nicht so einfach zu beantworten. Jede Zelle kann als Inhalt Text (String) , Zahlen (Values) und Formeln (Formular) beinhalten, jedoch keine Grafik. Dieses sind immer Objekte der oder des Drawpage-Objektes, eventuell noch eines Rahmens. Und das Grafikobjekt wiederum ist verankert am Zelleninhalt. Also, aus der Zelle selbst dürftest du nicht auf die Grafik kommen, sondern über den Objektarray (enummeration) der Drawpage.... aber da wird es kompliziert.2) Wie findet man heraus, was in jede Zelle sich befindet (Text, Bild, ...)?
Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Hi Thomas,
danke für die Antwort.
Zu 1) Ich habe folgendes gemacht, als Ausgabe ist die Zahl 2, in welche Einheit ist diese Zahl? Im Tabelleneigenschaft->Umrandung->Linie-Stil steht 0,05pt
Zu 2) schade, daß die Grafiken nicht so einfach aus der Zelle ausgelesen werden können. Nehmen wir an, dass man mit Objektarray (enummeration) der Drawpage die Grafiken auslesen kann, dann kann man aber nicht herausfinden, in welche Zelle der Grafik sich befindet, oder?
Gruß
Tommy
danke für die Antwort.
Zu 1) Ich habe folgendes gemacht
Code: Alles auswählen
MsgBox oCell.LeftBorder.OuterLineWidth
Zu 2) schade, daß die Grafiken nicht so einfach aus der Zelle ausgelesen werden können. Nehmen wir an, dass man mit Objektarray (enummeration) der Drawpage die Grafiken auslesen kann, dann kann man aber nicht herausfinden, in welche Zelle der Grafik sich befindet, oder?
Gruß
Tommy
Ich hätte vielleicht eine Idee...aber zunächst folgende Frage:
Eine Zelle enthalte eine Grafik die "in der Zelle" sprich am Zellinhalt verankert ist. Ich stelle fest wenn ich die Breite der Zelle so verkleinere das sie schmaler wird als die Breite der Grafik, die Grafik proportional verkleinert wird - selbst dann wenn in den Eigenschaften der Grafik "Größe schützen" aktiviert ist.
Verhält sich das immer so oder gibt es Ausnahmen?
Wenn das immer so wäre, würde ich erst alle Grafiken ermitteln und mir die schmalste heraussuchen. Dann würde ich alle Zellen aller Tabellen durchlaufen und die Zellbreite verkleinern auf einen Wert der schmaler als die schmalste Grafik ist. Nun würde ich prüfen ob sich die Breite irgeneiner Grafik verändert hat. Ist das der Fall befindet sich die Grafik in der aktuellen Zelle. Nach der Prüfung der Zelle die ursprüngliche Breite wiederherstellen und nächste Zelle prüfen.
Zugegeben ein etwas eigenartiges Vorgehen - aber wenn es keine bessere Möglichkeit gibt, könnte das eventuell funktionieren.
Gruß
Stephan
Eine Zelle enthalte eine Grafik die "in der Zelle" sprich am Zellinhalt verankert ist. Ich stelle fest wenn ich die Breite der Zelle so verkleinere das sie schmaler wird als die Breite der Grafik, die Grafik proportional verkleinert wird - selbst dann wenn in den Eigenschaften der Grafik "Größe schützen" aktiviert ist.
Verhält sich das immer so oder gibt es Ausnahmen?
Wenn das immer so wäre, würde ich erst alle Grafiken ermitteln und mir die schmalste heraussuchen. Dann würde ich alle Zellen aller Tabellen durchlaufen und die Zellbreite verkleinern auf einen Wert der schmaler als die schmalste Grafik ist. Nun würde ich prüfen ob sich die Breite irgeneiner Grafik verändert hat. Ist das der Fall befindet sich die Grafik in der aktuellen Zelle. Nach der Prüfung der Zelle die ursprüngliche Breite wiederherstellen und nächste Zelle prüfen.
Zugegeben ein etwas eigenartiges Vorgehen - aber wenn es keine bessere Möglichkeit gibt, könnte das eventuell funktionieren.
Gruß
Stephan
Hey,
Gruss
Thomas
Das sollte schon funktionieren. Jedes Objekt (-> hier Grafik) hat ja bestimmte Eigenschaften, und da gibt es sicher auch eine "Anker" Eigenschaft, also eine Verknüfung auf die Fixierung der Grafik. Könnte mir vorstellen, dass dort eine Verbindung zum Zellenobjekt besteht, die man dann eben über entsprechende Bedingungen und Schleifen abfragen müsste. Hab aber im Moment wenig Zeit zum Testen.ann kann man aber nicht herausfinden, in welche Zelle der Grafik sich befindet, oder?
Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Hallo, ich habe heraus gefunden, wie man die Inhalte der Zelle abfragen kann. Sie wird wie die im Dokument behandelt.
Gruß
Tommy
Code: Alles auswählen
For i=0 To lSpaltenAnz-1
For j=0 To lZeilenAnz-1
oZellObjekt = oTable.getCellByPosition(i,j)
sZellenName(i,j) = oZellObjekt.CellName
sZellenInhalt(i,j) = oZellObjekt.String
oParEnum =oZellObjekt.getText().createEnumeration()
Do While oParEnum.hasMoreElements()
oPar = oParEnum.nextElement()
If oPar.supportsService("com.sun.star.text.Paragraph") Then
oAbsatz = oPar.createEnumeration()
While oAbsatz.hasMoreElements()
oTextPortion = oAbsatz.nextElement()
sType = oTextPortion.TextPortionType
sTextPortionInhalt = oTextPortion.GetString
If sType = "Text" AND sTextPortionInhalt<> "" Then
Msg = Msg & sZellenName(i,j) & ": "& sTextPortionInhalt & Chr(13)
Elseif sType = "Frame" Then
oEnum2 = oTextPortion.createContentEnumeration ("com.sun.star.text.TextGraphicObject")
While oEnum2.hasMoreElements()
oGraphicObject = oEnum2.nextElement()
Msg = Msg & sZellenName(i,j) & " enthält ein Bild, es heißt " & oGraphicObject.Name
Wend
end if
Wend
End If
Loop
next j
next i
MsgBox Msg
Tommy