NewBe Frage: Suchen und Ersetzten - geht das auch kürzer?

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

Moderator: Moderatoren

LidiaS
*
Beiträge: 15
Registriert: Do, 28.08.2014 19:14

NewBe Frage: Suchen und Ersetzten - geht das auch kürzer?

Beitrag von LidiaS »

Hallo Allerseits,

ich bin ganz neu hier und habe mit OO0 Basic eben erst angefangen. Ich habe ein kleines, funktionierendes Makro zum Suchen und Ersetzen von Worten/Zeichen in Calc erstellt (Mit Hilfe von Herrn Dannenhöfer ;-). Nun meine Frage: Geht das auch kürzer (besser)? Ich habe mit "if then" herumprobiert. Aber ohne wirklichen Erfolg. Warum "if then"? Ich dachte mir das so: Weil der String fürs Ersetzen immer "" ist. Also leer oder nichts. Und da sich das wiederholt dachte ich man könnte dieses Makro sicherlich straffen. Habe es aber (noch) nicht hinbekommen. Könnt Ihr mir bitte auf die Sprünge helfen?

Nachfolgend mein bescheidener Code.

Vielen Dank und Gruß
Lidia

Code: Alles auswählen

sub Suchen_und_Ersetzen

REM Definiere Variablen
Dim oDocument
Dim mySheet 'Tabellenblatt, in dem das Ersetzen stattfindet.
Dim myRange 'Zellbereich in dem ersetzt wird
Dim myReplace 'Ersetzen-Deskriptor.
Dim replace

REM Suchen und Ersetzen
mySheet = ThisComponent.Sheets(0)
myRange = mySheet.getCellRangeByName("A1:L100")
myReplace(1) = mySheet.createReplaceDescriptor()
myReplace(1).setSearchString(", Deutschland")
myReplace(1).setReplaceString("")
myReplace(1).SearchWords = False
replace  = mySheet.replaceAll(myReplace(1))

myReplace(2) = mySheet.createReplaceDescriptor()
myReplace(2).setSearchString("Mitgliedsname ")
myReplace(2).setReplaceString("")
myReplace(2).SearchWords = False
replace  = mySheet.replaceAll(myReplace(2))

myReplace(3) = mySheet.createReplaceDescriptor()
myReplace(3).setSearchString("EUR ")
myReplace(3).setReplaceString("")
myReplace(3).SearchWords = False
replace  = mySheet.replaceAll(myReplace(3))

myRange = mySheet.getCellRangeByName("H1:H100")
myReplace(4) = mySheet.createReplaceDescriptor()
myReplace(4).setSearchString("(")
myReplace(4).setReplaceString("")
myReplace(4).SearchWords = False
replace  = mySheet.replaceAll(myReplace(4))

myReplace(5) = mySheet.createReplaceDescriptor()
myReplace(5).setSearchString(")")
myReplace(5).setReplaceString("")
myReplace(5).SearchWords = False
replace  = mySheet.replaceAll(myReplace(5))

end sub
Karolus
********
Beiträge: 7440
Registriert: Mo, 02.01.2006 19:48

Re: NewBe Frage: Suchen und Ersetzten - geht das auch kürzer

Beitrag von Karolus »

Etwa so:

Code: Alles auswählen

sub Suchen_und_Ersetzen

Sheet = ThisComponent.Sheets(0)
Replace = Sheet.createReplaceDescriptor()
Replace.setSearchString(", Deutschland|Mitgliedsname |EUR |[()]")
Replace.setReplaceString("")
Replace.SearchWords = False
Replace.SearchCaseSensitive = True
Replace.SearchRegularExpression = True
Sheet.replaceAll( Replace)

end sub
Zuletzt geändert von Karolus am Fr, 29.08.2014 12:04, insgesamt 1-mal geändert.
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LidiaS
*
Beiträge: 15
Registriert: Do, 28.08.2014 19:14

Re: NewBe Frage: Suchen und Ersetzten - geht das auch kürzer

Beitrag von LidiaS »

Hallo Karolus,

ganz herzlichen Dank für Deine super schnelle Unterstützung. Code habe ich "verbaut" und ausprobiert. Sieht gut aus :D und funktioniert. Bin einen kleinen Wissens-Schritt weiter.

Viele Grüße
Lidia
LidiaS
*
Beiträge: 15
Registriert: Do, 28.08.2014 19:14

Re: NewBe Frage: Suchen und Ersetzten - geht das auch kürzer

Beitrag von LidiaS »

Hallo Karolus,

jetzt habe ich noch ein kleines Problem:

Ich dachte ich könnte mit

Code: Alles auswählen

myRange = mySheet.getCellRangeByName("H1:H100")
den Bereich, in dem gesucht und ersetzt wird, einschränken, aber dies wird komplett ignoriert (ging bei meiner Version schon nicht, habe ich erst jetzt gemerkt). Der Makro ersetzt in dem gesamten Dokument die "()". Dabei sind sie in einigen Spalten erwünscht und in einer anderen nicht. Wie schränke ich dies richtig ein? So wie ich es gedacht habe ist es ja anscheinend falsch ...

Wäre für nochmalige Hilfe dankbar.

Vielen Dank und Gruß
Lidia
Karolus
********
Beiträge: 7440
Registriert: Mo, 02.01.2006 19:48

Re: NewBe Frage: Suchen und Ersetzten - geht das auch kürzer

Beitrag von Karolus »

Hallo
Alleine damit, das du den Bereich an den Namen `myRange` bindest, ist es ja nicht getan, du musst auch noch im restlichen Code `Sheet` gegen `myRange` tauschen.
das sind die beiden Zeilen

Code: Alles auswählen

Replace = Sheet.createReplaceDescriptor() →
Replace = myRange.createReplaceDescriptor() 

Code: Alles auswählen

Sheet.replaceAll( Replace)→
myRange.replaceAll( Replace) 
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LidiaS
*
Beiträge: 15
Registriert: Do, 28.08.2014 19:14

Re: NewBe Frage: Suchen und Ersetzten - geht das auch kürzer

Beitrag von LidiaS »

Hallo Karolus,

ah ... jetzt ... ja, verstehe. Wenn man es sieht ist es logisch. Aber auf die Idee wäre ich nicht gekommen.

Ganz herzlichen Dank für Deine Unterstützung.

Viele Grüße
Lidia
Devil
**
Beiträge: 44
Registriert: Mi, 08.07.2015 10:05
Wohnort: Hölle

Re: NewBe Frage: Suchen und Ersetzten - geht das auch kürzer?

Beitrag von Devil »

Hallo Karolus,
Ich habe deinen Code zum suchen und ersetzen mal ausprobiert und mir meldet OOo bei dem Teil

Code: Alles auswählen

Replace.SetSearchString("Hallo")
den folgenden Fehler : "Symbol Replace bereits anders definiert."

was mache ich falsch bzw. was muss ich anders machen???
Höllische Grüße
Devil
Karolus
********
Beiträge: 7440
Registriert: Mo, 02.01.2006 19:48

Re: NewBe Frage: Suchen und Ersetzten - geht das auch kürzer?

Beitrag von Karolus »

Hallo
Ich hatte das damals nicht explizit getestet `replace` ist eine Basic-function, benutze einen anderen Namen, zB. `Repl` oder meinetwegen auch `myReplace`
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Devil
**
Beiträge: 44
Registriert: Mi, 08.07.2015 10:05
Wohnort: Hölle

Re: NewBe Frage: Suchen und Ersetzten - geht das auch kürzer?

Beitrag von Devil »

Entschuldigung wenn ich etwas nevig rüber kommen sollte aber ich habe noch nie mit Basic gearbeitet und brauche es vermutlich auch nur dieses eine mal aber jetzt mosert er an, dass er in der Zeile

Code: Alles auswählen

Sheet = thisComponent.sheets(0) 
die Eigenschaft oder Methode "sheets" nicht gefunden hat.

das hatte ich auch schon bei einigen anderen versuchen wo das vorkam...
Höllische Grüße
Devil
Benutzeravatar
balu
********
Beiträge: 3810
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: NewBe Frage: Suchen und Ersetzten - geht das auch kürzer?

Beitrag von balu »

Hallo Devil,

ich kenne niemanden der dir auf grund deiner einzigen geposteten Codezeile helfen kann. Also zeig uns lieber deinen gesamten Code wo der Fehler auftaucht.
Handelt es sich denn auch um Calc?



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Devil
**
Beiträge: 44
Registriert: Mi, 08.07.2015 10:05
Wohnort: Hölle

Re: NewBe Frage: Suchen und Ersetzten - geht das auch kürzer?

Beitrag von Devil »

Vermutlich liegt es daran dass es der Writer ist...
Also es ist der Code von Oben:

Code: Alles auswählen

sub Suchen_und_Ersetzen

Sheet = ThisComponent.Sheets(0)
Repl = Sheet.createReplaceDescriptor()
Repl.setSearchString("Hallo")
Repl.setReplaceString("Tschüss")
Repl.SearchWords = False
Repl.SearchCaseSensitive = True
Repl.SearchRegularExpression = True
Sheet.replaceAll( Repl)

end sub
Ich habe es jetzt mal ohne das sheets(0) gemacht und jetzt funktioniert es.
Hier wie es für den Writer funktioniert (bin bisher irgendwie noch nicht auf die Idee gekommen das es daran liegen könnte :lol: ):

Code: Alles auswählen

sub Suchen_und_Ersetzen

Sheet = ThisComponent
Repl = Sheet.createReplaceDescriptor()
Repl.setSearchString("Hallo")
Repl.setReplaceString("Tschüss")
Repl.SearchWords = False
Repl.SearchCaseSensitive = True
Repl.SearchRegularExpression = True
Sheet.replaceAll( Repl)

end sub
Vielen dank ihr habt mir viel viel weiter geholfen :D
Höllische Grüße
Devil
Karolus
********
Beiträge: 7440
Registriert: Mo, 02.01.2006 19:48

Re: NewBe Frage: Suchen und Ersetzten - geht das auch kürzer?

Beitrag von Karolus »

Du hast da offensichtlich keinen regulären Ausdruck, daher kannst(solltest) du mit:

Code: Alles auswählen

Repl.SearchRegularExpression = False
arbeiten.

Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Devil
**
Beiträge: 44
Registriert: Mi, 08.07.2015 10:05
Wohnort: Hölle

Re: NewBe Frage: Suchen und Ersetzten - geht das auch kürzer?

Beitrag von Devil »

Dann habe ich noch eine frage Karolus. Weisst du woher es kommt, dass ich hiermit zu zwar Strings ersetzen kann, welche normalen Text wie "Hallo" und "Tschüss", aber das ersetzen von Strings mit Sonderzeichen funktioniert nicht immer (z.b. "{<User>}" wird manchmal nicht ersetzt).

Edit: hat sich erledigt da ich den gesamten block ausgetauscht habe.
Höllische Grüße
Devil
Antworten