🙏 Helfen Sie 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. 🤗

CALC Makro: Zelle mit leeren darunter verbinden?

CALC ist die Tabellenkalkulation, die Sie immer wollten.
Antworten
akoerber
Beiträge: 197
Registriert: Di 4. Okt 2011, 19:30

CALC Makro: Zelle mit leeren darunter verbinden?

Beitrag von akoerber » Mo 31. Mär 2025, 18:32

Hallo,
ich habe eine Tabelle, in welcher immer wieder Zellen leer sind.
Diese möchte ich nun mit einem Makro mit der darüber verbinden.

Konkreter.
De Cursor steht etwa auf Zelle c5. Die nächste Zelle in Spalte C mit Inhalt ist C8.
Der Makro soll nun C5-C7 verbinden.

Wie gehe ich das an?
Mein bisheriger Ansatz sieht so aus, funktioniert leider nicht.

Code: Alles auswählen

sub zus_3
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
dim oZelle as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue

args1(0).Name = "By"
args1(0).Value = 1


Do 
	dispatcher.executeDispatch(document, ".uno:GoDownSel", "", 0, args1())
	oZelle=ThisComponent.CurrentSelection.CellAddress
Loop while ISTLEER(oZelle)

dispatcher.executeDispatch(document, ".uno:GoUpSel", "", 0, args1())
end sub
Es geht also darum, so lange einen Schritt nach unten zu gehen, bis die Zelle nicht mehr leer ist, und dann einen zurück.

"CellAddress" wird aber nicht gefunden.

ja, man könne auch vorab abfragen, ob die darunter liegende Zelle leer ist, aber auch dazu brauche ich die Adresse.

Kann jd helfen?

Dank im Voraus

mikele
* LO-Experte *
Beiträge: 1929
Registriert: Mo 1. Aug 2011, 20:51

Re: CALC Makro: Zelle mit leeren darunter verbinden?

Beitrag von mikele » Mo 31. Mär 2025, 21:41

Hallo,
Diese möchte ich nun mit einem Makro mit der darüber verbinden.
Was ist der trifftige Grund dafür? Verbundene Zellen lassen sich meistens schwer handhaben und verusachen im weiteren eher Probleme.
Ich würde es so machen:

Code: Alles auswählen

Sub zusammen

	oDoc=ThisComponent
	oZelle=oDoc.CurrentSelection
	leer=oZelle.Columns(0).queryEmptyCells.rangeaddresses
	for i=0 to ubound(leer)-1
		if oZelle.CellAddress.Row>=leer(i).StartRow-1 and oZelle.CellAddress.Row<leer(i).EndRow then
			von = leer(i).StartRow
			if von>0 then von=von-1
			bis = leer(i).EndRow
			bereich=oZelle.Spreadsheet.getCellRangeByPosition(leer(i).StartColumn,von,leer(i).StartColumn,bis)
			bereich.merge(true)
		end if
		
	next

End Sub
Gruß,
mikele

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2533
Registriert: Fr 10. Dez 2010, 10:01

Re: CALC Makro: Zelle mit leeren darunter verbinden?

Beitrag von karolus » Di 1. Apr 2025, 10:02

Hallo

wie bereits von Mikele angesprochen, würde man daß nie tun! und falls doch:

Code: Alles auswählen

def merge_empties(*_):
    doc = XSCRIPTCONTEXT.getDocument()
    col_ = doc.CurrentSelection.Columns[0]
    empties = col_.queryEmptyCells()
    for empty in empties[ :-1]:
        empty.merge(True)
@mikele:

Code: Alles auswählen

Sub merge_empties
    column = ThisComponent.CurrentSelection.Columns(0)
    empties = column.queryEmptyCells() 
    For Each bereich in empties
        bereich.merge(True)
    next
    bereich.merge(False)
End Sub
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

akoerber
Beiträge: 197
Registriert: Di 4. Okt 2011, 19:30

Re: CALC Makro: Zelle mit leeren darunter verbinden?

Beitrag von akoerber » Di 1. Apr 2025, 10:43

Danke.
Zunächst zu Deiner Frage. Weil die Tabelle so vorliegt. Sie stammt nicht von mir. Sie ist nicht von mir. ich bin gerade dabei, sie zu "bereinigen".

