die erste Zelle eines Bereiches ermitteln

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

Moderator: Moderatoren

clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

die erste Zelle eines Bereiches ermitteln

Beitrag 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 :lol:

Ihr versteht mich hoffentlich
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: die erste Zelle eines Bereiches ermitteln

Beitrag 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 8)

Hilft Dir das?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: die erste Zelle eines Bereiches ermitteln

Beitrag 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 ?
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: die erste Zelle eines Bereiches ermitteln

Beitrag 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
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: die erste Zelle eines Bereiches ermitteln

Beitrag 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"
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: die erste Zelle eines Bereiches ermitteln

Beitrag von clag »

mai phen rai !
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: die erste Zelle eines Bereiches ermitteln

Beitrag 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?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: die erste Zelle eines Bereiches ermitteln

Beitrag 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

Code: Alles auswählen

"com.sun.star.sheet.SheetCellRange"

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 ?
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: die erste Zelle eines Bereiches ermitteln

Beitrag 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
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: die erste Zelle eines Bereiches ermitteln

Beitrag 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

Code: Alles auswählen

sRow=oCelle.Row
sColumn=oCelle.column
ist das "s" irreführend, da hier kein STRING besetzt wird, sondern Objekte.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: die erste Zelle eines Bereiches ermitteln

Beitrag von clag »

Moin Karolus,

erst einmal Danke für die Antwort

und wie könnte es anders sein gleich noch zwei Nachfragen :lol:

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 :lol:
Zuletzt geändert von clag am Sa, 10.07.2010 07:16, insgesamt 1-mal geändert.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: die erste Zelle eines Bereiches ermitteln

Beitrag 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
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: die erste Zelle eines Bereiches ermitteln

Beitrag 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
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Antworten