Seite 1 von 1

table border? Inhalt der Zelle abfragen?

Verfasst: Fr, 23.07.2004 18:56
von tommy
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

Verfasst: Sa, 24.07.2004 10:27
von Toxitom
Hey Tommy,

zwei Fragen, zwei Antwort-Versuche:
1) Wie kann man die Umrandungsbreite(Border) der Tabelle ermitteln?
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).
2) Wie findet man heraus, was in jede Zelle sich befindet (Text, Bild, ...)?
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.
Gruss
Thomas

Verfasst: Sa, 24.07.2004 20:59
von tommy
Hi Thomas,
danke für die Antwort.
Zu 1) Ich habe folgendes gemacht

Code: Alles auswählen

MsgBox oCell.LeftBorder.OuterLineWidth
, 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

Verfasst: Sa, 24.07.2004 22:53
von Stephan
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

Verfasst: So, 25.07.2004 08:48
von Toxitom
Hey,
ann kann man aber nicht herausfinden, in welche Zelle der Grafik sich befindet, oder?
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.

Gruss
Thomas

Verfasst: Fr, 30.07.2004 15:34
von tommy
Hallo, ich habe heraus gefunden, wie man die Inhalte der Zelle abfragen kann. Sie wird wie die im Dokument behandelt.

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
Gruß

Tommy