Izvoz v XLSX: Razlika med redakcijama

Iz SDMS
Jump to navigationJump to search
(Nova stran z vsebino: == CRS*.XML (transformacije koordinatnih sistemov) == Transformacije koordinatnih sistemov so vgrajene v sam program. Parametri za Helmertovo 7-parametrsko transformacijo pa...)
 
m (xlsCV - cell value (posebne vrednosti celic))
 
(9 vmesnih redakcij istega uporabnika ni prikazanih)
Vrstica 1: Vrstica 1:
== CRS*.XML (transformacije koordinatnih sistemov) ==
+
== Osnovni primer ==
Transformacije koordinatnih sistemov so vgrajene v sam program. Parametri za Helmertovo 7-parametrsko transformacijo pa se lahko podajo v XML datoteki.
 
=== Primer ===
 
 
<pre>
 
<pre>
<?xml version="1.0" encoding="windows-1250"?>
+
Sub PrimerXLS
<crs>
+
Dim XLS As TXlsWriter
   <projection>
+
  Dim titleStyle, headerStyle, cellStyle, footerStyle As TXlsStyle
    <prcode>SI-D48</prcode>
+
  Dim lefttopCell, rightbottomCell As TXlsCell
    <transformation>
+
  Dim J As Long
      <trcode>GURS-08</trcode>
+
 
      <trnote>Cela Slovenija (15-125cm)</trnote>
+
  // inicializiramo writer in  prvi list
      <trtowgs>409.545, 72.164, 486.872, 3.085957, 5.469110, -11.020289, 17.919665</trtowgs>
+
  XLS = CreateXlsWriter
      <trtocrs>-473.862, -124.587, -413.576, -4.730807, -2.380796, 11.786482, -10.645117</trtocrs>
+
  XLS.AddSheet('List 1')
      <trtest>SITRANET, 16, 0, 0, 46, 0, 0, 577825.261, 95579.074</trtest>
+
 
    </transformation>
+
  // spremenimo normal stil
   </projection>
+
  XLS.StyleNormal.FontSize = 12
</crs>
+
  XLS.StyleNormal.FontName = 'Arial'
 +
 
 +
  // definiramo ostale stile po potrebi
 +
  titleStyle = XLS.AddStyle('', XLS.StyleTitle)
 +
  titleStyle.FontBold = False
 +
  titleStyle.FontItalic = True
 +
  titleStyle.FontSize = 20
 +
  titleStyle.HorAlign = XlshaCenter
 +
  titleStyle.FontName = 'Arial'
 +
 
 +
  headerStyle = XLS.AddStyle('', XLS.StyleHeader)
 +
  headerStyle.FontSize = 12
 +
  headerStyle.HorAlign = xlshaAuto
 +
 
 +
  footerStyle = XLS.AddStyle('', XLS.StyleFooter)
 +
  footerStyle.FontSize = 12
 +
  footerStyle.HorAlign = XlshaRight
 +
   footerStyle.TextWrap = false
 +
 
 +
  // zamrznemo stolpce in/ali vrstice
 +
  XLS.SetFixedColumns(1)
 +
  XLS.SetFixedRows(2)
 +
 
 +
  // dodamo naslov
 +
  XLS.AddCell('Naslov', xlsnfText, titleStyle)
 +
  XLS.MergeCells('A1', 'E1') // združimo celice za naslov
 +
 
 +
  // dodamo header vrstico
 +
  XLS.AddRow
 +
  XLS.AddCell('', xlsnfText, headerStyle)
 +
  lefttopCell = XLS.GetCurCell // nastavimo referenco na zgoraj levo celico tabele
 +
  XLS.AddCell('Stolpec A', xlsnfText, headerStyle)
 +
  XLS.AddCell('Stolpec B', xlsnfText, headerStyle)
 +
  XLS.AddCell('Stolpec C', xlsnfText, headerStyle)
 +
  XLS.AddCell('Seštevek', xlsnfText, headerStyle)
 +
 
 +
  // dodamo podatke v tabelo
 +
  for J = 1 to 5
 +
    XLS.AddRow
 +
    XLS.AddCell('Vrstica ' + IntToStr(J), xlsnfText, headerStyle)
 +
    XLS.AddCell(IntToStr(Random(1000)), xlsnfLong, nil)
 +
    XLS.AddCell(IntToStr(Random(1000)), xlsnfLong, nil)
 +
    XLS.AddCell(IntToStr(Random(1000)), xlsnfLong, nil)
 +
    XLS.AddCell(xlscvAutoRowSum, xlsnfLong, footerStyle) // dodamo seštevek numeričnih celic v levo
 +
  next
 +
 
 +
  // dodamo footer vrstico
 +
  XLS.AddRow
 +
  XLS.AddCell('Seštevek', xlsnfText, headerStyle)
 +
  XLS.AddCell(xlscvAutoColSum, xlsnfLong, footerStyle) // dodamo seštevek numeričnih celic navzgor
 +
  XLS.AddCell(xlscvAutoColSum, xlsnfLong, footerStyle)
 +
  XLS.AddCell(xlscvAutoColSum, xlsnfLong, footerStyle)
 +
  XLS.AddCell(xlscvAutoColSum, xlsnfLong, footerStyle)
 +
  rightbottomCell = XLS.GetCurCell // nastavimo referenco na spodnjo desno celico tabele
 +
 
 +
  // ročno nastavimo širino prvega stolpca
 +
  XLS.SetColumnWidth('A', 20)
 +
 
 +
  // narišemo robove okoli headerja, footerja in okoli celotne tabele
 +
  XLS.SetBorders(lefttopCell.Address, lefttopCell.RelativeAddress(4,0), xlsbtAll, xlsbsThick, xlsbsUnchanged, Black) // header
 +
  XLS.SetBorders(rightbottomCell.RelativeAddress(-4,0), rightbottomCell.Address, xlsbtAll, xlsbsThick, xlsbsUnchanged, Black) // footer
 +
   XLS.SetBorders(lefttopCell.Address, rightbottomCell.Address, xlsbtAll, xlsbsThick, xlsbsUnchanged, Black) // cela tabela
 +
EndSub
 
</pre>
 
</pre>
  
== TMS*.XML (definicije tile map servisov) ==
+
== Definicija konstant ==
=== Primer ===
+
=== xlsCV - cell value (posebne vrednosti celic) ===
 +
  xlscvTrue      // bool TRUE
 +
  xlscvFalse      // bool FALSE
 +
  xlscvAutoColSum // avtomatski seštevek vseh numeričnih celic nad to celico
 +
  xlscvAutoRowSum // avtomatski seštevek vseh numeričnih celic levo od te celice
 +
 
 +
=== xlsNF - number format ===
 +
Lahko se uporabi poljuben format namesto konstante.
 
<pre>
 
<pre>
<?xml version="1.0" encoding="windows-1250"?>
+
  // text
<tms>
+
  xlsnfText = '@';
   <service>
+
 
    <code>OSM</code>
+
  // stevilke
    <name>OSM - OpenStreetMap</name>
+
   xlsnfLong  = '0';
    <server>a.tile.openstreetmap.org</server>
+
  xlsnfLongTS  = '#,##0';
    <server>b.tile.openstreetmap.org</server>
+
 
    <server>c.tile.openstreetmap.org</server>
+
  xlsnfFloat1 = '0.0';
    <levels>
+
  xlsnfFloat2 = '0.00';
      <codes>0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19</codes>
+
  xlsnfFloat3 = '0.000';
      <link>/%Z/%X/%Y.png</link>
+
  xlsnfFloat4 = '0.0000';
     </levels>
+
 
     <format>png</format>
+
  xlsnfFloat1TS = '#,##0.0';
    <validity>7</validity>
+
  xlsnfFloat2TS = '#,##0.00';
   </service>
+
  xlsnfFloat3TS = '#,##0.000';
</tms>
+
  xlsnfFloat4TS = '#,##0.0000';
 +
 
 +
  // valute
 +
  xlsnfEuroS = '#,##0.00 €';
 +
  xlsnfEuroL = '#,##0.00 "EUR"';
 +
 
 +
  // datum/cas
 +
  xlsnfDateTime = 'dd.mm.yyyy hh:mm:ss';
 +
 
 +
  xlsnfDateDMY     = 'd.m.yyyy';
 +
  xlsnfDateDMYD    = 'd.m.yyyy (ddd)';
 +
  xlsnfDateDDMMYY  = 'dd.mm.yyyy';
 +
  xlsnfDateDDMMYYD = 'dd.mm.yyyy (dddd)';
 +
  xlsnfDateIso     = 'yyyy-mm-dd';
 +
 
 +
  xlsnfTimeHHMM  = 'hh:mm';
 +
  xlsnfTimeHHMMSS = 'hh:mm:ss';
 +
 
 +
  // bool
 +
   xlsnfBoolDa  = '"da";"da";;';
 +
  xlsnfBoolDaNe = '"da";"da";"ne";"ne"';
 
</pre>
 
</pre>
  
=== Parametri taga SERVICE ===
+
=== xlsBT - border type ===
*CODE (1) - koda, ki naj bo unikatna in naj se nikoli ne spremeni
+
  xlsbtAll    // vsi robovi
*NAME (1) - opisno ime, tudi unikatno, da se pri izbiri lahko ločijo med sabo
+
  xlsbtVer    // vsi vertikalni robovi
*CRS (0..1) - koda koordinatnega sistema, za kode poglej v CRS.XML (privzeto WGS-84)
+
  xlsbtHor    // vsi horizontalni robovi
*ORIGIN (0..1) - izhodišče sistema, TOP za levo-zgoraj ali BOTTOM za levo-spodaj (privzeto TOP)
+
  xlsbtLeft  // samo levi robovi
*ORIGINX (0..1) - koordinata izhodišča sistema (levo) (privzeto 0)
+
  xlsbtRight  // samo desni robovi
*ORIGINY (0..1) - koordinata izhodišča sistema (zgoraj/spodaj) (privzeto 0)
+
  xlsbtTop    // samo zgornji robovi
*PIXELSIZE (0..1) - dimenzije piksla v metrih na prvem nivoju (privzeto 104857.6)
+
  xlsbtBottom // samo spodnji robovi
*TILESIZE (0..1) - dimenzija slike v pikslih (privzeto 256)
 
*FORMAT (1) - format slike, JPG, PNG ali TIF
 
*VALIDITY (0..1) - število dni do ponovnega preverjanja veljavnosti (privzeto 7)
 
*CHROMACOLORHEX (0..1) - barva, ki se naj spremeni v prozorno, npr. FFFFFE (privzeto 0)
 
*CHROMATOLERANCE (0..1) - toleranca, za prozornost, npr. 1 (privzeto 0)
 
*TOPLEVELINDEX (0..1) - index nivoja, na katerem se začnejo karte (če želimo ignorirati zgornje nivoje) (privzeto 0)
 
*SERVER (1..N) - naslovi strežnikov
 
*LEVELS (1..N) - definicije nivojev
 
  
=== Parametri taga LEVELS ===
+
=== xlsBS - border style ===
*CODES (1) - seznam šifer nivojev, ločenih z vejico
+
  xlsbsNone
*LINK (1) - povezava na sliko, kjer se % sekvence nadomeščajo z dejanskimi vrednosti
+
  xlsbsThin
 +
  xlsbsMedium
 +
  xlsbsThick
 +
  xlsbsUnchanged  // rob se ne spremeni
  
=== % sekvence ===
+
=== xlsHA - hor align ===
*%Z se nadomesti s šifro nivoja
+
  xlshaAuto  // poravnava se nastavi glede na vsebino: levo za tekst, desno za številke...
*%X se nadomesti s horizontalnim indeksom slike
+
  xlshaLeft
*%Y se nadomesti z vertikalnim indeksom slike
+
  xlshaCenter
*%Q se nadomesti s quad-tree nazivom slike
+
  xlshaRight
  
== CTR*.XML (definicije barvnih transformacij) ==
+
=== xlsVA - ver align ===
=== Primer ===
+
  xlsvaTop
 +
  xlsvaCenter
 +
  xlsvaBottom
 +
 
 +
== Prenos podatkov iz baze ==
 
<pre>
 
<pre>
<?xml version="1.0" encoding="windows-1250"?>
+
Sub TabelaXLS
<cts>
+
  Dim XLS As TXlsWriter, XLSF As TXlsField
   <ct>
+
   Dim L as TLayer
    <ctcode>1</ctcode>
+
 
    <ctname>Cyan, Orange - 8 Bands</ctname>
+
  // inicializiramo writer in  prvi list
    <ctlinear>true</ctlinear>
+
  XLS = CreateXlsWriter
    <ctshadow>NW</ctshadow>
+
   XLS.AddSheet('List 1')
    <ctpair>   0, 806000</ctpair>
+
 
    <ctpair> 100, 808000</ctpair>
+
     // pripravimo definicijo stolpcev
     <ctpair> 200, A0A000</ctpair>
+
  XLS.Table.Clear // prvi klic je opcijski, počisti definicijo stolpcev
    <ctpair> 300, C0C000</ctpair>
+
  XLS.Table.StyleTitle.HorAlign = xlshaCenter
    <ctpair> 400, F0F000</ctpair>
+
  XLS.Table.StyleNormal.FontColor = Gray
    <ctpair> 600, CAE8DD</ctpair>
+
 
    <ctpair> 800, 55AAFF</ctpair>
+
  XLSF = XLS.Table.AddCounter('Zap. št.') // zapisi bodo oštevilceni
    <ctpair>1000, 4484DD</ctpair>
+
   XLSF.FooterValue = 'Skupaj' // v footerju bo fiksen tekst
    <ctpair>1300, 337CCE</ctpair>
+
 
    <ctpair>1700, 2967AB</ctpair>
+
  XLS.Table.AddFieldByName('Naslov polja', 'polje1') // fiksno nastavimo ime stolpca
    <ctpair>2100, 1A416C</ctpair>
+
 
    <ctpair>2900, 4A484D</ctpair>
+
  XLS.Table.AddFieldByName('', 'polje2') // ime stolpca je ime polja
   </ct>
+
 
</cts>
+
  XLSF = XLS.Table.AddFieldByName('Število', 'polje3') // numerično polje
</pre>
+
  XLSF.FooterValue = xlscvAutoColSum // v footerju bo vsota stolpca
=== Parametri taga CT ===
 
*CTCODE (1) - koda barvne transformacije
 
*CTNAME (1) - opisno ime barvne transformacije
 
*CTLINEAR (0..1) - ali se vrednosti med dvema barvama linearno prelivajo (privzeto false)
 
*CTSHADOW (0..1) - smer osvetlitve za senčenje NW, N, NE, W, E, SW, S, SE (privzeto se ne senči)
 
*CTPAIR (1..N) - seznam parov vrednost,barva (primer 200,FF00FF)
 
  
== XML struktura piramide ==
+
  XLSF = XLS.Table.AddFormula('Vsota 3 in 4', 'IntToStr([polje3].AsNumber + [polje4].AsNumber)') // Basic formula
=== Uporaba ===
+
  XLSF.FooterValue = xlscvAutoColSum // v footerju bo vsota stolpca
'''PyramidBuildAll(Code As String)''' ponovno naloži XML datoteko, izdela vse nivoje in sestavi piramido.
 
  
=== Primer ===
+
  XLSF = XLS.Table.AddValue('Vsota levo', xlscvAutoRowSum) // v stolpcu bo vsota številk v vrstici
<pre>
+
   XLSF.FooterValue = xlscvAutoColSum // v footerju bo vsota stolpca
<?xml version="1.0" encoding="windows-1250"?>
 
<store>
 
  <name>Ortofoto (GURS-50cm)</name>
 
  <tilesize>512</tilesize>
 
   <crs>SI-D48</crs>
 
  <format>jpg,75</format>
 
  <minscale>100</minscale>
 
  <sourcepath>D:\Podatki\Rasters\DOF-GURS\TM050</sourcepath>
 
  <targetpath>D:\Podatki\Rasters\DOF-GURS\TM050</targetpath>
 
  <level>
 
    <code>050x001</code>
 
    <pixelsize>0.50</pixelsize>
 
    <maxscale>5000</maxscale>
 
    <build>files,,,000000,FFFFFF,1</build>
 
  </level>
 
  <level>
 
    <code>050x002</code>
 
    <pixelsizemul>2</pixelsizemul>
 
    <maxscalemul>2</maxscalemul>
 
    <build>level</build>
 
  </level>
 
</store>
 
</pre>
 
  
=== Parametri taga STORE ===
+
  // pripravimo podatke
 +
  L = [Layer]
 +
  L.Filter.ExecuteSQL('[polje1] = 10')
 +
  L.Sort.Load('Default')
 +
  L.Sort.Execute
  
*NAME (1) - opisno ime, mora biti unikatno, da se pri izbiri lahko ločijo med sabo
+
  // zapišemo podatke po dani definiciji
*CRS (1) - koda koordinatnega sistema, za kode poglej v CRS.XML (privzeto WGS-84), trenutno se še ne uporablja
+
  XLS.Table.AddRecordList('Naslov', L.FilteredRecords) // naslov je opcijski
*TILESIZE (1) - velikost tilov v pikslih
 
*FORMAT (1) - format tilov, TG4, LZW ali JPG (ki ima lahko dodatno še kvaliteto 0-100)
 
*MINSCALE (0..1) - minimalno merilo, do katere se piramida izrisuje
 
*COLOR (0..1) - barva za črnobele slike pri TG4, na primer FF00FF
 
*CHROMA (0..1) - barva in toleraca za prozornost, na primer FFFFFF,10
 
*SOURCEPATH (0..1) - predpona, ki se doda mapam vhodnih datotek za build
 
*TARGETPATH (0..1) - mapa, kamor se shranijo vmesni rezultati builda (nivoji)
 
*BUILDWINDOW (0..1) - okno, ki oklepa piramido, za optimizacijo builda (privzeto 250000,0,750000,250000)
 
*LEVEL (1..N) - definicije izdelave nivojev
 
  
=== Parametri taga LEVEL ===
+
  // nastavimo še robove celic
*CODE (1) - unikatna koda nivoja
+
  RoboviXLS(XLS)
*PIXELSIZE (0..1) - velikost piksla v metrih, obvezno podana na prvem nivoju; če ni podana, je dvojna vrednost prejšnjega nivoja
 
*PIXELSIZEMUL (0..1) - če je podan PIXELSIZE, se množi s to vrednostjo (privzeto 1)
 
*PIXELSIZEDIV (0..1) - če je podan PIXELSIZE, se deli s to vrednostjo (privzeto 1)
 
*MAXSCALE (0..1) - največje merilo izrisa tega nivoja, obvezno podana na prvem nivoju; če ni podana, je dvojna vrednost prejšnjega nivoja
 
*MAXSCALEMUL (0..1) - če je podan MAXSCALE, se množi s to vrednostjo (privzeto 1)
 
*PREPAINT (0..1) -
 
*BUILD (0..N) - navodila za kreiranje nivoja, obvezna na prvem nivoju (privzeto LEVEL)
 
  
=== Parametri taga BUILD ===
+
  // dodamo nov list
Parametri so ločeni z vejico.  
+
  XLS.AddSheet('List 2')
*FILES,mapa,filter,barva,chroma,toleranca
 
**mapa (0..1) -
 
**filter (0..1) -
 
**barva (0..1) -
 
**chroma (0..1) -
 
**toleranca (0..1) -
 
*LIST,seznam,barva,chroma,toleranca
 
**seznam (1) - ascii datoteka s seznamom kart
 
**barva (0..1) -
 
**chroma (0..1) -
 
**toleranca (0..1) -
 
*LEVEL,koda
 
**koda (0..1) - koda nivoja, iz katerega se reducira trenutni nivo (privzeto prejšnji nivo)
 
*GRID,grid,polje,transformacija
 
**grid (1) - ime xml datoteke z definicijo grida
 
**polje (1) - indeks polja iz grida, ki naj se uporabi
 
**transformacija (1) - koda barvne transformacije
 
*DRAW,tematika,ymin,xmin,ymax,xmax
 
**tematika (1) - ime tematike, ki naj se izriše
 
**ymin, xmin, ymax, xmax (1) - okno izrisa
 
  
== XML struktura grida ==
+
   // pripravimo nove podatke
=== Primer ===
+
   L = [Layer]
<pre>
+
   L.Filter.ExecuteSQL('[polje1] = 20')
<?xml version="1.0" encoding="windows-1250"?>
+
   L.Sort.Load('Default')
<grid>
+
   L.Sort.Execute
   <Crs>SI-D48</Crs>
+
    
  <OriginY>371200</OriginY>
+
   // zapišemo podatke po dani definiciji
   <OriginX>25600</OriginX>
+
   XLS.Table.AddRecordList('Naslov', L.FilteredRecords) // naslov je opcijski
   <TileCountY>20</TileCountY>
 
   <TileCountX>14</TileCountX>
 
   <CellCountY>512</CellCountY>
 
   <CellCountX>512</CellCountX>
 
   <CellDimenY>25</CellDimenY>
 
  <CellDimenX>25</CellDimenX>
 
   <CellField>I02,100,-600</CellField>
 
  <CellField>I02,100,+300</CellField>
 
</Grid>
 
</pre>
 
=== Parametri taga GRID ===
 
*...
 
*...
 
=== Parametri taga CELLFIELD ===
 
*TIP (1): tip polja, ena od vrednosti: W01,W02,W04,I01,I02,I04,F04,F08
 
*FAKTOR (0..1): celoštevilčni množitelj vrednosti, za optimizacijo
 
*DELTA (0..1): celoštevilčni dodatek vrednosti, za optimizacijo
 
  
Interna vrednost polja se računa po formuli:
+
  // nastavimo še robove celic
*interna vrednost = (realna vrednost + delta) * faktor
+
  RoboviXLS(XLS)
  
=== Primer grida za transformacijo koordinat ===
+
  // shranimo v file in sprostimo writer
Primer XML datoteke (SI-D96;SI-D48):
+
  XLS.SaveToFile('c:\temp\test.xlsx')
<pre>
+
  XLS.Destroy
<?xml version="1.0" encoding="WINDOWS-1250"?>
+
EndSub
<Grid>
 
<Crs>SI-D96</Crs>
 
<OriginY>370000</OriginY>
 
<OriginX>25000</OriginX>
 
<CellDimenY>500</CellDimenY>
 
<CellDimenX>500</CellDimenX>
 
<TileCountY>1</TileCountY>
 
<TileCountX>1</TileCountX>
 
<CellCountY>520</CellCountY>
 
<CellCountX>340</CellCountX>
 
<CellField>I02,1000,-370</CellField>
 
<CellField>I02,1000,+485</CellField>
 
</Grid>
 
  
</pre>
+
Sub RoboviXLS(XLS As TXlsWriter)
Procedura za izračun grida:
+
  XLS.SetBorders(XLS.Table.LeftTop.RelativeAddress(0, -1), XLS.Table.RightTop.RelativeAddress(0, -1), xlsbtAll, xlsbsMedium, xlsbsUnchanged, Black) // obroba naslova
<pre>
+
   XLS.SetBorders(XLS.Table.LeftTop.Address, XLS.Table.RightBottom.Address, xlsbtHor, xlsbsUnchanged, xlsbsThin, Black) // horizontalne črte jedra tabele
Dim G As TGrid, IY, IX As Long, Y1, X1, X2, Y2 As Float
+
  XLS.SetBorders(XLS.Table.LeftTop.Address, XLS.Table.RightTop.Address, xlsbtAll, xlsbsMedium, xlsbsUnchanged, Black) // obroba headerja
G = CreateGrid(ProgramPath + 'QTS;SI-D96;SI-D48.XML')
+
  XLS.SetBorders(XLS.Table.LeftTop.Address, XLS.Table.RightBottom.Address, xlsbtAll, xlsbsMedium, xlsbsUnchanged, Black) // obroba tabele
If Assigned(G) Then
+
  XLS.SetBorders(XLS.Table.LeftBottom.Address, XLS.Table.RightBottom.Address, xlsbtAll, xlsbsMedium, xlsbsUnchanged, Black) // obroba footerja
  CRSToCRSParams('SI-D48', 'SI-D96')
+
EndSub
   For IY = 0 To G.TileCountY * G.CellCountY - 1
 
    Y1 = G.OriginY + IY * G.CellDimenY + G.CellDimenY / 2
 
    For IX = 0 To G.TileCountX * G.CellCountX - 1
 
      X1 = G.OriginX + IX * G.CellDimenX + G.CellDimenX / 2
 
      CRSToCRS(Y1, X1, Y2, X2)
 
      G.CellValue(Y1, X1, 0) = Y2 - Y1
 
      G.CellValue(Y1, X1, 1) = X2 - X1
 
    Next
 
  Next
 
  G.Save
 
  G.Destroy
 
EndIf
 
 
</pre>
 
</pre>

Trenutna redakcija s časom 14:49, 12. marec 2021

Osnovni primer

Sub PrimerXLS
Dim XLS As TXlsWriter
  Dim titleStyle, headerStyle, cellStyle, footerStyle As TXlsStyle
  Dim lefttopCell, rightbottomCell As TXlsCell
  Dim J As Long

  // inicializiramo writer in  prvi list
  XLS = CreateXlsWriter
  XLS.AddSheet('List 1')

  // spremenimo normal stil
  XLS.StyleNormal.FontSize = 12
  XLS.StyleNormal.FontName = 'Arial'

  // definiramo ostale stile po potrebi
  titleStyle = XLS.AddStyle('', XLS.StyleTitle)
  titleStyle.FontBold = False
  titleStyle.FontItalic = True
  titleStyle.FontSize = 20
  titleStyle.HorAlign = XlshaCenter
  titleStyle.FontName = 'Arial'

  headerStyle = XLS.AddStyle('', XLS.StyleHeader)
  headerStyle.FontSize = 12
  headerStyle.HorAlign = xlshaAuto

  footerStyle = XLS.AddStyle('', XLS.StyleFooter)
  footerStyle.FontSize = 12
  footerStyle.HorAlign = XlshaRight
  footerStyle.TextWrap = false

  // zamrznemo stolpce in/ali vrstice
  XLS.SetFixedColumns(1)
  XLS.SetFixedRows(2)

  // dodamo naslov
  XLS.AddCell('Naslov', xlsnfText, titleStyle)
  XLS.MergeCells('A1', 'E1') // združimo celice za naslov

  // dodamo header vrstico
  XLS.AddRow
  XLS.AddCell('', xlsnfText, headerStyle)
  lefttopCell = XLS.GetCurCell // nastavimo referenco na zgoraj levo celico tabele
  XLS.AddCell('Stolpec A', xlsnfText, headerStyle)
  XLS.AddCell('Stolpec B', xlsnfText, headerStyle)
  XLS.AddCell('Stolpec C', xlsnfText, headerStyle)
  XLS.AddCell('Seštevek', xlsnfText, headerStyle)

  // dodamo podatke v tabelo
  for J = 1 to 5
    XLS.AddRow
    XLS.AddCell('Vrstica ' + IntToStr(J), xlsnfText, headerStyle)
    XLS.AddCell(IntToStr(Random(1000)), xlsnfLong, nil)
    XLS.AddCell(IntToStr(Random(1000)), xlsnfLong, nil)
    XLS.AddCell(IntToStr(Random(1000)), xlsnfLong, nil)
    XLS.AddCell(xlscvAutoRowSum, xlsnfLong, footerStyle) // dodamo seštevek numeričnih celic v levo
  next

  // dodamo footer vrstico
  XLS.AddRow
  XLS.AddCell('Seštevek', xlsnfText, headerStyle)
  XLS.AddCell(xlscvAutoColSum, xlsnfLong, footerStyle) // dodamo seštevek numeričnih celic navzgor
  XLS.AddCell(xlscvAutoColSum, xlsnfLong, footerStyle)
  XLS.AddCell(xlscvAutoColSum, xlsnfLong, footerStyle)
  XLS.AddCell(xlscvAutoColSum, xlsnfLong, footerStyle)
  rightbottomCell = XLS.GetCurCell // nastavimo referenco na spodnjo desno celico tabele

  // ročno nastavimo širino prvega stolpca
  XLS.SetColumnWidth('A', 20)

  // narišemo robove okoli headerja, footerja in okoli celotne tabele
  XLS.SetBorders(lefttopCell.Address, lefttopCell.RelativeAddress(4,0), xlsbtAll, xlsbsThick, xlsbsUnchanged, Black) // header
  XLS.SetBorders(rightbottomCell.RelativeAddress(-4,0), rightbottomCell.Address, xlsbtAll, xlsbsThick, xlsbsUnchanged, Black) // footer
  XLS.SetBorders(lefttopCell.Address, rightbottomCell.Address, xlsbtAll, xlsbsThick, xlsbsUnchanged, Black) // cela tabela
EndSub

Definicija konstant

xlsCV - cell value (posebne vrednosti celic)

 xlscvTrue       // bool TRUE
 xlscvFalse      // bool FALSE
 xlscvAutoColSum // avtomatski seštevek vseh numeričnih celic nad to celico
 xlscvAutoRowSum // avtomatski seštevek vseh numeričnih celic levo od te celice

xlsNF - number format

Lahko se uporabi poljuben format namesto konstante.

  // text
  xlsnfText = '@';

  // stevilke
  xlsnfLong   = '0';
  xlsnfLongTS   = '#,##0';

  xlsnfFloat1 = '0.0';
  xlsnfFloat2 = '0.00';
  xlsnfFloat3 = '0.000';
  xlsnfFloat4 = '0.0000';

  xlsnfFloat1TS = '#,##0.0';
  xlsnfFloat2TS = '#,##0.00';
  xlsnfFloat3TS = '#,##0.000';
  xlsnfFloat4TS = '#,##0.0000';

  // valute
  xlsnfEuroS = '#,##0.00 €';
  xlsnfEuroL = '#,##0.00 "EUR"';

  // datum/cas
  xlsnfDateTime = 'dd.mm.yyyy hh:mm:ss';

  xlsnfDateDMY     = 'd.m.yyyy';
  xlsnfDateDMYD    = 'd.m.yyyy (ddd)';
  xlsnfDateDDMMYY  = 'dd.mm.yyyy';
  xlsnfDateDDMMYYD = 'dd.mm.yyyy (dddd)';
  xlsnfDateIso     = 'yyyy-mm-dd';

  xlsnfTimeHHMM   = 'hh:mm';
  xlsnfTimeHHMMSS = 'hh:mm:ss';

  // bool
  xlsnfBoolDa   = '"da";"da";;';
  xlsnfBoolDaNe = '"da";"da";"ne";"ne"';

xlsBT - border type

 xlsbtAll    // vsi robovi
 xlsbtVer    // vsi vertikalni robovi
 xlsbtHor    // vsi horizontalni robovi
 xlsbtLeft   // samo levi robovi
 xlsbtRight  // samo desni robovi
 xlsbtTop    // samo zgornji robovi
 xlsbtBottom // samo spodnji robovi

xlsBS - border style

 xlsbsNone
 xlsbsThin
 xlsbsMedium
 xlsbsThick
 xlsbsUnchanged  // rob se ne spremeni

xlsHA - hor align

 xlshaAuto   // poravnava se nastavi glede na vsebino: levo za tekst, desno za številke...
 xlshaLeft
 xlshaCenter
 xlshaRight

xlsVA - ver align

 xlsvaTop
 xlsvaCenter
 xlsvaBottom

Prenos podatkov iz baze

Sub TabelaXLS
  Dim XLS As TXlsWriter, XLSF As TXlsField
  Dim L as TLayer

  // inicializiramo writer in  prvi list
  XLS = CreateXlsWriter
  XLS.AddSheet('List 1')

    // pripravimo definicijo stolpcev
  XLS.Table.Clear // prvi klic je opcijski, počisti definicijo stolpcev
  XLS.Table.StyleTitle.HorAlign = xlshaCenter
  XLS.Table.StyleNormal.FontColor = Gray

  XLSF = XLS.Table.AddCounter('Zap. št.') // zapisi bodo oštevilceni
  XLSF.FooterValue = 'Skupaj' // v footerju bo fiksen tekst

  XLS.Table.AddFieldByName('Naslov polja', 'polje1') // fiksno nastavimo ime stolpca

  XLS.Table.AddFieldByName('', 'polje2') // ime stolpca je ime polja

  XLSF = XLS.Table.AddFieldByName('Število', 'polje3') // numerično polje
  XLSF.FooterValue = xlscvAutoColSum // v footerju bo vsota stolpca

  XLSF = XLS.Table.AddFormula('Vsota 3 in 4', 'IntToStr([polje3].AsNumber + [polje4].AsNumber)') // Basic formula
  XLSF.FooterValue = xlscvAutoColSum // v footerju bo vsota stolpca

  XLSF = XLS.Table.AddValue('Vsota levo', xlscvAutoRowSum) // v stolpcu bo vsota številk v vrstici
  XLSF.FooterValue = xlscvAutoColSum // v footerju bo vsota stolpca

  // pripravimo podatke
  L = [Layer]
  L.Filter.ExecuteSQL('[polje1] = 10')
  L.Sort.Load('Default')
  L.Sort.Execute

  // zapišemo podatke po dani definiciji
  XLS.Table.AddRecordList('Naslov', L.FilteredRecords) // naslov je opcijski

  // nastavimo še robove celic
  RoboviXLS(XLS)

  // dodamo nov list
  XLS.AddSheet('List 2')

  // pripravimo nove podatke
  L = [Layer]
  L.Filter.ExecuteSQL('[polje1] = 20')
  L.Sort.Load('Default')
  L.Sort.Execute
  
  // zapišemo podatke po dani definiciji
  XLS.Table.AddRecordList('Naslov', L.FilteredRecords) // naslov je opcijski

  // nastavimo še robove celic
  RoboviXLS(XLS)

  // shranimo v file in sprostimo writer
  XLS.SaveToFile('c:\temp\test.xlsx')
  XLS.Destroy
EndSub

Sub RoboviXLS(XLS As TXlsWriter)
  XLS.SetBorders(XLS.Table.LeftTop.RelativeAddress(0, -1), XLS.Table.RightTop.RelativeAddress(0, -1), xlsbtAll, xlsbsMedium, xlsbsUnchanged, Black) // obroba naslova
  XLS.SetBorders(XLS.Table.LeftTop.Address, XLS.Table.RightBottom.Address, xlsbtHor, xlsbsUnchanged, xlsbsThin, Black) // horizontalne črte jedra tabele
  XLS.SetBorders(XLS.Table.LeftTop.Address, XLS.Table.RightTop.Address, xlsbtAll, xlsbsMedium, xlsbsUnchanged, Black) // obroba headerja
  XLS.SetBorders(XLS.Table.LeftTop.Address, XLS.Table.RightBottom.Address, xlsbtAll, xlsbsMedium, xlsbsUnchanged, Black) // obroba tabele
  XLS.SetBorders(XLS.Table.LeftBottom.Address, XLS.Table.RightBottom.Address, xlsbtAll, xlsbsMedium, xlsbsUnchanged, Black) // obroba footerja
EndSub