Uživatelské nástroje

Nástroje pro tento web


reports:openoffice

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 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ř. JSignPdf. Postup viz. http://www.openoffice.cz/navody/jak-elektronicky-podepsat-pdf.

Lze také stáhnout 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

reports/openoffice.txt · Poslední úprava: 2024/02/02 08:31 autor: Libor Kadaník