Komplexen Inhalt von Tabellenzellen vertauschen
Moderator: Moderatoren
Komplexen Inhalt von Tabellenzellen vertauschen
Hallo,
ich habe gestern angefangen, mich in die Programmierung mit OOBasic einzuarbeiten. Die Unterstützung durch die "IDE" ist ja nicht gerade sehr komfortabel ausgefallen. Kann man bei der Programmierung in Java eigentlich Eclipse nutzen (mit seinen Vorteilen, versteht sich)?
Zur Sache: Grund für mein Interesse ist, dass ich gerne komfortabel Karteikarten drucken möchte.
Dazu benutze ich eine 2-spaltige Tabelle mit 8 Zeilen pro Seite (A7-Karten). Die jeweilige Rückseite einer Karte finde ich also in (Zeile + 8, Spalte + 1 LOGISCHES-UND 1).
Es ist aber bei der Eingabe der Karten nicht besonders komfortabel, die Rückseite immer erst suchen zu müssen. Deshalb möchte ich die Rückseite neben die Vorderseite setzen, also in die rechte Spalte. Dann muss ich später nur noch ein Makro drüberlaufen lassen, das die entsprechenden Vertauschungen vornimmt.
Weil ich aber beliebige Formatierungen in einer Zelle zulassen möchte und insbesondere auch Tabellen in der Zelle, geht das nicht einfach mit der setString-Methode der Zelle, weil dann bereits die Styles verlorengehen, von Unterobjekten mal ganz zu schweigen.
Wie kann ich den kompletten komplexen Inhalt einer Zelle in eine andere kopieren?
Ich wurschtele zur Zeit mit Enumerations-Objekten herum, aber die Klassenhierarchien sind nicht gerade einfach zu verstehen. Leider ist ja nicht einmal eine komplette Reflection von Objekten möglich, sonst würde ich vielleicht begreifen, womit ich es bei einer Zelle / ihrem Inhalt genau zu tun habe.
Danke für eure Hilfe,
texol.
ich habe gestern angefangen, mich in die Programmierung mit OOBasic einzuarbeiten. Die Unterstützung durch die "IDE" ist ja nicht gerade sehr komfortabel ausgefallen. Kann man bei der Programmierung in Java eigentlich Eclipse nutzen (mit seinen Vorteilen, versteht sich)?
Zur Sache: Grund für mein Interesse ist, dass ich gerne komfortabel Karteikarten drucken möchte.
Dazu benutze ich eine 2-spaltige Tabelle mit 8 Zeilen pro Seite (A7-Karten). Die jeweilige Rückseite einer Karte finde ich also in (Zeile + 8, Spalte + 1 LOGISCHES-UND 1).
Es ist aber bei der Eingabe der Karten nicht besonders komfortabel, die Rückseite immer erst suchen zu müssen. Deshalb möchte ich die Rückseite neben die Vorderseite setzen, also in die rechte Spalte. Dann muss ich später nur noch ein Makro drüberlaufen lassen, das die entsprechenden Vertauschungen vornimmt.
Weil ich aber beliebige Formatierungen in einer Zelle zulassen möchte und insbesondere auch Tabellen in der Zelle, geht das nicht einfach mit der setString-Methode der Zelle, weil dann bereits die Styles verlorengehen, von Unterobjekten mal ganz zu schweigen.
Wie kann ich den kompletten komplexen Inhalt einer Zelle in eine andere kopieren?
Ich wurschtele zur Zeit mit Enumerations-Objekten herum, aber die Klassenhierarchien sind nicht gerade einfach zu verstehen. Leider ist ja nicht einmal eine komplette Reflection von Objekten möglich, sonst würde ich vielleicht begreifen, womit ich es bei einer Zelle / ihrem Inhalt genau zu tun habe.
Danke für eure Hilfe,
texol.
Hi,
lies bitte die Informationen im aller ersten Thema dieses Forums. Dort findest Du viele Links zu Starbasic.
Inhalt von Zellen tauschen:
mfg
Michael
lies bitte die Informationen im aller ersten Thema dieses Forums. Dort findest Du viele Links zu Starbasic.
Inhalt von Zellen tauschen:
Code: Alles auswählen
myDoc = thisComponent
mySheet = myDoc.sheets(0)
mycell = mysheet.getCellByPosition(0,0)
mycell2 = mysheet.getCellByPosition(0,1)
myString=mycell.string
myString2=mycell2.string
mycell.string=myString2
mycell2.string=myString
Michael
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
FAQ zu Starbasic -> http://www.starbasicfaq.de
Code: Alles auswählen
myString=mycell.string
myString2=mycell2.string
mycell.string=myString2
mycell2.string=myString