Derzeit sieht sie so aus (hier nachgestellt ohne Zellenlinien):

Code: Alles auswählen

    A                    B                      C                            D                                                      E
Nummer     NACHNAME1     VORNAME1      Karriereschritt 1   Belegverweis (u.a. URL)
           (leer)        (leer)        Karriereschritt 2   Belegverweis (u.a. URL)
           (leer)        (leer)        Karriereschritt 2   Belegverweis (u.a. URL)
Nummer     NACHNAME2     VORNAME2      Karriereschritt 1   Belegverweis (u.a. URL)
           (leer)        (leer)        Karriereschritt 2   Belegverweis (u.a. URL)
           (leer)        (leer)        Karriereschritt 2   Belegverweis (u.a. URL)

Man könnte natürlich die hinteren Spalten jeweils untereinander verbinden. Dann gingen aber die Bezüge zwischen Karriereschritten und den Belegen verloren.

Die Felder in Spalte A zu jedem Fall sind schon verbunden, danach kann sortiert werden. Ich möchte aber auch nach Spalte B und C sortieren können (ja, ich weiß: ohne Formate).
Ich will daher erst einmal die untereinander stehenden Zellen in den Spalten B-C zusammenfassen, , denn es sind Nummern doppelt vorhanden, auch gibt es Personen, die unter mehreren Nummern geführt werden.


Dann aber: Dein Makro tut leider gar nichts.

Es gäbe aber vielleicht einen anderen Weg:

Kann man per Makro:
  • in Spalte A den FormatPaintbrush das Format aufnehmen lassen,
  • dann (relativ) eine Spalte nach rechts gehen,
  • das Format übertragen,
  • dort wieder das Format aufnehmen lassen,
  • wieder eine Spalten nach rechts gehen?
Eine makro-Aufzeichnung nutzt "dispatcher.executeDispatch(document, ".uno:FormatPaintbrush", "", 0, Array())", aber auskommentiert mit rem und zudem konkrete Zelladressen.

Dank im Voraus,
A

akoerber
Beiträge: 197
Registriert: Di 4. Okt 2011, 19:30

Re: CALC Makro: Zelle mit leeren darunter verbinden?

Beitrag von akoerber » Di 1. Apr 2025, 11:27

karolus hat geschrieben:
Di 1. Apr 2025, 10:02
Sorry, aber Eure Ideen tun beide nicht (gar nichts)

Kann man denn mit Makros den FormatPinsel benutzen?
Wenn ich das per Hand mache geht es:
  1. Ich aktiviere ihn auf der bereits zusammengefügten Zelle in Spalte A
  2. Ich rufe das (per Maus!) auf der obersten Zelle desselben Falls in Spalte B ab -> die darunter liegenden Zellen werden verbunden, weil das in A auch so ist.
Makros aber zeichnen zwar den Formatpinselaufruf auf, aber auskommentiert (rem). ich finde ich keine Möglichkeit, das abzurufen.

Zudem: Wenn ich das aufzeichne und zunächst in der verbundenen Spalte mit CRTL-C den Inhalt kopieren, dann (nicht mit der Maus) nach rechts in die oberste Zelle des Falles in B gehe und per Kontextmenü nur das Format übertrage, wird NICHT erweiter, weil ich ja nicht den Pinsel aktiviert hatte.

Wenn ich den Pinsel mit der Maus aktiviere, dann mit der Tastatur einen Schritt nach rechts gehe, geht das ebenso wenig.

Hmmm

akoerber
Beiträge: 197
Registriert: Di 4. Okt 2011, 19:30

Re: CALC Makro: Zelle mit leeren darunter verbinden?

Beitrag von akoerber » Di 1. Apr 2025, 17:12

Noch ein Ansatz, aber ich habe keine Ahnung, ob und das mit Makros geht:

Wenn ich in der kombinierten Zelle in Spalte A stehe, wird diese oben als "Ax:Ay" angezeigt - abhängig davon, wie viele Zeilen dort zusammengefasst sind.

