Module: XLSSestavy::ExcelTabulky

Included in:
Sestava
Defined in:
lib/xls_sestavy/excel_tabulky.rb

Instance Method Summary collapse

Instance Method Details

#sestava_cas_vytvoreni(pozice = 'A2') ⇒ Object

pozice ve standartních excel souřadnicích ‘A2’, ‘B3:B5’ (spojení buňek)



26
27
28
29
# File 'lib/xls_sestavy/excel_tabulky.rb', line 26

def sestava_cas_vytvoreni(pozice='A2')
  cas = "začátek zpracování: #{l Time.now}"
  zapis pozice, cas, get_format(:default)
end

#sestava_nadpis(text, roztahnout = 24, radek = 0) ⇒ Object

roztahuje se na (defaultně) 24 sloupců v prvním řádku



13
14
15
16
# File 'lib/xls_sestavy/excel_tabulky.rb', line 13

def sestava_nadpis(text, roztahnout=24, radek=0)
  @ws.merge_range radek, 0, radek, roztahnout-1, text, get_format(:sestava_nadpis)
  @ws.set_row radek, XLSSestavy.row_cm_to_p(1)
end

#sestava_napdis2(text, pozice, vyska = 0.7) ⇒ Object

pozice ve standartních excel souřadnicích ‘A2’, ‘B3:B5’ (spojení buňek) vyska znamená výška daného řádku v cm



20
21
22
23
# File 'lib/xls_sestavy/excel_tabulky.rb', line 20

def sestava_napdis2(text, pozice, vyska = 0.7)
  zapis pozice, text, get_format(:sestava_nadpis2)
  @ws.set_row ciselne_souradnice(pozice)[0][0], XLSSestavy.row_cm_to_p(vyska)
end

#vypis_souctovy_radek(y, x, sloupce, rozsah) ⇒ Object



148
149
150
151
152
153
154
155
156
157
158
159
160
161
# File 'lib/xls_sestavy/excel_tabulky.rb', line 148

def vypis_souctovy_radek(y, x, sloupce, rozsah)
  format = get_format :souctovy_radek
  sloupce.each_with_index do |s, i|
    pismeno = XLSSestavy.sloupec_pismeno x+i
    formule = case s.souctovy_radek
                when :soucet; "SUBTOTAL(9,#{pismeno}#{rozsah.min}:#{pismeno}#{rozsah.max})"
                when :pocet; "SUBTOTAL(3,#{pismeno}#{rozsah.min}:#{pismeno}#{rozsah.max})"
                else
                  @ws.write y, x+i, '', format
                  next
              end
    @ws.write_formula y, x+i, formule, format
  end
end

#vypis_tabulku(pozice, objekty, sloupce, args = {}) ⇒ Object

vypsání dat tabulky, hlaviček a případných součtových řádků vrací počet, kolik řádků bylo vypsáno objekty = <Array<Object>> / <ActiveRecord::Relation> sloupce: <Array<Sloupec>> / <RadaSloupcu> -pole sloupců — args — vyska_zahlavi: <Numerical> -hodnota výšky prvního řádku v cm ukotvit_zahlavi: <True> / <Nil> -pokud má být za hlavičkou ukotveno(o jeden řádek níže při použití součtových řádků :nad) soucty: :nad, :pod, :nad_pod, :prazdne, nil format_zahlavi: <Symbol> -formát hlavičky (bude upraven formátem sloupce) format_dat: <Symbol> -formát řádků dat (bude upraven formátem sloupce)



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# File 'lib/xls_sestavy/excel_tabulky.rb', line 70

def vypis_tabulku(pozice, objekty, sloupce, args={})
  y, x = XLSSestavy.ciselne_souradnice(pozice).first
  sloupce = sloupce.sloupce if sloupce.kind_of? RadaSloupcu
  soucty = args[:soucty]
  soucty = :prazdne if objekty.length==0 && soucty

  dy = 0 # posun v řádcích
  #hlavičky
  format_zahlavi = get_format args[:format_zahlavi]||:zahlavi
  formaty = sloupce.map do |s|
    next format_zahlavi unless s.format.class==Hash
    format_hash = s.format.clone
    format_hash[:num_format] = nil
    alter_format format_zahlavi, format_hash
  end
  sloupce.each_with_index do |s, i|
    x_sloupce = x + i
    @ws.write y, x_sloupce, s.zahlavi, formaty[i]
    @ws.set_column x_sloupce, x_sloupce, XLSSestavy.col_cm_to_p(s.sirka)
  end
  @ws.set_row y, XLSSestavy.row_cm_to_p(args[:vyska_zahlavi]||1.3)
  dy += 1
  #součty :nad
  y_soucty = y+dy+1
  if soucty==:nad || soucty==:nad_pod
    y_soucty += 1
    vypis_souctovy_radek y+dy, x, sloupce, (y_soucty..y_soucty+objekty.length-1)
    dy += 1
  end
  #ukotvit
  @ws.freeze_panes y+dy, 0 if args[:ukotvit_zahlavi]
  #vypsani samotnych dat
  format_dat = get_format args[:format_dat]||:data
  formaty = sloupce.map do |s|
    next format_dat unless s.format.class==Hash
    alter_format format_dat, s.format
  end
  if objekty.class==ActiveRecord::Relation
    objekty.find_in_batches batch_size: 100 do |batch|
      batch.each do |objekt|
        sloupce.each_with_index do |s, i|
          hodnota = XLSSestavy.douprav_hodnotu_bunky s.hodnota_pro(objekt)
          if s.num_format==:cas || s.num_format==:datum
            @ws.write_date_time y+dy, x+i, hodnota, formaty[i]
          else
            @ws.write y+dy, x+i, hodnota, formaty[i]
          end
        end
        dy += 1
      end
    end
  else
    objekty.each do |objekt|
      sloupce.each_with_index do |s, i|
        hodnota = XLSSestavy.douprav_hodnotu_bunky s.hodnota_pro(objekt)
        if s.num_format==:cas || s.num_format==:datum
          @ws.write_date_time y+dy, x+i, hodnota, formaty[i]
        else
          @ws.write y+dy, x+i, hodnota, formaty[i]
        end
      end
      dy += 1
    end
  end
  #součty :pod
  if soucty==:pod || soucty==:nad_pod
    vypis_souctovy_radek y+dy, x, sloupce, (y_soucty..y_soucty+objekty.length-1)
    dy += 1
  end
  #případně, když nejsou žádné objekty jenom prázdný součtový řádek
  if soucty==:prazdne
    format = get_format :souctovy_radek
    sloupce.length.times{|i| @ws.write y+dy, x+i, '', format }
    dy += 1
  end
  dy
end

#vytvor_list(nazev) {|@ws| ... } ⇒ Object

vytvoří list, zapíše jej do @ws a vrátí jej. mezi tím případně provede předaný blok

Yields:

  • (@ws)


6
7
8
9
10
# File 'lib/xls_sestavy/excel_tabulky.rb', line 6

def vytvor_list(nazev)
  @ws = @wb.add_worksheet nazev
  yield @ws if block_given?
  @ws
end

#zapis(bunky, hodnota, format = nil) ⇒ Object

pozice bunkdy jsou ve standartních souřadnicích ( ‘A3’)



32
33
34
35
36
37
38
39
40
# File 'lib/xls_sestavy/excel_tabulky.rb', line 32

def zapis(bunky, hodnota, format=nil)
  format = get_format unless format
  souradnice = XLSSestavy.ciselne_souradnice bunky
  if souradnice.length==1
    @ws.write souradnice[0][0], souradnice[0][1], hodnota, format
  else
    @ws.merge_range souradnice[0][0], souradnice[0][1], souradnice[1][0], souradnice[1][1], hodnota, format
  end
end

#zapis_radu(prvni_bunka, hodnoty, format = nil) ⇒ Object



42
43
44
45
46
47
48
49
# File 'lib/xls_sestavy/excel_tabulky.rb', line 42

def zapis_radu(prvni_bunka, hodnoty, format=nil)
  format = get_format unless format
  souradnice = XLSSestavy.ciselne_souradnice(prvni_bunka).first
  hodnoty.each do |h|
    @ws.write souradnice[0], souradnice[1], h, format
    souradnice[1] += 1
  end
end

#zapis_sloupec(prvni_bunka, hodnoty, format = nil) ⇒ Object



51
52
53
54
55
56
57
58
# File 'lib/xls_sestavy/excel_tabulky.rb', line 51

def zapis_sloupec(prvni_bunka, hodnoty, format=nil)
  format = get_format unless format
  souradnice = XLSSestavy.ciselne_souradnice(prvni_bunka).first
  hodnoty.each do |h|
    @ws.write souradnice[0], souradnice[1], h, format
    souradnice[0] += 1
  end
end