Seite 1 von 1
Mehrere Bereiche zum Löschen per Makro in Calc auswählen
Verfasst: Mo, 22.06.2015 07:45
von LidiaS
Guten Morgen Allerseits,
ich möchte den Zellinhalt in mehreren (nicht zusammen hängenden) Bereichen per Makro löschen.
Herr Dannenhöfer sagt:
Man kann auch gleichzeitig mehrere Bereiche auswählen. Dann müssen diese nur mit Komma getrennt eingegeben werden.
getCellRangeByName("A1:B5","C4:D9") ergibt dann den Bereich A1:B5 und C4:D9
Wenn ich dies mache,
Code: Alles auswählen
myDocument = thisComponent
mySheet=thiscomponent.getcurrentcontroller.activesheet
myCell = mySheet.getCellRangeByName("B2:B4","B7:B37","C40:C41")
inK= com.sun.star.sheet.CellFlags.STRING + com.sun.star.sheet.CellFlags.VALUE
myCell.clearContents( inK )
dann löscht er mir den Bereich B2:B4 aber nicht die darauf folgenden. Was mache ich falsch? Ist das Anspechen mehrerer Bereiche zum Löschen nicht möglich?
Wäre für Hilfe sehr dankbar.
Lieben Dank und einen guten Start in die Woche
Lidia
Re: Mehrere Bereiche zum Löschen per Makro in Calc auswählen
Verfasst: Mo, 22.06.2015 10:16
von komma4
LidiaS hat geschrieben:Dannenhöfer hat geschrieben:Man kann auch gleichzeitig mehrere Bereiche auswählen.
Vielleicht ging das mal.
Mit meiner aktuellen Installation (AOO 4.1.1) zeigt mir MRI den gewählten Bereich
Code: Alles auswählen
myCell = mySheet.getCellRangeByName("B2:B4","B7:B37","C40:C41")
MRI mycell
an:
Du machst also nichts falsch.
Erzeuge eine Funktion zum Löschen eines Bereichs und rufe sie mit den drei Angaben dreimal auf.
Re: Mehrere Bereiche zum Löschen per Makro in Calc auswählen
Verfasst: Mo, 22.06.2015 14:09
von TrueColor
Huhu,
LidiaS hat geschrieben:Herr Dannenhöfer sagt:
Man kann auch gleichzeitig mehrere Bereiche auswählen. Dann müssen diese nur mit Komma getrennt eingegeben werden.
getCellRangeByName("A1:B5","C4:D9") ergibt dann den Bereich A1:B5 und C4:D9
Hatten wir letztens schon mal. Schau mal hier:
viewtopic.php?f=18&t=65796
Da ist auch ein Bsp., wie du's per Schleife lösen kannst.
Re: Mehrere Bereiche zum Löschen per Makro in Calc auswählen
Verfasst: Mo, 22.06.2015 18:38
von LidiaS
Hallo Allerseits,
vielen Dank an komma4 und TrueColor für die Antworten und die Hinweise. Wie gewohnt wird einem im OOForum schnell und kompetent geholfen

.
Viele Grüße
Lidia
Re: Mehrere Bereiche zum Löschen per Makro in Calc auswählen
Verfasst: Mi, 24.06.2015 18:38
von LidiaS
Hallo nochmals Allerseits,
ich stelle mal meine Lösung des o.g. Problems rein. Vielleicht ist diese für den einen oder anderen Anfänger (bin ja selber einer

) hilfreich.
Grundlage ist TrueColors Hinweis:
Hatten wir letztens schon mal. Schau mal hier: viewtopic.php?f=18&t=65796
Da ist auch ein Bsp., wie du's per Schleife lösen kannst.
Ich habe zwei Varianten erstellt, wobei ich Variante I verwenden werde:
Variante I (Grundlage Code von clag):
Code: Alles auswählen
myDocument = ThisComponent
mySheet = ThisComponent.getcurrentcontroller.activesheet
myCells = Array("B2:B4","B7:B37","C40:C41","C43:I62","C65:C75")
for i=0 to 4
inK = 5
'Alternativ: inK= com.sun.star.sheet.CellFlags.STRING + com.sun.star.sheet.CellFlags.VALUE
mySheet.getCellRangeByName(myCells(i)).clearContents(inK)
next
Variante II (Grundlage Code von F3K Total):
Code: Alles auswählen
myDocument = thisComponent
mySheet=thiscomponent.getcurrentcontroller.activesheet
myR1= mySheet.getCellRangeByName("B2:B4").RangeAddress
myR2= mySheet.getCellRangeByName("B7:B37").RangeAddress
myR3= mySheet.getCellRangeByName("C40:C41").RangeAddress
myR4= mySheet.getCellRangeByName("C43:I62").RangeAddress
myR5= mySheet.getCellRangeByName("C65:C75").RangeAddress
mycellranges = thiscomponent.createInstance("com.sun.star.sheet.SheetCellRanges")
mycellranges.addRangeAddress(myR1,true)
mycellranges.addRangeAddress(myR2,true)
mycellranges.addRangeAddress(myR3,true)
mycellranges.addRangeAddress(myR4,true)
mycellranges.addRangeAddress(myR5,true)
inK = 5
mycellranges.clearContents(inK)
Es geht sicherlich immer besser. Aber es funktioniert und die Variante I ist schön kurz

