die erste Zelle eines Bereiches ermitteln

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: die erste Zelle eines Bereiches ermitteln

Re: die erste Zelle eines Bereiches ermitteln

von clag » Sa, 10.07.2010 07:22

Hi Komma4,

Dir natürlich auch ein dickes Danke für die ausführliche Antwort

die werde ich dann gleich noch umsetzen und ausprobieren

Re: die erste Zelle eines Bereiches ermitteln

von Karolus » Sa, 10.07.2010 07:11

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

von clag » Sa, 10.07.2010 07:05

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:

Re: die erste Zelle eines Bereiches ermitteln

von komma4 » Sa, 10.07.2010 07:05

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.

Re: die erste Zelle eines Bereiches ermitteln

von Karolus » Sa, 10.07.2010 06:52

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

von clag » Sa, 10.07.2010 06:31

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 ?

Re: die erste Zelle eines Bereiches ermitteln

von komma4 » Sa, 10.07.2010 05:08

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

von clag » Fr, 09.07.2010 20:09

mai phen rai !

Re: die erste Zelle eines Bereiches ermitteln

von komma4 » Fr, 09.07.2010 19:42

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

von clag » Fr, 09.07.2010 16:48

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

von clag » Fr, 09.07.2010 16:33

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

von komma4 » Fr, 09.07.2010 16:23

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?

die erste Zelle eines Bereiches ermitteln

von clag » Fr, 09.07.2010 16:05

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

Nach oben