🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Zwei Makrofragen

Alles zur Programmierung im LibreOffice.
HolleMG
Beiträge: 10
Registriert: So 10. Mär 2013, 09:10

Zwei Makrofragen

Beitrag von HolleMG » Sa 16. Mär 2013, 08:12

Hallo allerseits,
ich habe zwei Makroprobleme, die hier jetzt neu einstelle, weil im ich damit im Writer wohl falsch war. Das erste betrifft das Umwandeln von Text in eine Formel.
Z.B. soll die Formel sein: %rho = m over V.
Jetzt möchte ich diesen markierten Text zu einer Formel umwandeln. Also normalerweise: Alt - E - O - R - Enter. Dann würde ich diesem Formelobjekt noch die Eigenschaft geben, dass der Abstand zum Text links und rechts 0cm ist. Also eigentlich Rechtsklick - Objekt - Abstände links und rechts auf Null stellen, Enter.

Genau das soll das Makro können.

Mit einem zweiten Makro möchte ich in einem Textdokument das aktuelle Datum finden, mein Makro funktioniert aber nicht! Was mache ich falsch?
Ich bin übrigens alles andere als ein Programmierer :? , habe hier nur versucht ein gefundenes Makro abzuändern. Eine Fehlermeldung gibt's nicht.
Das Makro findet weder den 13.3.13 noch den 13.03.2013.

Danke schonmal für alle Antworten und Grüße von HolleMG


sub AktDatSuch

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 ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:GoToStartOfDoc", "", 0, Array())

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

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


end sub

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Zwei Makrofragen

Beitrag von F3K Total » Sa 16. Mär 2013, 09:38

Hallo,
  • Das automatische Einbetten von Formeln ist kompliziert, ich hatte es versucht, war aber nicht zum Ergebnis gekommen.
  • Was meinst Du mit
    HolleMG hat geschrieben:in einem Textdokument das aktuelle Datum finden?
    Möchtest Du das aktuelle Datum eintragen oder hast Du eine Datei, in der das aktuelle Datum schon steht, und möchtest dort hin springen?
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Zwei Makrofragen

Beitrag von F3K Total » Sa 16. Mär 2013, 10:49

Hallo,
F3K Total hat geschrieben:Das automatische Einbetten von Formeln ist kompliziert, ich hatte es versucht, war aber nicht zum Ergebnis gekommen.
Jetzt ist es mir doch noch gelungen, dieses Makro wandelt den selektierten Text in eine Formel mit Abstand 0 um, unten habe ich ein Beispiel drangehängt. Im laufenden Betrieb sollte man das Makro an eine Tastenkombination binden.

Code: Alles auswählen

Sub S_insert_formula_from_selection
    odoc = Thiscomponent
    ocurrentselection = odoc.currentselection(0)
    if ocurrentselection.String = "" then
       msgbox "Erst Text auswählen"
       exit sub
    endif
    otext = odoc.Text
    ocursor = otext.createTextCursorByRange(ocurrentselection)
    sformula = ocursor.string
    ocursor.string = ""
    opage = odoc.drawpage
    oShape = oDoc.createInstance("com.sun.star.text.TextEmbeddedObject")
    oShape.CLSID = "078B7ABA-54FC-457F-8551-6147e776a997"
    oshape.AnchorType = 1
    oText.insertTextContent(oCursor, oShape, FALSE)
    oShape.Model.Formula = sformula
    oXEO = oShape.ExtendedControlOverEmbeddedObject
    oXEO.changeState(3)
    oXEO.changeState(1)
    oshape.VertOrientPosition = 0
    oshape.LeftMargin = 0 'Abstand auf null stellen
    oshape.RightMargin = 0 'Abstand auf null stellen
End Sub
Viel Erfolg damit
Gruß R
Dateianhänge
Insert_Formula_from_selection.odt
(12.82 KiB) 259-mal heruntergeladen
Windows 11: AOO, LO Linux Mint: AOO, LO

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Zwei Makrofragen

Beitrag von gogo » Sa 16. Mär 2013, 11:05

ersetze mal diese Zeile:

Code: Alles auswählen

args1(10).Value = HEUTE()
mit dieser:

Code: Alles auswählen

args1(10).Value = cstr(date)
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

HolleMG
Beiträge: 10
Registriert: So 10. Mär 2013, 09:10

Re: Zwei Makrofragen

Beitrag von HolleMG » Sa 16. Mär 2013, 17:43

Hallo F3K total,
das mit der Formel funktioniert prächtig, Vielen Dank!! :D

Ich meinte in der Tat das Finden eines im Dokument bereits vorhandenen Datums.

Und:

Hallo gogo,

nee, irgendwie klappt's noch nicht. Muss das Datum ein bestimmtes Format haben? Mein Makrocode sieht jetzt so aus wie unten reinkopiert.
Habe ich etwas falsch gemacht?

Grüße vom Holle


sub AktDatSuch

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 ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:GoToStartOfDoc", "", 0, Array())

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

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


end sub

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Zwei Makrofragen

Beitrag von F3K Total » Sa 16. Mär 2013, 17:47

Ja,
wie ist denn das Datum vorhanden? Ein Feldbefehl? Handgetippt?
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

HolleMG
Beiträge: 10
Registriert: So 10. Mär 2013, 09:10

Re: Zwei Makrofragen

Beitrag von HolleMG » Sa 23. Mär 2013, 06:39

Hallo F3K Total,

in dem Dokument, in dem das vorwiegend geschehen soll, sind die Daten in einer Calc-Tabelle entstanden und dann mit Strg+Umschalt+V eingefügt. Außerdem steht links vom Datum eine Klammer und sie sind fett formatiert.

Im Testdokument habe ich das heutige Datum in allen möglichen Formatierungen handgeschrieben eingefügt, auch als Feldbefehl eingefügt funzt das nicht.

Hm!

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Zwei Makrofragen

Beitrag von F3K Total » Sa 23. Mär 2013, 08:37

Ohne Beispieldokument wird da nix von!
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

HolleMG
Beiträge: 10
Registriert: So 10. Mär 2013, 09:10

Re: Zwei Makrofragen

Beitrag von HolleMG » Sa 23. Mär 2013, 12:08

Hallo F3K Total,

hier kommt ein Link zu einem ganz kurzen Beispieldokument: http://hollkott-online.de/res/Unbenannt2.odt
Oder ist das nicht üblich, einen solchen Link einzubauen? Dann sag' bitte kurz Bescheid!

Grüße von Holle

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Zwei Makrofragen

Beitrag von F3K Total » Sa 23. Mär 2013, 13:21

Hi,
dieses Makro findet das erste Auftreten des heutigen Datums und markiert es.

Code: Alles auswählen

Sub S_Find_Current_Date
odoc = thiscomponent
sdate = format(Date,"DD.MM.YY")
oSearchDescriptor = odoc.createSearchDescriptor
   With oSearchDescriptor
    .SearchString = sdate
    .SearchWords = true           'The attributes default to False
    .SearchCaseSensitive = False  'So setting one to False is redundant
  End With
  oFound = odoc.findFirst(oSearchDescriptor)
  oviewcursor = odoc.currentcontroller.ViewCursor
  oviewcursor.gotostart(false)
  oviewcursor.gotoRange(oFound,false)
End Sub
Gruß R
Zuletzt geändert von F3K Total am Sa 23. Mär 2013, 19:31, insgesamt 1-mal geändert.
Windows 11: AOO, LO Linux Mint: AOO, LO


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten