Makrokomandos poveikio pavyzdys

Kaip „keitimų sekimo“ žymes Word dokumente paversti paprastai formatuotu „lyginamuoju variantu“ – su makrokomanda

Facebooktwittergoogle_pluspinterestlinkedintumblrmail

Prieš keletą metų tinklaraštyje publikavau įrašą apie tai, kaip Microsoft Word dokumentą su įjungtu keitimų paversti teisingu dokumento „lyginamuoju variantu“ – tokiu, kokie daromi rengiant teisės aktų pakeitimus. Mano aprašytas kelias buvo sąlyginai sudėtingas – Word dokumentą reikėjo įrašyti kaip HTML failą, tada atlikti jame paiešką ir keitimus, tada dokumentą vėl atverti su Word, ir galiausiai tekdavo kažkiek taisyti formatavimą. Paprasčiau, nei ilgame dokumente skrupulingai įrašinėti tekstą, jį ryškinti ir braukyti, bet visgi.

Bet štai neseniai radau būdą, kaip Word arba LibreOffice makrokomandos pagalba tai galima padaryti keliais pelės spragtelėjimais, neužsiimant visom sudėtingom manipuliacijom.

Word atveju, tereikia įsirašyti Word makrokomandą – štai šią:

Sub TrackChangesToFormatting()
Dim chgAdd As Word.Revision
If ActiveDocument.Revisions.Count = 0 Then
    MsgBox "Šiame dokumente nėra užfiksuotų pakeitimų", vbOKOnly
Else
    ActiveDocument.TrackRevisions = False
    For Each chgAdd In ActiveDocument.Revisions
        If chgAdd.Type = wdRevisionDelete Then
            chgAdd.Range.Font.StrikeThrough = True
            chgAdd.Reject
        ElseIf chgAdd.Type = wdRevisionInsert Then
            chgAdd.Range.Font.Bold = True
            chgAdd.Accept
        Else
            MsgBox ("Rastas neįprastas pakeitimas"), vbOKOnly + vbCritical
            chgAdd.Range.Select ' move insertion point
        End If
    Next chgAdd
End If
End Sub

Kur šią makrokomandą dėti? Makrokomandų kūrimas detaliai paaiškintas Microsoft Word pagalbos puslapyje „Makrokomandos kūrimas arba vykdymas“. Jei trumpai, Mano naudojamoje Word 2013 versijoje reikia atverti paskutinę kortelę „Programų kūrėjas“, spausti mygtuką „Makrokomanda“, atsidariusiame dialoge įrašyti makrokomandos pavadinimą „TrackChangesToFormatting“ ir spausti mygtuką „Kurti“.

Atsivėrus Microsoft Visual Basic rengyklei įterpti makrokomandos tekstą:

„Keitimų sekimo“ žymų pakeitimas paprastu formatavimu - makrokomandos įrašymo langas
„Keitimų sekimo“ žymų pakeitimas paprastu formatavimu – makrokomandos įrašymo langas

Tada įrašome pakeitimus ir užveriame Visual Basic langą. Makrokomandą galima matyti štai čia:

„Keitimų sekimo“ žymų pakeitimas paprastu formatavimu - makrokomandų dialogas
„Keitimų sekimo“ žymų pakeitimas paprastu formatavimu – makrokomandų dialogas

Įvykdyti makrokomandą galima paspaudus mygtuką „Vykdyti“.

Rezultatas – tekstas, kuriame keitimai pakeisti formatuotu (įterpimai paryškinti, išbraukimai – perbraukti) tekstu.

Žinoma, galima sukurti specialų mygtuką šiai makrokomandai Microsoft Word lange.

Šios makrokomandos kūrimui panaudojau stackexchange diskusijoje pateiktą pavyzdį.

O štai analogiška makrokomanda LibreOffice programai:

Sub TrackChangesToFormatting
'based on: https://www.literatureandlatte.com/web/forum/viewtopic.php?t=37746
   dim doc as object
   dim viewCursor as object
   dim redLines as object
   dim redLine as object
   dim document as object
   dim dispatcher as object
   dim count as long
   dim args2(0) as new com.sun.star.beans.PropertyValue
   dim args4(2) as new com.sun.star.beans.PropertyValue
 
   args2(0).Name = "Strikeout.Kind"
   args2(0).Value = 1
 
   doc = ThisComponent
   viewCursor = doc.CurrentController.ViewCursor
 
   document   = ThisComponent.CurrentController.Frame
   dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
 
   redLines = doc.Redlines
   count = redLines.getCount() - 1
   for i = 0 to count
      redLine = redLines.getByIndex(0) 'does not work with getByIndex(i)
      viewCursor.gotoRange(redLine.RedlineStart, false)
      viewCursor.gotoRange(redLine.RedlineEnd, true)
      if redLine.RedlineType = "Delete" Then
         dispatcher.executeDispatch(document, ".uno:Strikeout", "", 0, args2())
         dispatcher.executeDispatch(document, ".uno:RejectTrackedChange", "", 0, Array())
      elseif redLine.RedlineType = "Insert" Then
         dispatcher.executeDispatch(document, ".uno:Bold", "", 0, args4())
         dispatcher.executeDispatch(document, ".uno:AcceptTrackedChange", "", 0, Array())
      elseif redLine.RedlineType = "Format" Then
         dispatcher.executeDispatch(document, ".uno:AcceptTrackedChange", "", 0, Array())
      end if
   next i
End Sub

Šios makrokomandos kūrimui panaudojau šiame puslapyje pateiktą pavyzdį.

Facebooktwittergoogle_pluspinterestlinkedintumblrmail