Habe mal ein bisschen in den englischsprachigen Foren gestöbert: Kann es sein, dass das, was ich vorhabe, gar nicht oder nur sehr schwierig möglich ist?
Per Zwischenablage, die man dann in eine leere Zelle zwischenspeichert, wäre es vielleicht auch machbar...
Hallo texol,
nun, das ist relativ simpel.
Wenn Du Vorder- und Rückseite der Karteikarte in 2 Spalten organisiert hast, z.B. Spalte B und C, dann kannst Du beim Druckaufruf per Makro die Spalte, die Du für den Druck nicht gebrauchen kannst, ausblenden (entspricht dem Menübefehl Format-Spalte-Ausblenden). Die ausgeblendete Spalte wird nicht mit ausgedruckt. Nach dem Druckaufruf wird die Spalte dann einfach wieder eingeblendet. Den jeweiligen Bereich benennst Du mit "Vorderseite" bzw. "Rueckseite".
Der Code sieht dann für die Vorderseite wie folgt aus:
oNRange = oSheet.getCellRangeByName("Rueckseite") 'Spalte Rückseite ausblenden
oRangeAddress = oNRange.getRangeAddress
oCol = oSheet.Rows(oRangeAddress.StartCol)
oCol = oSheet.Rows(gewünschte Spalte)
oCol.IsVisible = False 'blendet die Spalte aus
'hier erfolgt der Druckaufruf
oCol.IsVisible = True 'blendet die Spalte wieder ein
nun, das ist relativ simpel.
Wenn Du Vorder- und Rückseite der Karteikarte in 2 Spalten organisiert hast, z.B. Spalte B und C, dann kannst Du beim Druckaufruf per Makro die Spalte, die Du für den Druck nicht gebrauchen kannst, ausblenden (entspricht dem Menübefehl Format-Spalte-Ausblenden). Die ausgeblendete Spalte wird nicht mit ausgedruckt. Nach dem Druckaufruf wird die Spalte dann einfach wieder eingeblendet. Den jeweiligen Bereich benennst Du mit "Vorderseite" bzw. "Rueckseite".
Der Code sieht dann für die Vorderseite wie folgt aus:
oNRange = oSheet.getCellRangeByName("Rueckseite") 'Spalte Rückseite ausblenden
oRangeAddress = oNRange.getRangeAddress
oCol = oSheet.Rows(oRangeAddress.StartCol)
oCol = oSheet.Rows(gewünschte Spalte)
oCol.IsVisible = False 'blendet die Spalte aus
'hier erfolgt der Druckaufruf
oCol.IsVisible = True 'blendet die Spalte wieder ein
mit freundlichen Grüßen
Rainer
Rainer
Eckhardt, in jedem Falle danke für deine Mühe!
Allerdings arbeite ich nicht mit einem Tabellendokument, sondern mit einem Textdokument, und eine XTextTable ist anders aufgebaut als ein Sheet (oder wie auch immer das entsprechende Objekt heißt).
Bei einer TextTable kann man über getColumns auf die Spalten zugreifen. XTableColumns.getByIndex liefert aber nur ein Objekt vom Typ XInterface zurück - das keine Eigenschaft IsVisible hat
Ich habe gerade mal ein bisschen mit Calc herumgespielt, aber für die Textverarbeitungsaufgaben, die ich für eine Karteikarte benötige, ist das zu eingeschränkt bzw. unkomfortabel, man kann zB. nur für die gesamte Zelle die Ausrichtung festlegen, nicht für eine einzelne Zeile darin...
Aber deine Idee hat mich auf einen anderen Gedanken gebracht: das Ergebnis der Ausblendung einer Spalte erreiche ich auch, indem ich den Inhalt dieser Spalte ganz einfach lösche: Spalte selektieren - entfernen. Dann wird diese Spalte faktisch auch nicht gedruckt. Anschließend rückgängig machen und umgekehrt.
Und wenn man Papier sparen will, kann man auf der Hälfte der Seiten die (im Verhältnis zur aktuellen Druckseite) umgekehrte Seite löschen und nochmal auf die bereits links bedruckten Seiten die rechte Seite anderer Karten drucken.
Viele Grüße,
texol.
Allerdings arbeite ich nicht mit einem Tabellendokument, sondern mit einem Textdokument, und eine XTextTable ist anders aufgebaut als ein Sheet (oder wie auch immer das entsprechende Objekt heißt).
Bei einer TextTable kann man über getColumns auf die Spalten zugreifen. XTableColumns.getByIndex liefert aber nur ein Objekt vom Typ XInterface zurück - das keine Eigenschaft IsVisible hat

Ich habe gerade mal ein bisschen mit Calc herumgespielt, aber für die Textverarbeitungsaufgaben, die ich für eine Karteikarte benötige, ist das zu eingeschränkt bzw. unkomfortabel, man kann zB. nur für die gesamte Zelle die Ausrichtung festlegen, nicht für eine einzelne Zeile darin...
Aber deine Idee hat mich auf einen anderen Gedanken gebracht: das Ergebnis der Ausblendung einer Spalte erreiche ich auch, indem ich den Inhalt dieser Spalte ganz einfach lösche: Spalte selektieren - entfernen. Dann wird diese Spalte faktisch auch nicht gedruckt. Anschließend rückgängig machen und umgekehrt.
Und wenn man Papier sparen will, kann man auf der Hälfte der Seiten die (im Verhältnis zur aktuellen Druckseite) umgekehrte Seite löschen und nochmal auf die bereits links bedruckten Seiten die rechte Seite anderer Karten drucken.
Viele Grüße,
texol.