Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 Re: Writer » Makro - nahrazení textu » 14. 1. 2016 20:15:18

ajs
neutr napsal(a)

Otestujte tohle :

Sub Najdi_Nahrad()
    Dim oDoc,oText,oVC,oStart,oEnd,oFind,FandR
    oDoc = ThisComponent : oText = oDoc.Text
    oVC = oDoc.CurrentController.getViewCursor
        Hledat = Array("1", "2","3" ,"4", "5" ,"6" ,"7", "8", "Search", "Value")
        Nahradit = Array("I", "II", "III", "IV", "V", "VI", "VII", "VIII", "hledat", "Hodnota")
        Pocet = 0
       While Pocet <= uBound(Hledat)
          oStart = oText.createTextCursorByRange(oVC.Start)
          If Not oVC.isCollapsed then oEnd = oText.createTextCursorByRange(oVC.End)
             FandR = oDoc.createReplaceDescriptor
             With FandR
                .SearchString = Hledat(Pocet)
                .ReplaceString = Nahradit(Pocet)
                .SearchWords = false
             End With
          If isEmpty(oEnd) then 'Do whole document.
               oDoc.replaceAll(FandR)
          Else
               Do
                   oFind = oDoc.FindNext(oStart.End,FandR)
                   If isNull(oFind) then Exit Do
                   If oText.compareRegionEnds(oFind,oEnd) < 0 then Exit Do
                   oFind.setString(FandR.ReplaceString)
                   oFind = oDoc.FindNext(oFind.End,FandR)
              Loop
          EndIf
       Pocet = Pocet + 1
        Wend      
End Sub

Díky za makro. Ve Writeru na dokumenty ODT je plně funkční. Ale dokumenty PDF se otevírají v programu Draw a tam to píše chybu:
BASIC - chyba při běhu. Vlastnost nebo metoda nenalezena: Text.
Mohu ještě poprosit o pomoc?
Děkuji

#2 Re: Writer » Makro - nahrazení textu » 13. 1. 2016 19:16:24

ajs
neutr napsal(a)

Tak nějak nechápu jak to ovládáte. To máte stále otevřený Basic a manuálně přepisujete hledaný "termit"? nebo máte na 100 termínů 100 maker?
     Ta hláška je v podstatš systémová. Vždy totiž vrátí kolik čeho bylo nahrazeno. Takže když tam nic není, tak je to jen podobné hlášení. Zase aby bylo něco přepsáno a nebylo to avizováno tak to asi bude divné na? "Dělej a nezajímá mne nic".
     Samo sebou by to mělo jít obejít - nejspíš makrem bez UNO (tohle je makro UNO nahrané záznamníkem). Jenomže pak jde o to kolik výrazů se nahrazuje, respektive jestli nemáte požadavek na připsání reportu. Například na konec, nebo jinam. - nahrazeno X krát výraz abcd za rstu.
     Umím si představit že report může být přidán k názvu aby se hledaly jen nezpracované dokumenty v případě, že se práce přeruší. (Ale ztráta orientace obecně - stačí jít na oběd, nebo na záchod - a jste vedle jak ta jedle. Jiným systémem je načítat cyklem zdroje a po zpracování je ukládat jinam, ale zápis do hlavičky je asi lepší. Nemusí existovat duplicity.)


     Běžné je, že se jedním makrem iterují mnohočetné výrazy (+ náhrady). Pak tedy máte jediné makro kterému dáte seznam ke zpracování. To se dělá buď přímo makrem, nebo pomocným listem ze kterého makro načítá.


     Takže upřesněte co byste opravdu potřeboval. Vámi uvedené makro by možná šlo ořezat od hlášení, ale nevím jestli ořezat jen ta negativní, nebo i ta pozitivní? Spíš to chce psané makro bez UNO a možnost iterovat do alelujá různé výrazy v různžch adresářích. Pak jde ještě o report. Jak a kam ho vložit.

Makro je samozřejmě delší. Je tam otevření dokumentu, nahrazení několika výrazů a uložení. Jen jsem dal do fóra tu část co dělá problémy.

Žádná hláška při úspěšném nahrazení výrazu se neobjevuje. Objeví se jen když nenajde uvedený výraz a celé makro se zastaví a čeká na odklepnutí. Při nahrazování třeba 20 výrazů a nenalezení 19 je třeba 19 krát odklepnout hlášku. Toto bych očekával při ručním zpracování dokumentu přes dialog "Najít a nahradit" než v makru.

Ano máte pravdu makro bylo nahrané záznamníkem ale jsem jen obyčejný uživatel co dal dohromady podle internetu funkční makro pro svou potřebu.

Můžete dát příklad jak udělat makro bez UNO? Nebo uvést nějaký odkaz?
Na internetu jsem našel právě jen nahrané příklady záznamníkem.
Žádné reporty kolik a čeho bylo změněno nepotřebuji.

#3 Writer » Makro - nahrazení textu » 13. 1. 2016 13:59:45

ajs
Odpovědí: 5

Dobrý den.
Mám nainstalovaný LibreOffice 4.4.5.2 na WindowsXP.
Ve writeru otevírám soubor typu pdf a makrem vyhledávám text a nahrazuji jej.
Pokud však makro nenajde uvedený řetězec zobrazá se dialogové okno s textem "Hledané klíčové slovo nenalezeno" a čeká to na odklepnutí tlačítka OK.
Můžete mi poradit prosím jak se tohoto hlášení zbavit nebo ho automaticky odklepnout aby script pokračoval atomaticky dále?

Děkuji za pomoc

Josef

Uvedené makro:

REM  *****  BASIC  *****
Sub Upravit()
	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")
	
	dim args1(18) as new com.sun.star.beans.PropertyValue
	args1(0).Name = "SearchItem.StyleFamily"
	args1(0).Value = 2
	args1(1).Name = "SearchItem.CellType"
	args1(1).Value = 0
	args1(2).Name = "SearchItem.RowDirection"
	args1(2).Value = true
	args1(3).Name = "SearchItem.AllTables"
	args1(3).Value = false
	args1(4).Name = "SearchItem.Backward"
	args1(4).Value = false
	args1(5).Name = "SearchItem.Pattern"
	args1(5).Value = false
	args1(6).Name = "SearchItem.Content"
	args1(6).Value = false
	args1(7).Name = "SearchItem.AsianOptions"
	args1(7).Value = false
	args1(8).Name = "SearchItem.AlgorithmType"
	args1(8).Value = 0
	args1(9).Name = "SearchItem.SearchFlags"
	args1(9).Value = 65536
	args1(10).Name = "SearchItem.SearchString"
	args1(10).Value = "CoHledám"	
	args1(11).Name = "SearchItem.ReplaceString"
	args1(11).Value = "Nahradím"	
	args1(12).Name = "SearchItem.Locale"
	args1(12).Value = 255
	args1(13).Name = "SearchItem.ChangedChars"
	args1(13).Value = 2
	args1(14).Name = "SearchItem.DeletedChars"
	args1(14).Value = 2
	args1(15).Name = "SearchItem.InsertedChars"
	args1(15).Value = 2
	args1(16).Name = "SearchItem.TransliterateFlags"
	args1(16).Value = 1073745152
	args1(17).Name = "SearchItem.Command"
	args1(17).Value = 3
	args1(18).Name = "Quiet"
	args1(18).Value = true
	dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())

End Sub

Zápatí

Používáme FluxBB