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

#1 13. 1. 2016 13:59:45

ajs
Člen
Registrace: 13. 1. 2016
Příspěvků: 3

Makro - nahrazení textu

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

Offline

#2 13. 1. 2016 16:05:49

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,435

Re: Makro - nahrazení textu

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.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#3 13. 1. 2016 19:16:24

ajs
Člen
Registrace: 13. 1. 2016
Příspěvků: 3

Re: Makro - nahrazení textu

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.

Offline

#4 13. 1. 2016 20:02:46

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,435

Re: Makro - nahrazení textu

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

Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#5 14. 1. 2016 20:15:18

ajs
Člen
Registrace: 13. 1. 2016
Příspěvků: 3

Re: Makro - nahrazení textu

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

Offline

#6 15. 1. 2016 16:53:38

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,435

Re: Makro - nahrazení textu

ajs #1 napsal(a)

Ve writeru otevírám soubor typu pdf a makrem vyhledávám text a nahrazuji jej.

Následně :

ajs #5 napsal(a)

Ve Writeru na dokumenty ODT je plně funkční. Ale dokumenty PDF se otevírají v programu Draw a tam to píše chybu :

    To že se to otevírá v DRAW je poměrně známá skutečnost, ale původně to šlo snadno i ve Writer. Jenom zřejmě proto, že šlo o starší verzi LO. Takže Vy jste to takto podával v prvním příspěvku. V tom posledním už to pravda není - to jste přeinstaloval, nebo co se změnilo?


    Jedná se jen o to, že jsem nahradil makro s UNO za makro bez UNO. Takže obsluha podle popisu zřejmě zůstala. Otvevřel jste z Writeru odresář s více soubory pdf a spustil nějakou sérii maker? To vychází ze skutečnosti : 

ajs #3 napsal(a)

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í.


     Popište prosím co se změnilo, že to nejde tak jak uvádíte v úvodním pčíspěvku. Nebo ještě jinak - otestujte znovu Váš původní systém - otevře Writer i potom pdf? To bych upravil iteraci pro UNO. Podle všeho jste musel pdf nejprve otevřít Writerem a pak spustit sérii nahraných maker - každé na jiné heslo. Výše uvedené makro by změnu chování Writeru způsobit nemělo. Upřesněte prosím co opravdu děláte při tom původním postupu.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

Zápatí