table border? Inhalt der Zelle abfragen?

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

Moderator: Moderatoren

tommy
***
Beiträge: 59
Registriert: Fr, 16.04.2004 15:00
Wohnort: Aachen

table border? Inhalt der Zelle abfragen?

Beitrag 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
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag 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
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
tommy
***
Beiträge: 59
Registriert: Fr, 16.04.2004 15:00
Wohnort: Aachen

Beitrag 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
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag 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
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag 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
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
tommy
***
Beiträge: 59
Registriert: Fr, 16.04.2004 15:00
Wohnort: Aachen

Beitrag 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
Antworten