stc2ots.sh
#!/bin/sh echo spustit v adresari s reporty for i in `find -name "*.stc"`; do unoconv -f ots $i; done for i in `find -name "*.stc"`; do git rm $i; done for i in `find -name "*.ots"`; do git add $i; done for i in `find -name "*_reports.xml"`; do perl -pi -e's/\.stc/.ots/' $i; done
V OpenOffice šablonách se při použití vzorců drží absolutní odkazy na buňky. Pokud chceme používat vzorce musí se odkazovat na buňky pomocí funkce indirect() a cell(). Cell() vrací info o buňce, ve které je vzorec, Indirect() převádí řetězec na odkaz na buňku.
Příklad: chci na řádku ve vzorci sečíst sloupce F a K - vzorec bude:
=INDIRECT(CONCATENATE("F";CELL("ROW")))+INDIRECT(CONCATENATE("K";CELL("ROW")))
pro zalomení (viditelné v buňce) se musí vložit nezlomitelná mezera společně s CRLF
... list(idskladkarta, ASCII_CHAR(160)||ASCII_CHAR(13)||ASCII_CHAR(10)) ...
Pokud se tiskne do OpenOffice calc více záznamů, které je třeba tisknout tak, aby hlavička každého zázamu začínala na samostatném listě, je možné použít následující makro. Pro každou šablonu je nutné specificky doupravit kde a co hledat (zalomení stránky se dá nad buňku, která obsahuje hledaný text) - v následujícím příkladu se na prvním listu v rozsahu J1:J3000 hledá text "Dodací list".
Pro automatické spuštění po otevření dokumentu je nutné makro "navěsit" např. na akci Otevřít dokument (menu Nástroje → Přizpůsobit → Události). Pozor potom na úpravu šablony - při každém otevření se přidá ruční zalomení.
sub ZalomitStranku dim document as object dim dispatcher as object dim Sheet, CellRange, Descriptor, Found As Object document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") Sheet = ThisComponent.getSheets().getByIndex(0) 'hledej na prvnim listu CellRange=Sheet.getCellRangeByName("A1:A3000") 'hledej ve sloupci J Descriptor=CellRange.createSearchDescriptor() With Descriptor .SearchCaseSensitive=False .SearchString="KonecStranky" .SearchType=1 'Search for values, not just formulas. This is an undocumented property .SearchWords=True 'Search the whole cell, not just part of it End With Found=Sheet.findAll(Descriptor) 'najit vsechno podle .SearchString dim args1(0) as new com.sun.star.beans.PropertyValue If not ISNULL(Found) then For i=0 to Found.Count-1 'MsgBox Found(i).AbsoluteName args1(0).Name = "ToPoint" args1(0).Value = Found(i).AbsoluteName dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1()) dispatcher.executeDispatch(document, ".uno:InsertRowBreak", "", 0, Array()) dispatcher.executeDispatch(document, ".uno:ClearContents", "", 0, Array()) 'smaz text v bunce Next EndIf 'skok zpatky na A1 args1(0).Name = "ToPoint" args1(0).Value = "$A$1" dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1()) end sub
Makro si zjistí plnou cestu a název otevřeného souboru a do stejného adresáře pod stejným názvem uloží .pdf.
Pro automatické spuštění po otevření dokumentu je nutné makro "navěsit" např. na akci Otevřít dokument (menu Nástroje → Přizpůsobit → Události) - vhodné pro tisk s pevně danou cestou k výstupnímu souboru (viz Tisk pomocí LUA).
Sub SavePDF cFile = ThisComponent.URL cFile = Left(cFile, Len(cFile) - 4) + ".pdf" oDoc = StarDesktop.getCurrentComponent() oDoc.storeToURL( ConvertToURL( cFile ),_ Array( _ MakePropertyValue( "FilterName", "writer_pdf_Export" ) ) End Sub Function MakePropertyValue( Optional cName As String, Optional uValue ) As com.sun.star.beans.PropertyValue oPropertyValue = createUnoStruct( "com.sun.star.beans.PropertyValue" ) If Not IsMissing( cName ) Then oPropertyValue.Name = cName EndIf If Not IsMissing( uValue ) Then oPropertyValue.Value = uValue EndIf MakePropertyValue() = oPropertyValue End Function
sub Main doc = thisComponent list = doc.sheets(0) radky = list.rows list.rows().OptimalHeight = True end sub
Bandy se oddělují pomocí Poznamek Ctrl+Alt+N.
Config pro report se nastavuje též pomocí poznamek. Např. nastavení výstupního souboru:
BandName="config_output" Options="#@return HOMEDIR()..[[pokus.odt]]#"
Fieldy jsou jako v html #FieldName#
Vypnout náhrady uvozovek: "Nástroje|Automatické opravy|Vlastní uvozovky"
Podepsaný ODT soubor nelze uložit jako podepsané PDF. Pomocí Adobe Reader se dají podepisovat pouze PDF dokumenty, které byly při vytvoření speciálně označeny - běžné nelze. Je nutné použít např. JSignPdf. Postup viz. http://www.openoffice.cz/navody/jak-elektronicky-podepsat-pdf.
Lze také stáhnout extension do OpenOffice
Moznosti|LibreOffice|Expertni nastaveni: org.openoffice.Office.Common.Save.Document.PrettyPrinting = true
unzip system/reports/ucto/prehledvysledku.stc -d /tmp/ content.xml grep repeated /tmp/content.xml vim /tmp/content.xml zip -u -j system/reports/ucto/prehledvysledku.stc /tmp/content.xml
Do buňky napsat #@return {NumberFormat=DSI:GetMenaJazykDatum().Format, Value=DSI:FieldByName("cena"), BrushColor=…., FontColor=…., FontStyle=….}
Nedrží okraje + zápatí se překrývá s tiskem. Řešení: ve formátu stránky - Zápatí zaškrtnout volbu Automatická úprava výšky