[Erledigt]CALC: Zeilen kopieren

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

Moderator: Moderatoren

bredfeld
**
Beiträge: 20
Registriert: Sa, 17.03.2012 20:15

[Erledigt]CALC: Zeilen kopieren

Beitrag von bredfeld »

Ich habe mehrere Zeilen mit Zellen speziell formatiert und möchte diese mit einem Makro in der gleichen Tabelle kopieren.
Wenn ich nur die Zellen kopiere verliere ich die Formatierungen.
Kann mir da jemand helfen?



Moderation,4: verschoben in BASIC-Unterbereich, wo alle Makro-Fragen hin gehören; Betreff angepasst
Zuletzt geändert von bredfeld am So, 10.06.2012 12:23, insgesamt 1-mal geändert.
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Zeilen mit Makro kopieren

Beitrag von Karolus »

Hallo

Hier kann ich problemlos mit strg+c kopieren und mit strg+v woanders mit Formaten einfügen.
mit strg+shift+v bekomme ich Auswahlmöglichkeiten angeboten was, wie usw. eingefügt wird.

Was funktioniert bei dir nicht?

Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
bredfeld
**
Beiträge: 20
Registriert: Sa, 17.03.2012 20:15

Re: Zeilen mit Makro kopieren

Beitrag von bredfeld »

Wie gesagt, ich möchte dass aus einem Makro heraus automatisieren.
Ein Teil in meinem code kopiert schon 7 Zellen in eine bestimmte Stelle der Tabelle.
Der andere Teil den ich schreiben will soll aber Zeilen kopieren die speziell formatiert sind als Vorbereitung für weitere Eingaben.
Ich löse dann das alles aus mit einem Doppelklick.
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Zeilen mit Makro kopieren

Beitrag von Karolus »

LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
bredfeld
**
Beiträge: 20
Registriert: Sa, 17.03.2012 20:15

Re: Zeilen mit Makro kopieren

Beitrag von bredfeld »

Ja so etwas, aber genau das habe ich probiert.
Das arbeitet mit 2 Tabellen und ich habe es für eine Tabelle umgeschrieben. Nur habe ich da das Problem dass mir meine speziellen Formatierungen nicht mitgenommen werden. Wie z.B. unterschiedliche Zeilenhöhe.
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Zeilen mit Makro kopieren

Beitrag von Karolus »

Hallo

Na sowas, z.B.

Code: Alles auswählen

...
with sourcerange
    for i = 0 to .Rows.Count()-1
        targetrange.Rows( i ).Height = .Rows( i ).Height
    next 
end with
...
Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Axel Richter
****
Beiträge: 159
Registriert: So, 17.10.2010 16:54

Re: CALC: Zeilen kopieren

Beitrag von Axel Richter »

Hallo,
bredfeld hat geschrieben:Ja so etwas, aber genau das habe ich probiert.
Das arbeitet mit 2 Tabellen und ich habe es für eine Tabelle umgeschrieben. Nur habe ich da das Problem dass mir meine speziellen Formatierungen nicht mitgenommen werden. Wie z.B. unterschiedliche Zeilenhöhe.
Das Dannenhöfer-Beispiel kopiert sehr wohl Formatierungen mit. Es kann allerdings natürlich nicht mehr, als Calc beim Kopieren auch macht. Und Zeilenhöhen werden nur dann mitkopiert, wenn die ganze Zeile kopiert wird. Wenn Du also, wie Du im Betreff schreibst, *Zeilen* kopieren willst, dann so:

Code: Alles auswählen

   oDocument = ThisComponent
   oSheet1 = oDocument.Sheets.getByIndex(0)
   oSheet2 = oDocument.Sheets.getByIndex(1)
' Quellzeile festlegen
   oQuelleRange=oSheet1.Rows.getByIndex(2) 'Zeile 3 in oSheet1
   oQuellRangeAddresse = oQuelleRange.getRangeAddress
' Zielzelle festlegen (muss in Spalte 0 sein)   
   oZiel = oSheet2.getCellByPosition(0,4) 'Zelle A5 in oSheet2
   oZielCellAdresse=oZiel.getCellAddress()
   
   oSheet2.copyRange(oZielCellAdresse,oQuellRangeAddresse) 'Kopiert Zeile 3 aus Sheet1 in Zeile 5 von Sheet2
viele Grüße

Axel
bredfeld
**
Beiträge: 20
Registriert: Sa, 17.03.2012 20:15

Re: CALC: Zeilen kopieren

Beitrag von bredfeld »

Ich zeige Ihnen mal meinen ganzen Code. Ich habe jetzt auch umgestellt auf zwei Tabellen um mehr Sicherheit für den Gebrauch zu bekommen.
Können Sie mir bei dem einfügen ihrer Lösung in den Teil Unfertig helfen ?

Code: Alles auswählen

REM  *****  BASIC  *****
'     Umgestellt auf zwei Tabellen wegen der 
'     dynamischen Kopie einer Tabellenerweiterung
Sub Move_cells_to_row_4_copy_paste_cells
Dim oDoc
Dim oCelle
Dim oSheet
Dim oSheet1
Dim oSheet2
Dim oRow
Dim oColumn
Dim oRangeAddress
rem get access to the document
oDoc = thisComponent
		' aktive Zelle
