🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

getCellRangeByName: Bereich auswählen und speichern

CALC ist die Tabellenkalkulation, die Sie immer wollten.
Antworten
Benutzeravatar
funsch
Beiträge: 5
Registriert: Do 14. Nov 2013, 17:09

getCellRangeByName: Bereich auswählen und speichern

Beitrag von funsch » Do 14. Nov 2013, 17:19

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

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: getCellRangeByName: Bereich auswählen und speichern

Beitrag von F3K Total » Do 14. Nov 2013, 20:41

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
Windows 11: AOO, LO Linux Mint: AOO, LO

Benutzeravatar
funsch
Beiträge: 5
Registriert: Do 14. Nov 2013, 17:09

Re: getCellRangeByName: Bereich auswählen und speichern

Beitrag von funsch » Fr 15. Nov 2013, 11:28

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.

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: getCellRangeByName: Bereich auswählen und speichern

Beitrag von F3K Total » Fr 15. Nov 2013, 17:27

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
Windows 11: AOO, LO Linux Mint: AOO, LO

Benutzeravatar
funsch
Beiträge: 5
Registriert: Do 14. Nov 2013, 17:09

Re: getCellRangeByName: Bereich auswählen und speichern

Beitrag von funsch » Mo 18. Nov 2013, 13:24

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 :)

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: getCellRangeByName: Bereich auswählen und speichern

Beitrag von F3K Total » Mo 18. Nov 2013, 17:49

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
Dateianhänge
testdokument_range.ods
(12.07 KiB) 233-mal heruntergeladen
Windows 11: AOO, LO Linux Mint: AOO, LO

Benutzeravatar
funsch
Beiträge: 5
Registriert: Do 14. Nov 2013, 17:09

Re: getCellRangeByName: Bereich auswählen und speichern

Beitrag von funsch » Di 19. Nov 2013, 10:31

Das ist super :) Genau so hab ich mir das vorgestellt, vielen Dank!


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten