Seite 1 von 2

Zwei Makrofragen

Verfasst: Sa 16. Mär 2013, 08:12
von HolleMG
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

Re: Zwei Makrofragen

Verfasst: Sa 16. Mär 2013, 09:38
von F3K Total
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

Re: Zwei Makrofragen

Verfasst: Sa 16. Mär 2013, 10:49
von F3K Total
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

Re: Zwei Makrofragen

Verfasst: Sa 16. Mär 2013, 11:05
von gogo
ersetze mal diese Zeile:

Code: Alles auswählen

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

Code: Alles auswählen

args1(10).Value = cstr(date)

Re: Zwei Makrofragen

Verfasst: Sa 16. Mär 2013, 17:43
von HolleMG
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

Re: Zwei Makrofragen

Verfasst: Sa 16. Mär 2013, 17:47
von F3K Total
Ja,
wie ist denn das Datum vorhanden? Ein Feldbefehl? Handgetippt?
Gruß R

Re: Zwei Makrofragen

Verfasst: Sa 23. Mär 2013, 06:39
von HolleMG
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!

Re: Zwei Makrofragen

Verfasst: Sa 23. Mär 2013, 08:37
von F3K Total
Ohne Beispieldokument wird da nix von!
Gruß R

Re: Zwei Makrofragen

Verfasst: Sa 23. Mär 2013, 12:08
von HolleMG
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

Re: Zwei Makrofragen

Verfasst: Sa 23. Mär 2013, 13:21
von F3K Total
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