BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

[GELÖST] Leere Zeilen einfügen und kopierten Bereich nur mit Werten und Formaten einfügen

Alles zur Programmierung im LibreOffice.
Antworten
Ich Bins
Beiträge: 236
Registriert: Do 2. Aug 2018, 12:30

[GELÖST] Leere Zeilen einfügen und kopierten Bereich nur mit Werten und Formaten einfügen

Beitrag von Ich Bins » Di 16. Nov 2021, 17:18

Hallo zusammen,

in einem Arbeitsblatt möchte ich ab Zelle A17
15 leere Zeilen einfügen und im Anschluss das Format und die Werte von A3:S15 einfügen.
Ich versucht es mit Beispielen von Dannenhöfer.

Code: Alles auswählen

sub Zeilen
  doc=thiscomponent
  mysheet=doc.Sheets().getByName("MeinArbeitsblatt")
  myrows=mysheet.getrows
' Und jetzt leere Zeilen einfügen: Index und Anzahl.
  myrows.insertbyindex(16,15)
' Bereich kopieren
  QuelleRange=mysheet.getCellRangeByPosition(0,2,18,14) 
  QuellRangeAddresse = QuelleRange.getRangeAddress
  Ziel = mysheet.getCellByPosition(0,17)
  ZielCellAdresse=Ziel.getCellAddress
' kopierten Bereich einfügen, damit die Formatierungen übernommen werden
  mysheet.copyRange(ZielCellAdresse,QuellRangeAddresse)
' Bereich erneut kopieren
   x = mysheet.getCellRangeByName("A3:S15").GetDataArray()
' nur die Werte des kopierten Bereichs einfügen 
   mysheet.getCellrangeByName("A18:S30").SetDataArray(x)
' Optimale Zeilenhöhe
   mysheet.Rows(17).OptimalHeight = True
end sub
Mit diesem Code werden zuerst die leeren Zeilen eingefügt und danach die gesamten Inhalte des Bereiches A3:S15 (Damit die Formate übertragen werden). Im Anschluss werden nur die Werte des Bereiches A3:S15 noch einmal eigefügt und bei der Zeile 17 die optimale Höhe eingestellt weil die Spaltenüberschriften in A3:S3 länger als die Zellen sind und von von mir umgebrochen wurden, so dass drei Wörter untereinander in der Zelle stehen, die Zeile wurde dadurch 1,13 cm hoch. Nach dem Kopieren/Einfügen war von den Spaltenüberschriften nur das erste Wort zu sehen, weil die Zeile nur noch 0,47 cm hoch war.
Das ist zwar irgendwie "doppelt gemoppelt", aber anders wusste ich mir nicht zu helfen.

Sicherlich kann man das auch eleganter machen.

Viele Grüße
Ich Bins
Zuletzt geändert von Ich Bins am Mo 22. Nov 2021, 00:44, insgesamt 1-mal geändert.

Benutzeravatar
karolus
Beiträge: 2170
Registriert: Fr 10. Dez 2010, 10:01

Re: Leere Zeilen einfügen und kopierten Bereich nur mit Werten und Formaten einfügen

Beitrag von karolus » Mi 17. Nov 2021, 10:54

Hallo
Die Zeile mit dem x = … ist tatsächlich doppelgemoppelt, lass die weg, und tausche zwei Zeilen weiter unten das x gegen QuelleRange.DataArray

Und übertreibe es nicht mit den Kommentaren… da steht jetzt eigentlich nur das was auch man auch offentsichtlich in der Code-zeile untendrunter liest.
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.3.2 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Ich Bins
Beiträge: 236
Registriert: Do 2. Aug 2018, 12:30

Re: Leere Zeilen einfügen und kopierten Bereich nur mit Werten und Formaten einfügen

Beitrag von Ich Bins » Mi 17. Nov 2021, 20:58

Hallo karolus,

QuelleRange.DataArray an Stelle von x funktioniert tadellos. Vielen Dank!
Bisher war ich mit Kommentaren viel zu sparsam.

Viele Grüße
Ich Bins

Ich Bins
Beiträge: 236
Registriert: Do 2. Aug 2018, 12:30

Re: Leere Zeilen einfügen und kopierten Bereich nur mit Werten und Formaten einfügen

Beitrag von Ich Bins » Fr 19. Nov 2021, 00:44

Hallo karolus,

Im weiteren Verlauf hat sich jetzt die Situation ergeben, dass ich nur die Verknüpfung benötige und nirgends etwas hilfreiches dazu finden konnte.
Im Sheet1 benötig ich in B21:B24 nur die Verknüpfungen zu Sheet2 B3:B6.

Code: Alles auswählen

sub Verknuepfung_erstellen
   Doc = thisComponent
   mysheet1 = Doc.Sheets().getByName("Blatt1")
   mysheet2 = Doc.Sheets().getByName("Blatt2")
   x = mysheet1.getCellRangeByName("B3:B6").GetDataArray()
   mysheet2.getCellrangeByName("B21:B24").SetDataArray(x)
End Sub 
Damit erhalte ich nur die Werte des Quellbereiches.

Viele Grüße
Ich Bins

Benutzeravatar
karolus
Beiträge: 2170
Registriert: Fr 10. Dez 2010, 10:01

Re: Leere Zeilen einfügen und kopierten Bereich nur mit Werten und Formaten einfügen

Beitrag von karolus » Fr 19. Nov 2021, 06:59

Im Sheet1 benötig ich in B21:B24 nur die Verknüpfungen zu Sheet2 B3:B6.
das wird jetzt langsam albern…meinst du oberes wortwörtlich?
Falls ja:


mysheet1.getCellrangeByName("B21:B24").setArrayFormula("Sheet2.B3:B6")

falls nein, dann bemüh deinen Grips, du kennst inzwischen alles was dazu nötig ist
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.3.2 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Ich Bins
Beiträge: 236
Registriert: Do 2. Aug 2018, 12:30

Re: Leere Zeilen einfügen und kopierten Bereich nur mit Werten und Formaten einfügen

Beitrag von Ich Bins » Fr 19. Nov 2021, 11:01

Hallo karolus,

ja, ich meine es wortwörtlich, weil meine Basic-Kenntnisse dazu noch nicht ausreichend sind. :oops:
Nach der Übernahme von Deinem Vorschlag

Code: Alles auswählen

sub Verknuepfung_erstellen
   Doc = thisComponent
   mysheet1 = Doc.Sheets().getByName("Blatt1")
   mysheet2 = Doc.Sheets().getByName("Blatt2")
   mysheet1.getCellrangeByName("B21:B24").setArrayFormula("mysheet2.B3:B6")
End Sub 
erhalte ich in Blatt1
setArrayFormula.JPG
setArrayFormula.JPG (11.39 KiB) 1605 mal betrachtet
und in jeder Zelle B21-B24 von Blatt1 wurde {=#BEZUG!.B3#BEZUG!.B6} eingetragen.
In B21 von Blatt1 benötige ich $Blatt2.B3.
Bei einem Klick in die Eingabezeile auf {=#BEZUG!.B3#BEZUG!.B6} erhalte ich die Information
i Sie können nicht nur einen Teil einer Matrix ändern.

Benutzeravatar
karolus
Beiträge: 2170
Registriert: Fr 10. Dez 2010, 10:01

Re: Leere Zeilen einfügen und kopierten Bereich nur mit Werten und Formaten einfügen

Beitrag von karolus » Fr 19. Nov 2021, 11:09

Hallo
woher soll Calc denn wissen das du mit 'mysheet2' eigentlich 'Blatt2' meinst??

Code: Alles auswählen

sub Verknuepfung_erstellen
   Doc = thisComponent
   mysheet1 = Doc.Sheets().getByName("Blatt1")
   mysheet2 = Doc.Sheets().getByName("Blatt2")
   mysheet1.getCellrangeByName("B21:B24").setArrayFormula("Blatt2.B3:B6")
End Sub 
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.3.2 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Ich Bins
Beiträge: 236
Registriert: Do 2. Aug 2018, 12:30

Re: Leere Zeilen einfügen und kopierten Bereich nur mit Werten und Formaten einfügen

Beitrag von Ich Bins » Fr 19. Nov 2021, 12:05

Hallo karolus,
nun hat es geklappt, besten Dank!
Jetzt sind in jeder Zelle B21-B24 von Blatt1 die entsprechenden Werte von Blatt2 zu sehen und in der Eingabezeile dazu ist bei jeder Zelle {=Blatt2.B3:B6} eingetragen. Ein Klick in die Eingabezeile auf {=Blatt2.B3:B6} liefert die Information:
i Sie können nicht nur einen Teil einer Matrix ändern.
Ist das unumgänglich?

Mit der Zeile

Code: Alles auswählen

   mysheet1.getCellrangeByName("D21").setArrayFormula("Blatt2.D3")
kann dann auch nur die Verknüpfung zu einer Zelle von Blatt2 übergeben werden, die in der Eingabezeile von Blatt1 in Zelle D21 so {=Blatt2.D3} zu sehen ist.

Benutzeravatar
karolus
Beiträge: 2170
Registriert: Fr 10. Dez 2010, 10:01

Re: Leere Zeilen einfügen und kopierten Bereich nur mit Werten und Formaten einfügen

Beitrag von karolus » Fr 19. Nov 2021, 12:18

Ich Bins hat geschrieben:
Fr 19. Nov 2021, 12:05
Hallo karolus,
nun hat es geklappt, besten Dank!
Jetzt sind in jeder Zelle B21-B24 von Blatt1 die entsprechenden Werte von Blatt2 zu sehen und in der Eingabezeile dazu ist bei jeder Zelle {=Blatt2.B3:B6} eingetragen. Ein Klick in die Eingabezeile auf {=Blatt2.B3:B6} liefert die Information:
i Sie können nicht nur einen Teil einer Matrix ändern.
Ist das unumgänglich?
Wenn du hinterher noch manuell rumpfuschen willst, musst du halt alle drei Zellen selektieren!
Ich Bins hat geschrieben:
Fr 19. Nov 2021, 12:05
Mit der Zeile

Code: Alles auswählen

   mysheet1.getCellrangeByName("D21").setArrayFormula("Blatt2.D3")
kann dann auch nur die Verknüpfung zu einer Zelle von Blatt2 übergeben werden, die in der Eingabezeile von Blatt1 in Zelle D21 so {=Blatt2.D3} zu sehen ist.
Wenn du jetzt unbedingt jede Formel einzeln möchtest :roll: dann mach halt:

Code: Alles auswählen

   mysheet1.getCellrangeByName("D21").setFormula("=Blatt2.D3")
   'usw.'
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.3.2 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Ich Bins
Beiträge: 236
Registriert: Do 2. Aug 2018, 12:30

Re: Leere Zeilen einfügen und kopierten Bereich nur mit Werten und Formaten einfügen

Beitrag von Ich Bins » Fr 19. Nov 2021, 15:28

Hallo karolus,

rumpfuschen? Welch garstig Wort.
Wie sage ich's dem Vater, der Mutter, den Kinder, siebenköpf'ger Schar? (Otto)

Ich möchte nicht jede Formel einzeln, aber ich habe Arbeitsblätter mit mehreren einzelnen (eine Zelle)
Verknüpfungen zu anderen Arbeitsblättern und umgekeht.
Hin und wieder muss ich neue Arbeitsblätter hinzufügen bei denen ich bisher immer alles manuell eingerichtet habe.
Jetzt versuche ich diese Vorgänge zu automatisieren.

Wenn die mit Basic erstellten Verknüpfungen nur in dieser Ausprägung
{=Blatt2.B3:B6}
{=Blatt2.D3}
zu erstellen sind ist es halt so und ich muss damit zurecht kommen.

Viele Grüße
Ich Bins

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten