[gelöst] Zellengenaue Positionierung bei Copy-Makro

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

AndreasMeier
Beiträge: 6
Registriert: Fr, 12.08.2011 12:37

[gelöst] Zellengenaue Positionierung bei Copy-Makro

Beitrag von AndreasMeier »

Hallo zusammen,

ich bastel mir ein Makro in OO Calc, welches einen Daten-Bereich von Tabelle 1 auf Tabelle 2 kopiert.
Dazu hab ich die Kopieraktion einfach mit dem Rekorder aufgezeichnet, was soweit gut funktioniert hat.

Allerdings hab ich nun folgendes Problem:
Wie kann ich in der Ziel-Tabelle eine bestimmte Zelle als Startpunkt für den Daten-Bereich festlegen ?

Dazu müsste m.E. ein zusätzlicher Befehl zwischen diese Zeilen:

Code: Alles auswählen

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args3())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
Mit der ersten Zeile springt das Makro auf die Ziel-Tabelle,
mit der letzten Zeile wird der Daten-Bereich eingefügt.

Das Problem dabei ist, dass der Bereich immer dort eingefügt wird, wo der Cursor zuletzt in der Ziel-Tabelle gestanden hat bzw. steht.

Da ich leider mit OOo Basic so gut wie überhaupt nicht vertraut bin, bitte ich um Unterstützung.
Danke für eure Hilfe,
Gruß
Andreas

PS: zusätzliche Frage:
Kann ich in einer Tabelle irgendwie eine Symbolfläche einbauen, mit der ich das Makro ausführen kann?
Zuletzt geändert von AndreasMeier am Mo, 15.08.2011 12:09, insgesamt 1-mal geändert.
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: Zellengenaue Positionierung bei Copy-Makro

Beitrag von F3K Total »

Hi,
schau Dir die Tabelle im Anhang an, da wird der gerade markierte Bereich auf "Tabelle3" ab Zelle "D6" kopiert.
Das Ziel kannst Du im Makro "Copy_Cells" ändern.

Code: Alles auswählen

oZielSheet=oDoc.sheets.getbyname("Tabelle3")'Zieltabelle
oZielCell=oZielSheet.getcellrangebyname("D6")'Startzelle
entsprechend anpassen.Speichern.

Viel Spaß damit
Gruß R
Dateianhänge
copy_Cells.ods
(13.19 KiB) 306-mal heruntergeladen
AndreasMeier
Beiträge: 6
Registriert: Fr, 12.08.2011 12:37

Re: Zellengenaue Positionierung bei Copy-Makro

Beitrag von AndreasMeier »

Ja cool, sogar mit Schaltfläche...

Also, erstmal herzlichen Dank für das Zur-Verfügung-stellen!!

Kannst Du mir aber bitte noch sagen, wie man so eine Schaltfläche erzeugt bzw. bearbeiten kann ?

Danke und Gruß
Andreas
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: Zellengenaue Positionierung bei Copy-Makro

Beitrag von F3K Total »

Es handel sich um ein "Formular-Steuerelement", die Symbolleiste Formular "Steuerelemente" mußt du, wenn nicht vorhanden, einblenden
1.png
1.png (6.19 KiB) 5133 mal betrachtet
Mit dem Geodreick
2.png
2.png (1.1 KiB) 5133 mal betrachtet
den Entwurfsmodus einschalten, Steuerelemente sind nicht mehr gedimmt, dann Schaltfläche
3.png
3.png (627 Bytes) 5133 mal betrachtet
einfügen.
Rechte Maus auf die Schaltfläche, "Kontrollfeld", Text unter Reiter "Allgemeines" eingeben, unter "Ereignisse" das Makro zuordnen. Speichern, Entwurfsmodus ausschalten.
Feddisch.
Gruß R
AndreasMeier
Beiträge: 6
Registriert: Fr, 12.08.2011 12:37

Re: Zellengenaue Positionierung bei Copy-Makro

Beitrag von AndreasMeier »

Genial !!

Super herzlichen Dank !!
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: Zellengenaue Positionierung bei Copy-Makro

Beitrag von F3K Total »

Hallo Andreas,
es wäre schön, wenn Du diesen Thread als [gelöst] markieren würdest, einfach auf "ÄNDERN" klicken und die Titelzeile anpassen.

Gruß R
AndreasMeier
Beiträge: 6
Registriert: Fr, 12.08.2011 12:37

Re: [gelöst] Zellengenaue Positionierung bei Copy-Makro

Beitrag von AndreasMeier »

Jetzt hab ich zu dem Makro doch noch eine Zusatzfrage:

Mit dem Code

Code: Alles auswählen

oDoc = thisComponent
orange=thisComponent.currentselection
orangeAddress=orange.getrangeaddress
odata()=orange.getdataarray
wird ja die aktuelle Auswahl/Selektion in der aktuellen Tabelle ausgelesen.

Wie kann man einen festen Zellbereich (immer "A3 bis G10", unabhängig von Selektion und Cursorpositionierung) auslesen und fürs Kopieren verwenden?

Mit folgenden Zeilen hab ich probiert, eine feste Selektion in der Quell-Tabelle zu erreichen:

Code: Alles auswählen

#1: Sheet = oDoc.Sheets.getByName("Tabelle 1")
#2: CellRange = Sheet.getCellRangeByName("A3:G10")
#3: Cell = CellRange.GetCellByPosition(1, 1)
In Zeile #1 wird die "Tabelle 1" als Quell-Tabelle verwendet.
In Zeile #2 wird der Bereich A3 bis G10 als Selektion angegeben.
Bei Zeile #3 hakt es dann leider schon vom Verständnis bei mir.

Allerdings rennt mir das Makro mit der Anpassung dann in einen Laufzeitfehler, weil dann diese beiden Zeilen nicht mehr korrekt angepasst sind:

Code: Alles auswählen

X2=oZielCellAddress.column+(orangeAddress.EndColumn-orangeAddress.StartColumn)
Y2=oZielCellAddress.Row+(orangeAddress.EndRow-orangeAddress.StartRow)

Danke und Gruß
Andreas
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: [gelöst] Zellengenaue Positionierung bei Copy-Makro

Beitrag von F3K Total »

take that:

Code: Alles auswählen

Sub Copy_Cells

odoc=ThisComponent
osheet=odoc.sheets.getbyname ("Tabelle1")'kein Leerzeichen hinter Tabelle
orange=osheet.getCellRangeByName("A3:G10")
orangeAddress=orange.getrangeaddress
odata()=orange.getdataarray
oZielSheet=oDoc.sheets.getbyname("Tabelle3")'Zieltabelle
oZielCell=oZielSheet.getcellrangebyname("D6")'Startzelle
oZielCellAddress=oZielCell.getcelladdress
X1=oZielCellAddress.column
Y1=oZielCellAddress.row
X2=oZielCellAddress.column+(orangeAddress.EndColumn-orangeAddress.StartColumn)
Y2=oZielCellAddress.Row+(orangeAddress.EndRow-orangeAddress.StartRow)
oZielrange=oZielSheet.getCellRangeByPosition(X1,Y1,X2,Y2)
oZielrange.setdataarray(odata())

msgbox ("Na, da haben wir doch tatsächlich die Zellen A3 bis G10 kopiert :-))",64,"Welch ein Wunder !!!")

End Sub
Gruss R
Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: [gelöst] Zellengenaue Positionierung bei Copy-Makro

Beitrag von Jörg »

Hallo,
wie bringe ich das Makro dazu, das der Zellbereich immer in die letzte leere Zelle in der Spalte A kopiert wird?
Habe es hiermit

Code: Alles auswählen

Sheet = ThisComponent.CurrentController.ActiveSheet   
c = Sheet.getCellRangeByName("A1:A250").queryEmptyCells
getFirstEmptyRowInColumn = Split(c.RowDescriptions(0)," ")
oRow = getFirstEmptyRowInColumn(1)
mycell =  Sheet.getCellRangeByName("A" & oRow)   
myView = thisComponent.CurrentController
myView.Select(mycell)
probiert, weiß aber nicht, wie ich beide Makros verbinden könnte.

'Vielen Dank schonmal.
Gruß Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: [gelöst] Zellengenaue Positionierung bei Copy-Makro

Beitrag von F3K Total »

So?

Code: Alles auswählen

Sub Copy_Cells
    odoc = ThisComponent
    osheet = odoc.sheets.getbyname("Tabelle1")'kein Leerzeichen hinter Tabelle
    orange = osheet.getCellRangeByName("A3:G10")
    orangeAddress = orange.getrangeaddress
    odata()= orange.getdataarray
    oZielSheet = oDoc.sheets.getbyname("Tabelle2")'Zieltabelle
    c = oZielSheet.getCellRangeByName("A1:A250").queryEmptyCells
    oZielCell = c(0).getcellbyposition(0,0)
    oZielCellAddress = oZielCell.getcelladdress
    X1=oZielCellAddress.column
    Y1=oZielCellAddress.row
    X2=oZielCellAddress.column+(orangeAddress.EndColumn-orangeAddress.StartColumn)
    Y2=oZielCellAddress.Row+(orangeAddress.EndRow-orangeAddress.StartRow)
    oZielrange=oZielSheet.getCellRangeByPosition(X1,Y1,X2,Y2)
    oZielrange.setdataarray(odata())
    msgbox ("Na, da haben wir doch tatsächlich die Zellen A3 bis G10 kopiert :-))",64,"Welch ein Wunder !!!")
End Sub
R
Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: [gelöst] Zellengenaue Positionierung bei Copy-Makro

Beitrag von Jörg »

Hallo,
schneller gehts nich. Vielen dank.
Funktioniert soweit auch prima. Allerdings würde ich gern die Tabellen über den Index ansprechen.
Habe versucht,

Code: Alles auswählen

 osheet = odoc.sheets.getbyname("Tabelle1")'kein Leerzeichen hinter Tabelle
in

Code: Alles auswählen

 osheet = odoc.sheets.getbyposition(2)'kein Leerzeichen hinter Tabelle
also die dritte Tabelle
bzw.

Code: Alles auswählen

 oZielSheet = oDoc.sheets.getbyposition(3)'Zieltabelle
die 4. Tabelle
zu ändern, damit ich im Makro nicht jedesmal den Tabellennamen ändern muß.
Dann funzt es leider nichtmehr.

Gruß Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: [gelöst] Zellengenaue Positionierung bei Copy-Makro

Beitrag von Jörg »

Hallo,
habs doch noch rausgekriegt.
Hier der Code.

Code: Alles auswählen

  Sub Copy_Cells
        odoc = ThisComponent
        osheet = odoc.sheets(2)
        orange = osheet.getCellRangeByName("J38:S38")
        orangeAddress = orange.getrangeaddress
        odata()= orange.getdataarray
        oZielSheet = oDoc.sheets(3)
        c = oZielSheet.getCellRangeByName("A1:A250").queryEmptyCells
        oZielCell = c(0).getcellbyposition(0,0)
        oZielCellAddress = oZielCell.getcelladdress
        X1=oZielCellAddress.column
        Y1=oZielCellAddress.row
        X2=oZielCellAddress.column+(orangeAddress.EndColumn-orangeAddress.StartColumn)
        Y2=oZielCellAddress.Row+(orangeAddress.EndRow-orangeAddress.StartRow)
        oZielrange=oZielSheet.getCellRangeByPosition(X1,Y1,X2,Y2)
        oZielrange.setdataarray(odata())
        msgbox ("Na, da haben wir doch tatsächlich die Zellen A3 bis G10 kopiert :-))",64,"Welch ein Wunder !!!")
    
End Sub
Gruß Jörg

Win 10 Pro AOO 4.1.15
Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: [gelöst] Zellengenaue Positionierung bei Copy-Makro

Beitrag von Jörg »

P.S. Vielen Dank nochmal
Gruß Jörg

Win 10 Pro AOO 4.1.15
Antworten