gelöst: Ein Makro für alle Tabellenblätter, wer kann helfen?

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

Moderator: Moderatoren

Girgei
***
Beiträge: 55
Registriert: Mo, 17.03.2014 16:29

gelöst: Ein Makro für alle Tabellenblätter, wer kann helfen?

Beitrag von Girgei »

Hallo allerseits,
habe ein Makro mit OO Calc aufgezeichnet, welches auch einwandfrei funktioniert. ABER leider nur auf EINEM Tabellenblatt. Es soll aber auf allen Tabellen der Datei ausgeführt werden. Ich habe viel herumexperimentiert aber es ist mir einfach nicht gelungen, das Makro zu ändern.
Vielleicht kann mir ja jemand aus dem Forum das Makro ergänzen?
Besten Dank im voraus für Hilfe
Ciao Girgei

ps: Das Makro soll "NAV" suchen, davon 2 Zellen nach rechts gehen und dort die 3 Buchstaben + 1 Leerzeichen löschen und dann wieder zurück zur Anfangstabelle.

hier der nur für ein Tabellenblatt funktionierende Code:

Code: Alles auswählen

 sub Morningstar
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Nr"
args1(0).Value = 1

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

rem ----------------------------------------------------------------------
dim args2(17) as new com.sun.star.beans.PropertyValue
args2(0).Name = "SearchItem.StyleFamily"
args2(0).Value = 2
args2(1).Name = "SearchItem.CellType"
args2(1).Value = 0
args2(2).Name = "SearchItem.RowDirection"
args2(2).Value = true
args2(3).Name = "SearchItem.AllTables"
args2(3).Value = true
args2(4).Name = "SearchItem.Backward"
args2(4).Value = false
args2(5).Name = "SearchItem.Pattern"
args2(5).Value = false
args2(6).Name = "SearchItem.Content"
args2(6).Value = false
args2(7).Name = "SearchItem.AsianOptions"
args2(7).Value = false
args2(8).Name = "SearchItem.AlgorithmType"
args2(8).Value = 1
args2(9).Name = "SearchItem.SearchFlags"
args2(9).Value = 65536
args2(10).Name = "SearchItem.SearchString"
args2(10).Value = "NAV"
args2(11).Name = "SearchItem.ReplaceString"
args2(11).Value = ""
args2(12).Name = "SearchItem.Locale"
args2(12).Value = 255
args2(13).Name = "SearchItem.ChangedChars"
args2(13).Value = 2
args2(14).Name = "SearchItem.DeletedChars"
args2(14).Value = 2
args2(15).Name = "SearchItem.InsertedChars"
args2(15).Value = 2
args2(16).Name = "SearchItem.TransliterateFlags"
args2(16).Value = 1280
args2(17).Name = "SearchItem.Command"
args2(17).Value = 0

dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$A$18"

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

rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "ToPoint"
args4(0).Value = "$B$18"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args4())

rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "ToPoint"
args5(0).Value = "$C$18"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args5())

rem ----------------------------------------------------------------------
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "ToPoint"
args6(0).Value = "$C$18"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args6())

rem ----------------------------------------------------------------------
dim args7(0) as new com.sun.star.beans.PropertyValue
args7(0).Name = "StringName"
args7(0).Value = "9,97"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args7())

rem ----------------------------------------------------------------------
dim args8(0) as new com.sun.star.beans.PropertyValue
args8(0).Name = "Nr"
args8(0).Value = 1

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


end sub
Zuletzt geändert von Girgei am Do, 22.05.2025 16:31, insgesamt 1-mal geändert.
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Ein Makro für alle Tabellenblätter, wer kann helfen?

Beitrag von Karolus »

Besser wäre es wenn du statt einer schwammigen Erklärung plus aufgezeichneten Code, ( der leider nicht wirklich das tut was du in der Erklärung behauptest ) eine real existierende Calc-datei hochladen würdest nebst einer vernünftigen Erklärung anhand derer man tatsächlich nachvollziehen kann was da getan werden soll.
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Girgei
***
Beiträge: 55
Registriert: Mo, 17.03.2014 16:29