.
Nochmal vielen Dank für das "auf den Weg bringen".
Viele Grüße
Lidia
Re: Mehrere Bereiche zum Löschen per Makro in Calc auswählen
Verfasst: Mi, 24.06.2015 19:11
von Karolus
Code: Alles auswählen
doc = thisComponent
sheet = doc.CurrentController.ActiveSheet
...
for each rangename in mycells
sheet.getCellRangeByName( rangename).clearContents( 5 )
next
...
Variante 2
Code: Alles auswählen
cellranges = doc.createInstance("com.sun.star.sheet.SheetCellRanges")
...
for each rangename in mycells
cellranges.addRangeAddress(sheet.getCellRangeByName( rangename).RangeAddress, True)
next
...
Lasst doch mal dieses bescheuerte prefix
my weg, wenn das an jeden Objectnamen drangeklebt wird verlierts doch auch jegliche semantische Bedeutung
Re: Mehrere Bereiche zum Löschen per Makro in Calc auswählen
Verfasst: Di, 30.06.2015 07:55
von LidiaS
Hallo Karolus,
zu Variante I: So?
Code: Alles auswählen
doc = thisComponent
sheet = doc.CurrentController.ActiveSheet
Cells = Array("B2:B4","B7:B37","C40:C41","C43:I62","C65:C75")
for each i in Cells
sheet.getCellRangeByName( i ).clearContents( 5 )
next
Bei Variante II komme ich nicht weiter. Kannst Du bitte den ganzen Code schreiben, damit ich was lerne. Ich glaube mein Ansatz ist falsch. Fasst man die Zellbereiche hier auch noch mal irgendwie zusammen? Stehe auf dem Schlauch und komme nicht runter ...
Code: Alles auswählen
Doc = thisComponent
Sheet=Doc.getcurrentcontroller.activesheet
R1= Sheet.getCellRangeByName("B2:B4").RangeAddress
R2= Sheet.getCellRangeByName("B7:B37").RangeAddress
R3= Sheet.getCellRangeByName("C40:C41").RangeAddress
R4= Sheet.getCellRangeByName("C43:I62").RangeAddress
R5= Sheet.getCellRangeByName("C65:C75").RangeAddress
cellranges = Doc.createInstance("com.sun.star.sheet.SheetCellRanges")
mycells = ?????
for each rangename in mycells
cellranges.addRangeAddress(sheet.getCellRangeByName(rangename).RangeAddress,True).clearContents(5)
next rangename
Vielen Dank und Gruß
Lidia
Re: Mehrere Bereiche zum Löschen per Makro in Calc auswählen
Verfasst: Di, 30.06.2015 08:41
von Karolus
Hallo
Var I stimmt so, bis darauf das
i eine furchtbare Bezeichnung ist, für etwas das
keine ganzahlige Laufvariable ist
Var II
Code: Alles auswählen
doc = thisComponent
sheet = doc.CurrentController.ActiveSheet
Cells = Array("B2:B4","B7:B37","C40:C41","C43:I62","C65:C75")
cellranges = doc.createInstance("com.sun.star.sheet.SheetCellRanges")
for each rangename in Cells
cellranges.addRangeAddress(sheet.getCellRangeByName(rangename).RangeAddress,True)
next
cellranges.clearContents(5)
Ich will dir nicht zu nahe treten, aber wenn deine Programmierkünste nicht über das copy&paste-Stadium hinausgehen, solltest du dir besser ein anderes Hobby suchen.
Re: Mehrere Bereiche zum Löschen per Makro in Calc auswählen
Verfasst: Di, 30.06.2015 18:57
von LidiaS
Hallo Karolus,
Ich habe nicht vor Programmierkünstler zu werden. Und ich würde es begrüßen, wenn Du auf eine persönliche Einschätzung meiner Fähigkeiten auf Grund von ein paar Zeilen Code, verzichten würdest. Arroganz ist ein sehr schlechter Lehrmeister.
Da hier nun ausreichend funktionierende Code-Varianten zur Verfügung stehen, sehe ich das Thema als abgeschlossen an.
Schönen Tag noch.
Lidia