🙏 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!🍀
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
Makro: Zellen aus einem Blatt kopieren und ans Ende eines anderen Blatt einfügen
-
- Beiträge: 5
- Registriert: Fr 13. Mär 2015, 19:26
Makro: Zellen aus einem Blatt kopieren und ans Ende eines anderen Blatt einfügen
Hallo zusammen!
Sitze gerade an einer alten MS Office 2006 Datei, die ich 2006 erstellt habe und auch einige Jahre nutze.
Über die Jahre bin ich jedoch auf Linux umgestiegen (Dualboot).
Nun brauche ich diese Datei wieder, und nun tauchen auch diverse Probleme auf.
Die damals in der Datei verwendeten Makros funktionieren nicht mehr mit den aktuellen MS-Office Versionen.
Da ich seit Jahren überwiegend mit Libreoffice arbeite, wollte ich die Datei als Libreoffice Datei umarbeiten
und benötige ein wenig Hilfe.
Ich möchte per Makro einen Bereich des Tblattes 3, A27-Q27 kopieren.
Dieser solle dann in das Tblatt 4 ans Ende eines Datensatzes eingefügt werden.
Wie setze ich dieses am besten einmal um?
Sitze gerade an einer alten MS Office 2006 Datei, die ich 2006 erstellt habe und auch einige Jahre nutze.
Über die Jahre bin ich jedoch auf Linux umgestiegen (Dualboot).
Nun brauche ich diese Datei wieder, und nun tauchen auch diverse Probleme auf.
Die damals in der Datei verwendeten Makros funktionieren nicht mehr mit den aktuellen MS-Office Versionen.
Da ich seit Jahren überwiegend mit Libreoffice arbeite, wollte ich die Datei als Libreoffice Datei umarbeiten
und benötige ein wenig Hilfe.
Ich möchte per Makro einen Bereich des Tblattes 3, A27-Q27 kopieren.
Dieser solle dann in das Tblatt 4 ans Ende eines Datensatzes eingefügt werden.
Wie setze ich dieses am besten einmal um?
Re: Makro: Zellen aus einem Blatt kopieren und ans Ende eines anderen Blatt einfügen
Hallo,
ich vermute mal, dass es reichen würde die Inhalte der Zellen A27:Q27 zu kopieren.
Nächste Vermutung wäre, dass fortlaufend Daten von Tabelle3 nach Tabelle4 kopiert werden sollen und dann immer in die nächste freie Zeile der Tabelle4?
ich vermute mal, dass es reichen würde die Inhalte der Zellen A27:Q27 zu kopieren.
Was ist das "Ende eines Datensatzes"?Dieser solle dann in das Tblatt 4 ans Ende eines Datensatzes eingefügt werden.
Nächste Vermutung wäre, dass fortlaufend Daten von Tabelle3 nach Tabelle4 kopiert werden sollen und dann immer in die nächste freie Zeile der Tabelle4?
Gruß,
mikele
mikele
-
- Beiträge: 5
- Registriert: Fr 13. Mär 2015, 19:26
Re: Makro: Zellen aus einem Blatt kopieren und ans Ende eines anderen Blatt einfügen
Vielen Dank für Eure Hilfe!
Die Daten kopiere ich über die Zwischenablage in das TBlatt 3.
Diese Daten befinden sich dann in den Zellen A27:Q27.
Diese sollen nun per Schaltfläche in das TBlatt 4 kopiert werden.
Und man gibt ein Datensatz nach dem anderen per Schaltfläche ein.
Diese sollen immer zum Schluss des TBlatt 4 eingefügt werden.
Beispiel:
TBlatt 3
Name Straße Ort Datum usw.
TBlatt 4
Meier Musterstr.4 1100 Musterhausen 01.01.1980 usw.
Müller Musterstr.4 1100 Musterhausen 01.01.1980 usw.
Schmidt Musterstr.4 1100 Musterhausen 01.01.1980 usw.
Neuer Datensatz hier einfügen ...
Ich habe auch eine Beispiel Datei gefunden jedoch scheitere ich aufgrund Hintergrundwissen ...
Damit wird der Bereich C9 - O9 in ein neues TBlatt kopiert, und nacheinander abgelegt.
Jedoch konnte ich nicht erkennen wie ich das an meinen Bedürfnissen anpassen kann.
Danke
Die Daten kopiere ich über die Zwischenablage in das TBlatt 3.
Diese Daten befinden sich dann in den Zellen A27:Q27.
Diese sollen nun per Schaltfläche in das TBlatt 4 kopiert werden.
Und man gibt ein Datensatz nach dem anderen per Schaltfläche ein.
Diese sollen immer zum Schluss des TBlatt 4 eingefügt werden.
Beispiel:
TBlatt 3
Name Straße Ort Datum usw.
TBlatt 4
Meier Musterstr.4 1100 Musterhausen 01.01.1980 usw.
Müller Musterstr.4 1100 Musterhausen 01.01.1980 usw.
Schmidt Musterstr.4 1100 Musterhausen 01.01.1980 usw.
Neuer Datensatz hier einfügen ...
Ich habe auch eine Beispiel Datei gefunden jedoch scheitere ich aufgrund Hintergrundwissen ...
Code: Alles auswählen
REM ***** BASIC *****
Sub Main
odoc=thiscomponent
quelle=odoc.sheets(0)
ziel=odoc.sheets(1)
daten()=quelle.getcellrangebyname("C9:O9").getdataarray()
i=8
do while ziel.getcellbyposition(2,i).type>0
i=i+1
loop
ziel.getcellrangebyposition(2,i,14,i).setdataarray(daten())
End Sub
Jedoch konnte ich nicht erkennen wie ich das an meinen Bedürfnissen anpassen kann.
Danke
- Dateianhänge
-
- daten kopieren.ods
- (17.73 KiB) 89-mal heruntergeladen
-
- Beiträge: 5
- Registriert: Fr 13. Mär 2015, 19:26
Re: Makro: Zellen aus einem Blatt kopieren und ans Ende eines anderen Blatt einfügen
Ich habe diese Datei damals für meine Bewerbungen erstellt. In der Ursprünglichen Datei konnte ich sogar e.Mails verschicken. Und Datensätze aus einer bestimmten HTML herauskopieren. Deshalb die Schaltflächen.
Re: Makro: Zellen aus einem Blatt kopieren und ans Ende eines anderen Blatt einfügen
Hallo,
hier mal eine Variante in Basic:
und das Gleiche in Python (da habe ich wieder was gelernt):
hier mal eine Variante in Basic:
Code: Alles auswählen
Sub Main
'Zugriff auf dieses Dokument
oDoc=ThisComponent
'Zugriff auf Tabelle1
oTab=oDoc.Sheets.getByName("Tabelle1")
'Zugriff auf Zellebereich
oBereich=oTab.getCellRangeByName("A27:Q27")
'Auslesen der Inhalten in Array
aDaten=oBereich.getDataArray
'Zugriff auf Tabelle2
oZiel=oDoc.Sheets.getByName("Tabelle2")
'Bestimmung der nächste freien Zeile
'dazu suche ich die leeren Zellen der Spalte A
aLeer=oZiel.Columns(0).queryEmptyCells.RangeAddresses
n=aLeer(uBound(aLeer)).StartRow
'Zielbereich mit Daten füllen
oZiel.getCellRangeByPosition(0,n,uBound(aDaten(0)),n).SetDataArray(aDaten)
'eventuell löschen des ursprünglichen Bereiches
oBereich.ClearContents(1+2+4)
End Sub
Code: Alles auswählen
def bereich_kopieren():
oDoc = XSCRIPTCONTEXT.getDocument()
oTab1 = oDoc.Sheets.getByName("Tabelle3")
oBereich = oTab1.getCellRangeByName('A27:Q27')
aDaten=oBereich.getDataArray()
oTab2 = oDoc.Sheets.getByName("Tabelle4")
oLeer=oTab2.Columns[0].queryEmptyCells()
n=oLeer.RangeAddresses[-1].StartRow
m=len(aDaten[0])-1
oTab2.getCellRangeByPosition(0,n,m,n).setDataArray(aDaten)
oBereich.clearContents(1+2+4)
Gruß,
mikele
mikele
-
- Beiträge: 5
- Registriert: Fr 13. Mär 2015, 19:26
Re: Makro: Zellen aus einem Blatt kopieren und ans Ende eines anderen Blatt einfügen
Mikele Du bist der Beste!!!
Vielen dank, eine wirklich großartige Arbeit.
Und die ganzen Kommentare helfen beim lernen!
Nochmals vielen vielen dank !!!
Vielen dank, eine wirklich großartige Arbeit.
Und die ganzen Kommentare helfen beim lernen!
Nochmals vielen vielen dank !!!
Re: Makro: Zellen aus einem Blatt kopieren und ans Ende eines anderen Blatt einfügen
Hallo
@Mikele: Dein Pythoncode wird schon anderenorts zitiert
Das ist super!
Dein Code ist nahezu eine 1:1 Übersetzung aus Basic mit »vollständigen« Api-methoden und damit auch rückwärtskompatibel mit AOO
Mit LO 5.1 wurden ein paar Änderungen eingepflegt, die »pythonischeren« Code-Stil ermöglichen, hier ein paar Varianten davon (mit reichlich Kommentaren):
und daraus eine Funktion ohne Kommentare:
Ist halt blöd das der Code hier nicht mit vernünftigen Syntax-highlighting angezeigt wird!
@Mikele: Dein Pythoncode wird schon anderenorts zitiert