Re: Ein Makro für alle Tabellenblätter, wer kann helfen?

Beitrag von Girgei »

Karolus hat geschrieben: Do, 22.05.2025 11:10 Besser wäre es wenn du statt einer schwammigen Erklärung plus aufgezeichneten Code, ( der leider nicht wirklich das tut was du in der Erklärung behauptest ) eine real existierende Calc-datei hochladen würdest nebst einer vernünftigen Erklärung anhand derer man tatsächlich nachvollziehen kann was da getan werden soll.
OK mache ich
Girgei
***
Beiträge: 55
Registriert: Mo, 17.03.2014 16:29

Re: Ein Makro für alle Tabellenblätter, wer kann helfen?

Beitrag von Girgei »

Karolus hat geschrieben: Do, 22.05.2025 11:10 Besser wäre es wenn du statt einer schwammigen Erklärung plus aufgezeichneten Code, ( der leider nicht wirklich das tut was du in der Erklärung behauptest ) eine real existierende Calc-datei hochladen würdest nebst einer vernünftigen Erklärung anhand derer man tatsächlich nachvollziehen kann was da getan werden soll.
Hier habe ich jetzt eine Musterdatei eingefügt, in der Hoffnung, dass mein Anliegen deutlicher erklärt.
Musterdatei.ods
(14.42 KiB) 54-mal heruntergeladen
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Ein Makro für alle Tabellenblätter, wer kann helfen?

Beitrag von Karolus »

Hallo

Code: Alles auswählen

Sub main
   doc = thisComponent
   for each sheet in doc.Sheets
      search = sheet.createSearchDescriptor()
      search.setSearchString("NAV")
      search.SearchCaseSensitive = True
      search.SearchRegularExpression = False
      search.SearchSimilarity = False
      search.SearchWords = True
      found = sheet.findAll(search)
      If not isnull(found) then
         for each cell in found.Cells
            cursor = sheet.createCursorByRange( cell )
            cursor.gotoOffset(2, 0)        
            t_string = cursor.getCellByPosition(0,0).String
            cursor.getCellByPosition(0,0).String = right(t_string, len(t_string) -4 )
         next
      end if
    Next
 End sub
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Gast

Re: Ein Makro für alle Tabellenblätter, wer kann helfen?

Beitrag von Gast »

Karolus hat geschrieben: Do, 22.05.2025 13:40 Hallo

Code: Alles auswählen

Sub main
   doc = thisComponent
   for each sheet in doc.Sheets
      search = sheet.createSearchDescriptor()
      search.setSearchString("NAV")
      search.SearchCaseSensitive = True
      search.SearchRegularExpression = False
      search.SearchSimilarity = False
      search.SearchWords = True
      found = sheet.findAll(search)
      If not isnull(found) then
         for each cell in found.Cells
            cursor = sheet.createCursorByRange( cell )
            cursor.gotoOffset(2, 0)        
            t_string = cursor.getCellByPosition(0,0).String
            cursor.getCellByPosition(0,0).String = right(t_string, len(t_string) -4 )
         next
      end if
    Next
 End sub
Hallo Karolus, vielen Dank für das Makro. Funktioniert super und blitzschnell, hinterlässt aber in den Zellen, in welchen die 3 Buchstaben und ein Leerzeichen gelöscht wurden, ein Format mit Hochkommas, was vor dem Löschen nicht war. Wenn du das auch noch in dein Makro ändern könntest, wäre ich super dankbar.
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Ein Makro für alle Tabellenblätter, wer kann helfen?

Beitrag von Karolus »

Code: Alles auswählen

cursor.getCellByPosition(0,0).FormulaLocal = right(t_string, len(t_string) -4 )
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Gast

Re: Ein Makro für alle Tabellenblätter, wer kann helfen?

Beitrag von Gast »

Karolus hat geschrieben: Do, 22.05.2025 15:17

Code: Alles auswählen

cursor.getCellByPosition(0,0).FormulaLocal = right(t_string, len(t_string) -4 )
Vielen Dank, alles funktioniert perfekt.
Antworten