Seite 1 von 1
die erste Zelle eines Bereiches ermitteln
Verfasst: Fr, 09.07.2010 16:05
von clag
Hallo Leutz,
ich hoffe ihr unterstellt mir nicht gleich wieder das Suchfaulfieber
aber meine Suche fördert nichts zu Tage was meine Frage beantwortet
wie ermittle ich die niederwertigste Zelladresse eines markierten Bereiches ggf einer einzelnen Zelle
von einer teilmarkierten Spalt die oberste von einer teilmarkierten Zeile die linkeste
von einem Bereich die oberlinkste
Ihr versteht mich hoffentlich
Re: die erste Zelle eines Bereiches ermitteln
Verfasst: Fr, 09.07.2010 16:23
von komma4
Wenn in einer Calc-Datei (davon reden wir?) ein Zellbereich (und kein anderes Objekt, wie Diagramm oder Grafik, oder Kontrollelement) markiert ist:
Code: Alles auswählen
Print ThisComponent.getCurrentController().getSelection().AbsoluteName
Print ThisComponent.getCurrentController().getSelection().Rows().ElementNames(0)
Print ThisComponent.getCurrentController().getSelection().Columns().ElementNames(0)
So etwas findet man mit XRAY - oder der Suchfunktion
Hilft Dir das?
Re: die erste Zelle eines Bereiches ermitteln
Verfasst: Fr, 09.07.2010 16:33
von clag
Hi
ja sieht erst einmal gut aus
ob es das gesuchte ist weist erst wenn ich eingebaut habe und das erwartete angezeigt wird
werde ich ja gleich sehen
wie unterscheidet man eine einzelne markierte Zelle und von der aktuellen nur mit dem Rahmen ?
Re: die erste Zelle eines Bereiches ermitteln
Verfasst: Fr, 09.07.2010 16:48
von clag
aus irgend einem Grund wird die mittlere "Row" Zeile mit eine Basic Fehler beantwortet ? ElementNames nicht gefunden ?
die Column Zeile antwortet
kannst du mir kurz erläutern wie ich mit Xray etwas finden kann, ich dachte da müsste man eine Funktion eingeben und bekommt dann Info's dazu,
dafür muss ich die doch zuerst mal namentlich kennen ?
edit
wieso funktioniert dies nur bei 1 Zelle ist ein beliebiger Bereich markiert gibt es auch Basic Gemecker
Code: Alles auswählen
oCelle=oDoc.getCurrentSelection().getCellAddress()
sRow=oCelle.Row
sColumn=oCelle.column
Re: die erste Zelle eines Bereiches ermitteln
Verfasst: Fr, 09.07.2010 19:42
von komma4
clag hat geschrieben:aus irgend einem Grund wird die mittlere "Row" Zeile mit eine Basic Fehler beantwortet ? ElementNames nicht gefunden ?
die Column Zeile antwortet
Sorry... das war aus dem Kopf... die Eigenschaft gibt's bei ROWS nicht (erste und dritte Zeile ist korrekt).
Bei einer Zelle ist
.SupportedServiceNames
"com.sun.star.sheet.SheetCell"
bei mehreren
"com.sun.star.sheet.SheetCellRange"
Re: die erste Zelle eines Bereiches ermitteln
Verfasst: Fr, 09.07.2010 20:09
von clag
mai phen rai !
Re: die erste Zelle eines Bereiches ermitteln
Verfasst: Sa, 10.07.2010 05:08
von komma4
clag hat geschrieben:kannst du mir kurz erläutern wie ich mit Xray etwas finden kann, ich dachte da müsste man eine Funktion eingeben und bekommt dann Info's dazu,
Zunächst solltest Du zusätzlich das SDK installiert haben und XRAY den Pfad dazu bekannt geben.
Startpunkt kann dann
Code: Alles auswählen
xray ThisComponent.getCurrentController().getSelection()
sein, in der Anzeige auf eine der angezeigten Eigenschaften (properties) positionieren und Schaltfläche
Xray on the property/method klicken. Alternativ die Schaltfläche
SDK documentation auslösen.
Hilft das weiter?
Re: die erste Zelle eines Bereiches ermitteln
Verfasst: Sa, 10.07.2010 06:31
von clag
Hallo Komma4
werde ich dann auch gleich installieren
ich befürchte allerdings, so eine ProfiHilfe kann meine Basic SAU Fragen oft nicht verstehen und damit auch nicht beantworten
darum frage ich gern hier den Menschen
1.
die einzelne Zelle die durch den Rahmen markiert ist liest man mit
Code: Alles auswählen
oCelle=oDoc.getCurrentSelection().getCellAddress()
sRow=oCelle.Row
sColumn=oCelle.column
wie verhindere ich, den Makro-Fehler der entsteht
wenn dieser Code im Makro steht und bei Aufruf des Makro ein Bereich markiert ist ?
2.
markiert man einen Bereich wird mit
der Bereich ausgegeben also C5:H8
möchte ich hier nun nur C5 ansprechen, wie erreiche ich das,
denn der Fokus liegt normalerweise auf H8,
wenn man wie üblich von oben links nach unten rechts markiert?
ich möchte also die erste Zelle eines beliebigen markierten Bereich ermitteln und ansprechen
egal ob oder wo etwas auf bei Aufruf des Makro in der aktuellen Tabelle markiert war
?
Re: die erste Zelle eines Bereiches ermitteln
Verfasst: Sa, 10.07.2010 06:52
von Karolus
Hallo
1. Bei Dannenhöfer nachschauen und
http://www.dannenhoefer.de/faqstarbasic ... CheckRange finden
2. Falls ..currentselection()
ein Zellbereich ist:
Code: Alles auswählen
with thiscomponent.currentselection.rangeaddress
erste_Spalte = .StartColumn
erste_Zeile = .StartRow
end with
Du hast selbst erst kürzlich ein bis zwei Threads gestartet indem .startcolumn und .startrow verwendet wurden, wieso verwendest du diese Informationen nicht ?
Gruß Karo
Re: die erste Zelle eines Bereiches ermitteln
Verfasst: Sa, 10.07.2010 07:05
von komma4
Schau Dir doch mal den Code meiner Extension
DateTime2 an.
Zunächst habe ich dort die unterstützenden Services per Konstanten-String definiert
Code: Alles auswählen
Public Const cEinzelZelle = "com.sun.star.sheet.SheetCell"
Public Const cVieleBereiche = "com.sun.star.sheet.SheetCellRanges"
Public Const cEinzelBereich = "com.sun.star.sheet.SheetCellRange"
In der Bearbeitung stelle ich dann fest, ob eine Zelle, ein Bereich oder mehrere Bereich zu bearbeiten sind
Code: Alles auswählen
' Zelle / Bereich / mehrere Bereiche ?
If oSelection.supportsService( cEinzelZelle ) Then
' single cell
DateTime_setZelle( oSelection )
ElseIf _
oSelection.supportsService( cVieleBereiche ) Then
' mehrere Bereiche
For i = 0 To oSelection.getCount() - 1
oEinBereich = oSelection.getByIndex(i)
DateTime_setCalc( oEinBereich )
Next
ElseIf _
oSelection.supportsService( cEinzelBereich ) Then
' ein Bereich von Zellen
DateTime_set1Bereich( oSelection )
End If
Die erste Zelle (links oben) eines markierten Bereichs (unabhängig, welche Zelle mit dem Cursor aktuell markiert ist), erhälst Du bspw. mit:
Code: Alles auswählen
aZeilenNamen= split( Thiscomponent.getcurrentcontroller().getselection().RowDescriptions(0), " ")
Print ThisComponent.getCurrentController().getSelection().getColumns().ElementNames(0) & aZeilenNamen(1)
Noch ein Wort zu Namensgebung meiner Variablen.
Der erste Buchstabe des Variablennamens zeigt mir gleich, von welchem Typ die Variable ist:
- a Array
c Konstante (const)
i Integer
l Long/Double
o Objekt
s Zeichenkette (string)
In Deinem Code
ist das "s" irreführend, da hier kein STRING besetzt wird, sondern Objekte.
Re: die erste Zelle eines Bereiches ermitteln
Verfasst: Sa, 10.07.2010 07:05
von clag
Moin Karolus,
erst einmal Danke für die Antwort
und wie könnte es anders sein gleich noch zwei Nachfragen
ist das dann die universal "standard" abfrage/ adressierung für die niederwertigste Zelladresse eines Bereiches
und ist das auch gültig für den selten Fall das von recht nach links oder von unten nach oben markiert wurde ?
Du hast selbst erst kürzlich ein bis zwei Threads gestartet indem .startcolumn und .startrow verwendet wurden, wieso verwendest du diese Informationen nicht ?
weil das auch nur "
geliehener" Code war und ich noch nicht beurteilen kann ob das der allgemein gültig Weg ist oder ob es andere Funktionen gibt die einfacher/besser oder schneller sind.
Zu eurem Leidwesen gehöre ich zu denen, die wenn schon,
dann aber auch ganz genau wissen wollen wie wo was geht .......
ich hoffe ihr verkraftet das noch eine Weile

Re: die erste Zelle eines Bereiches ermitteln
Verfasst: Sa, 10.07.2010 07:11
von Karolus
Hallo
ist das dann die universal "standard" abfrage/ adressierung für die niederwertigste Zelladresse eines Bereiches
und ist das auch gültig für den selten Fall das von recht nach links oder von unten nach oben markiert wurde ?
Ja und ja.
Karo
Re: die erste Zelle eines Bereiches ermitteln
Verfasst: Sa, 10.07.2010 07:22
von clag
Hi Komma4,
Dir natürlich auch ein dickes Danke für die ausführliche Antwort
die werde ich dann gleich noch umsetzen und ausprobieren