Dein Code ist nahezu eine 1:1 Übersetzung aus Basic mit »vollständigen« Api-methoden und damit auch rückwärtskompatibel mit AOO
Mit LO 5.1 wurden ein paar Änderungen eingepflegt, die »pythonischeren« Code-Stil ermöglichen, hier ein paar Varianten davon (mit reichlich Kommentaren):
Code: Alles auswählen
doc = XSCRIPTCONTEXT.getDocument()
sheets = doc.Sheets
# ↓↓ Object-zugriff auf Tabelle
# ↓ !Vorsicht Syntax-Falle bei Tabellennamen mit Leerzeichen etcpp.
quelle = sheets.Tabelle1
# besser Dictionary-zugriff, siehe unten:
bereich = quelle['A8:I8']
data = bereich.DataArray
ziel = sheets["Tabelle2"] # ↑↑↑ vergleiche oben!
# ↓ Object-zugriff per Spalten_bezeichnung !
leer= ziel.Columns.A.queryEmptyCells()
row = leer[-1].RangeAddress.StartRow
# ↓ slice-syntax hier im speziellen 2-D [zeilen , spalten], möglich seit LO 5.1
ziel[ row, :len(data[0]) ].DataArray = data
# ↓ alternativ per Name-Access und f-String ! Achtung row+1
# ziel[f"A{ row+1 }:I{ row+1 }"].DataArray = data
bereich.clearContents(1+2+4)
Code: Alles auswählen
def copy_row(*_):
doc = XSCRIPTCONTEXT.getDocument()
sheets = doc.Sheets
quelle = sheets.Tabelle1
bereich = quelle['A8:I8']
data = bereich.DataArray
ziel = sheets["Tabelle2"]
leer= ziel.Columns.A.queryEmptyCells()
row = leer[-1].RangeAddress.StartRow
ziel[ row, :len(data[0]) ].DataArray = data
bereich.clearContents(1+2+4)
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Re: Makro: Zellen aus einem Blatt kopieren und ans Ende eines anderen Blatt einfügen
Hallo karolus,
cool und danke - ich hatte die stille Hoffnung, dass du/jemand der mit Python vertrauter ist, meine laienhaften Anfänge ausbaut und verbessert.
cool und danke - ich hatte die stille Hoffnung, dass du/jemand der mit Python vertrauter ist, meine laienhaften Anfänge ausbaut und verbessert.
Gruß,
mikele
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.