oCelle = oDoc.getCurrentSelection().getCellAddress()
        ' aktives Tabellenblatt
oSheet = oDoc.sheets(oCelle.Sheet)
        ' aktuelle Zeile, Index
oRow = oCelle.Row
        ' aktuelle Spalte, Index
        ' Gültige Zeile für move überprüfen
if oRow mod 7 - 2 <> 1 then
	'msgbox orow
	exit sub
	end if
        ' aktuelle Spalte, Index
oColumn = oCelle.column
		'msgbox "Spalte "+oColumn
if oColumn = 0 then
	spalte = "A4:A10"
	zeilen = "A"+(oRow+8)+":A"+(oRow+14)
	end if
if oColumn = 1 then
	spalte = "B4:B10"
	zeilen = "B"+(oRow+8)+":B"+(oRow+14)
	end if
if oColumn = 2 then
	spalte = "C4:C10"
	zeilen = "C"+(oRow+8)+":C"+(oRow+14)
	end if
if oColumn = 3 then
	spalte = "D4:D10"
	zeilen = "D"+(oRow+8)+":D"+(oRow+14)
	end if
if oColumn = 4 then
	spalte = "E4:E10"
	zeilen = "E"+(oRow+8)+":E"+(oRow+14)
	end if
if oColumn = 5 then
	spalte = "F4:F10"
	zeilen = "F"+(oRow+8)+":F"+(oRow+14)
	end if
	' unfertig !! Zellbereiche werden kopiert und an das Ende gestellt
	' Kopie von Tabelle2 klappt nur [b]ohne richtige Zellhöhe[/b] die Positionen
	' noch variabel machen und auf Ende prüfen !
oSheet1 = oDoc.Sheets.getByIndex(0)
oSheet2 = oDoc.Sheets.getByIndex(1)
oQuelleRange = oSheet2.getCellRangeByPosition(0,0,5,6)
oQuellRangeAddresse = oQuelleRange.getRangeAddress
oZiel = oSheet1.getCellByPosition(0,38)
oZielCellAddresse = oZiel.getCellAddress
oSheet1.copyRange(oZielCellAddresse,oQuellRangeAddresse)
	'ende von unfertig !!
		'Platz machen
oRangeAddress = oSheet.getCellRangeByName(spalte).getRangeAddress()
oSheet.insertCells(oRangeAddress, com.sun.star.sheet.CellInsertMode.DOWN)
		'Zellen mitnehmen
oRangeAddress = oSheet.getCellRangeByName(zeilen).getRangeAddress()
oCellAddress = oSheet.getCellByPosition(oColumn, 3).getCellAddress
oSheet.moveRange(oCellAddress, oRangeAddress)
oSheet.removeRange(oRangeAddress, com.sun.star.sheet.CellDeleteMode.UP)
End Sub
bredfeld
**
Beiträge: 20
Registriert: Sa, 17.03.2012 20:15

Re: CALC: Zeilen kopieren

Beitrag von bredfeld »

Vielen Dank für eure Hilfe:
Ich habe die Lösung von Axel Richter genommen.
Eine Schleife gebaut und mir 7 Zeilen komplett kopiert genau so wie ich es haben wollte.
Ich bin immer noch am lernen und freue mich immer wenn in diesem Forum auch Anfängern
kurze knappe Lösungen presentiert werden.
Axel Richter
****
Beiträge: 159
Registriert: So, 17.10.2010 16:54

Re: [Erledigt]CALC: Zeilen kopieren

Beitrag von Axel Richter »

Hallo,
bredfeld hat geschrieben:Eine Schleife gebaut und mir 7 Zeilen komplett kopiert genau so wie ich es haben wollte.
Da ist keine Schleife nötig:

Code: Alles auswählen

   oDocument = ThisComponent
   oSheet1 = oDocument.Sheets.getByIndex(0)
   oSheet2 = oDocument.Sheets.getByIndex(1)
' Quellzeilen festlegen
   oRow1 = oSheet1.Rows.getByIndex(0) 'Zeile 1 in oSheet1
   oQuellRangeAddresse = oRow1.getRangeAddress() 'RangeAddress von Zeile 1 in Sheet1
   oQuellRangeAddresse.EndRow = 6 'jetzt RangeAddress von Zeile 1 bis Zeile 7 in Sheet1

' Zielzelle festlegen (muss in Spalte 0 sein)   
   oZiel = oSheet2.getCellByPosition(0,4) 'Zelle A5 in oSheet2
   oZielCellAdresse=oZiel.getCellAddress()
   
   oSheet2.copyRange(oZielCellAdresse,oQuellRangeAddresse) 'Kopiert Zeilen 1:7 aus Sheet1 in Sheet2 ab Zeile 5
Tipp:
Untersuche Objekte, die Du per Makro ansprichst (hier z.B. oRow1) mit XRay. http://wiki.services.openoffice.org/wik ... #Xray_tool

viele Grüße

Axel
Antworten