====== Výstupy do OpenOffice calc ======
===== Převod šablon .stc na .ots =====
**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
===== Vzorce pro počítání hodnot na jednotlivých řádcích =====
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")))
===== CRLF z SQL =====
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)) ...
===== Makro na odstránkování podle textu v buňce =====
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 na export do PDF =====
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 [[lua:tisk_pomoci_lua|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
===== Makro pro optimalni vysku vsech radku =====
sub Main
doc = thisComponent
list = doc.sheets(0)
radky = list.rows
list.rows().OptimalHeight = True
end sub
====== Výstupy do OpenOffice writer ======
Bandy se oddělují pomocí **Poznamek** Ctrl+Alt+N.
* Band se pojmenovává pomocí textu v poznámce **BandName="body_table_name"**.
* CommandBand se nastavuje pomoci textu v poznámce **Options="commandband,pripadny_dalsi_option"**
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"
====== Podepisování PDF elektronickým podpisem ======
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ř. [[http://jsignpdf.sourceforge.net/index.php?page=domu|JSignPdf]]. Postup viz. [[http://www.openoffice.cz/navody/jak-elektronicky-podepsat-pdf]].
Lze také stáhnout [[http://extensions.services.openoffice.org/en/project/jsignpdf|extension do OpenOffice]]
====== Úprava velkých repeated formátu OpenOffice - zaseknutí tisku ======
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
====== Formátovaní čísla na výstupu ======
Do buňky napsat **#@return {NumberFormat=DSI:GetMenaJazykDatum().Format, Value=DSI:FieldByName("cena"), BrushColor=...., FontColor=...., FontStyle=....}**
====== Zobrazení po tisku v excelu ======
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**