Kann man nun
1. diesen String auslesen
2. aus diesem String x und y entnehmen,
3. damit entsprechende Strings bauen und Bereiche selektieren: Bx:By, Cx:Cy etc
4. Die Zellen dieser Bereiche jeweils "verbinden" lassen
??

mikele
* LO-Experte *
Beiträge: 1929
Registriert: Mo 1. Aug 2011, 20:51

Re: CALC Makro: Zelle mit leeren darunter verbinden?

Beitrag von mikele » Di 1. Apr 2025, 18:29

Hallo,
was heißt
Dein Makro tut leider gar nichts.
Makros sind aktiviert? Wie rufst du das Makro auf? Gibt es eine Fehlermeldung?
Welche Zelle ist beim Makroaufruf aktiv?
Ich habe mein Makro mit beigefügtem Dokument getestet. Karolus' Makros funktionieren ebenso (auch wenn wir beide die Aufgabe etwas anders verstanden haben).
Was passiert bei dir in dieser Datei?
Die Felder in Spalte A zu jedem Fall sind schon verbunden, danach kann sortiert werden.
Genau das halte ich für einen Irrtum.
Dateianhänge
zellen verbinden.ods
(10.57 KiB) 109-mal heruntergeladen
Gruß,
mikele

akoerber
Beiträge: 197
Registriert: Di 4. Okt 2011, 19:30

Re: CALC Makro: Zelle mit leeren darunter verbinden?

Beitrag von akoerber » Di 1. Apr 2025, 19:08

Danke
1. Ja, Makros sind aktiviert. Meine eigenen Versuche "gehen" - aber brechen ab. Diese tun GAR NICHTS. Sie starten gar nicht erst.

2. Inwiefern zweifelst Du daran, dass die Felder der Spalte A schon verbunden ist? Hier ein Screenshot, aber unkenntlich gemacht wegen Datenschutz...
Tabelle_1.jpg
Tabelle_1.jpg (84.04 KiB) 829 mal betrachtet
Wie gesagt - so übernommen, nicht mein Tabellendesign.

Es soll letztlich alles so aussehen wie in den Zeilen 2161 bis 2163
Bei 2165-2166 müssten also die Felder der Spalten C-E zusammengeführt werden (F und H sind hier schon), G ist eine leere Spalte, die ich für Zwischenkopien bei Korrekturen eingefügt habe. Die kommt wieder fort.

Es gibt aber eben auch 1-zeilige Einträge, wie etwa 2160, 2164, 2169

(wie) kann man nun
1. (Von B:2161 kommend) einen Schritt hinunter gehen (zu B2161:B2163)
2. Feststellen, OB das ein Zellenbereich oder eine Einzelzelle ist
3. DA Zellbereich
3a. in B2165:2166 stehend, diesen Wert auslesen,
3b. Ihn zerlegen
3c. daraus C2165:C2166 machen und einer Variable zuweisen (etwa zellen1)
3d. Dann im Makro einen Befehl bauen merge(zellen1)
3e. Das gleiche für Spalten D und E
6. sicherstellen dass man noch in Spalte B ist, und das Ganze wiederholen

Dank im Voraus

Das würde vielleicht schon helfen

mikele
* LO-Experte *
Beiträge: 1929
Registriert: Mo 1. Aug 2011, 20:51

Re: CALC Makro: Zelle mit leeren darunter verbinden?

Beitrag von mikele » Di 1. Apr 2025, 20:12

Hallo,
zu 1) Woran erkennst du, dass das Makro nicht startet? Dafür muss es einen Grund geben. Ich gehe mal davon aus, dass du das Makro in deiner Datei gespeichert hast. Wie rufst du es aus.
zu 2) Ich zweifle nicht daran, dass die Zellen verbunden sind. Das ist schon offensichtlich. Ich zweifle daran , dass die Tabelle sich dann sinnvoll sortieren lässt.
Das, was du als Makrofunktionalität beschreibst, macht mein Makro bereits. Allerdings (!) nur für einen Bereich und zwar den, in dem sich die aktive Zelle befindet. Das müsste also z. B. C2165 sein.
Wenn die aktive Zelle, wie in deiner Abbildung, E2165 ist und diese Spalte leer ist, macht mein Makro nichts.
Gruß,
mikele


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