Seite 1 von 1

getCellRangeByName: Bereich auswählen und speichern

Verfasst: Do 14. Nov 2013, 17:19
von funsch
Hallo liebes Forum.

Ich arbeite derzeit an einer Angebotsvorlage, wo ich Stunden, Stundensatz, Leistungen, etc. eintragen kann und mir Calc daraus dann ein Angebot zusammenstellt.

Die Tabelle sieht derzeit circa so aus:
[Leistung #1]
-Leistungspunkt #1
-Leistungspunkt #2
-Leistungspunkt #3
(...)
[Leistung #2]

Ich greife auf Leistung #1 und Leistung #2 mittels Zellennamen zu, das funktioniert. Allerdings bräuchte ich noch den Bereich zwischen den beiden Punkten, also alle Leistungspunkte. Da sich diese vermutlich in Zukunft ändern werden (es werden welche gelöscht oder hinzugefügt) und ich das Makro dann nicht jedes Mal umschreiben will, will ich dynamisch auf diesen Bereich zugreifen. Das hat vor allem damit zu tun, dass mit dieser Vorlage 5 Leute arbeiten werden.
Jetzt habe ich dazu zwei Fragen:

1. Wie kann ich getCellRangeByName sagen, dass er von "Leistungsname1" bis "Leistungsname2" auswählen soll?
2. Wie speichere ich diese Daten? In ein Array?

Ich habe zwar schon Hilfe zu getCellRangeByName, ich verwende es auch schon, aber wie ich mehrere Zellen abspeichere habe ich noch nicht gefunden.

mit grüßen

Re: getCellRangeByName: Bereich auswählen und speichern

Verfasst: Do 14. Nov 2013, 20:41
von F3K Total
Moin,
Deine Frage ist eine Makro Frage und gehört in die Kategorie LibreOffice Programmierung.
Lies Dir am besten mal die allgemeinen Hinweise in diesem Forum durch, insbesondere den Abschnitt Wie stelle ich ein Beispieldokument zur Verfügung (und wozu)?
Was genau deine Frage ist, habe ich nicht verstanden.
Stehen Leistungsname1 und Leistungsname2 untereinander oder nebeneinander
Kommt evetuell Leistungsname3/4/5/... hinzu, wo sollen die Zellinhalte hin?
Grundsätzlich kannst Du mit

Code: Alles auswählen

oRangeaddress = ...getcellrangebyname(...).Rangeaddress
die Zeilen- und Spaltenindizes des Zellbereiches auslesen.
Wenn Du also die Zeile(n) und Spalte(n) von Leistungsname1 und Leistungsname2 kennst, kannst Du den Bereich dazwischen auch ermitteln.
Ein Beispieldokument könnte helfen.

Gruß R

Re: getCellRangeByName: Bereich auswählen und speichern

Verfasst: Fr 15. Nov 2013, 11:28
von funsch
Hallo,

okay, sorry, wenn den Thread hier vielleicht ein Moderator verschieben könnte, ginge das?


Und hier ein Beispieldokument

Im Prinzip will ich folgendes:
1. Es gibt zwischen Leistungspunkt #1 und #2 verschiedene Punkte. Daneben ist eine zweite Spalte "Verwenden".
2. Diese Punkte sind variabel und werden später noch erweitert.
3. Wenn in "Verwenden" 0 steht, soll der Punkt ignoriert werden, wenn 1 steht, soll er in ein Array gespeichert werden.

Ich scheitere leider schon daran, dass ich den Bereich zwischen Leistungspunkt #1 und #2 auslesen kann.. Zu RangeAdress habe ich zwar Hilfe gefunden, er erkennt auch die Zellennamen (zumindest glaube ich das, weil keine Fehlermeldung erscheint), aber wie ich diese Daten dann abrufen kann, ist mir nicht klar.

Re: getCellRangeByName: Bereich auswählen und speichern

Verfasst: Fr 15. Nov 2013, 17:27
von F3K Total
Hi,
irgendwie verstehe ich dich immer noch nicht
funsch hat geschrieben:... soll er in ein Array gespeichert werden.
Was soll das, du schreibst Daten in ein Array, ist das Makro abgearbeitet, stehen die Daten also in einer Variablen, die du im Makro gefüllt hast, sehen kannst Du sie dann nicht.
Oder meinst Du mit Array vielleicht einen anderen Zellbereich?
Gruß R

Re: getCellRangeByName: Bereich auswählen und speichern

Verfasst: Mo 18. Nov 2013, 13:24
von funsch
Hallo,

Ja, die Daten hätte ich dann in einem Array, und mit diesem Array will ich auf einer eigenen Tabelle einen neuen Zellbereich befüllen. Also wenn ich beispielsweise Punkte 1,3,4 und 7 ausgewählt hätte, dann will ich diese in ein Array speichern und in der nächsten Tabelle untereinander hinschreiben. Ich hoffe das ist so verständlich :)

Re: getCellRangeByName: Bereich auswählen und speichern

Verfasst: Mo 18. Nov 2013, 17:49
von F3K Total
Hi,
ich habe das mal etwas anders gelöst.
Anstatt der obersten Zelle eines Bereiches einen Namen zu geben, habe ich den Bereichen selbst, also den Punktgruppen je einen Namen gegeben.
PunkteL1
PunkteL2

Unterhalb habe ich je eine Zeile leer gelassen, aber dem Namen zugeordnet. Wenn eine Zeile zugefügt wird, vergrößert sich der Namesbereich und man kann per Makro drauf zugreifen. Dieses Makro schreibt alle Punkte die mit 1 ausgewählt wurden untereinander in Spalte D bzw. E:

Code: Alles auswählen

Sub S_Copy_selected
    dim aSelected1(0) as string
    dim aSelected2(0) as string
    dim nselected as integer
    oRanges = thiscomponent.namedRanges
    oRP1 = oRanges.getbyname("PunkteL1").ReferredCells
    oRP2 = oRanges.getbyname("PunkteL2").ReferredCells
    nSheet = oRP1.RangeAddress.sheet
    oSheet = Thiscomponent.sheets.getbyindex(nsheet)
    ncounter = 0
    for n = 0 to oRP1.rows.count - 1
       nselected = oRP1.getcellbyposition(1,n).value
       if nselected = 1 then
           redim preserve aSelected1(ncounter)
           aSelected1(ncounter) = oRP1.getcellbyposition(0,n).string
           ncounter = ncounter + 1
       endif
    next n
    ncounter = 0
    for n = 0 to oRP2.rows.count - 1
       nselected = oRP2.getcellbyposition(1,n).value
       if nselected = 1 then
           redim preserve aSelected2(ncounter)
           aSelected2(ncounter) = oRP2.getcellbyposition(0,n).string
           ncounter = ncounter + 1
       endif
    next n
    oTR1 = oSheet.getcellrangebyposition(3,2,3,Ubound(aSelected1)+2)
    oTR2 = oSheet.getcellrangebyposition(4,2,4,Ubound(aSelected2)+2)
    for i = 0 to oTR1.rows.count - 1
       oTR1.getcellbyposition(0,i).formula = aSelected1(i)
    next i
    for i = 0 to oTR2.rows.count - 1
       oTR2.getcellbyposition(0,i).formula = aSelected2(i)
    next i
end sub
Anbei ein Beispiel.
Gruß R

Re: getCellRangeByName: Bereich auswählen und speichern

Verfasst: Di 19. Nov 2013, 10:31
von funsch
Das ist super :) Genau so hab ich mir das vorgestellt, vielen Dank!