Class: XLSSestavy::Xls::TabulkaXls

Inherits:
Tabulka
  • Object
show all
Defined in:
lib/xls_sestavy/tabulky/tabulka_xls.rb

Instance Attribute Summary

Attributes inherited from Tabulka

#sestava

Instance Method Summary collapse

Methods inherited from Tabulka

#sloupec

Constructor Details

#initialize(sestava, worksheet, args = {}, &block) ⇒ TabulkaXls

ukotvit_zahlavi, format_zahlavi, format_souctu, souctove_radky, format_dat, velikost_sady, vyska_zahlavi



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

def initialize(sestava, worksheet, args={}, &block)
  raise 'Sestava musí být typu SestavaXls' unless sestava.kind_of? SestavaXls
  @worksheet = worksheet
  super sestava, args, &block
end

Instance Method Details

#vypis(pozice, radky) ⇒ Object



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
# File 'lib/xls_sestavy/tabulky/tabulka_xls.rb', line 94

def vypis(pozice, radky)
  r, c = XLSSestavy::Xls.ciselne_souradnice(pozice).first
  sloupec_pismeno = XLSSestavy::Xls.sloupec_pismeno c
  puvodni_r = r
  pocet_radku = radky.count

  soucty_od = puvodni_r + 1
  souctove_radky = @args[:souctove_radky]
  souctove_radky = :prazdne if pocet_radku==0 && souctove_radky

  #šířky sloupců
  @sloupce.each_with_index do |s, i|
    sirka = s.opt(:sirka_sloupce)
    next unless sirka
    si = c + i
    @worksheet.set_column si, si, XLSSestavy::Xls.col_cm_to_p(sirka)
  end

  #hlavičky
  vypis_radek_zahlavi pozice
  @worksheet.set_row r, XLSSestavy::Xls.row_cm_to_p(@args[:vyska_zahlavi]  || 1.3)
  r += 1

  #součtové řádky nad
  if souctove_radky==:nad || souctove_radky==:nad_pod
    soucty_od += 1
    vypis_radek_souctu "#{sloupec_pismeno}#{r + 1}", (soucty_od..soucty_od+pocet_radku-1)
    r += 1
  end

  #ukotvení
  @worksheet.freeze_panes r, 0 if @args[:ukotvit_zahlavi]

  #vypsání dat
  r += vypis_radky_dat("#{sloupec_pismeno}#{r + 1}", radky)

  #součty pod
  if souctove_radky==:pod || souctove_radky==:nad_pod
    vypis_radek_souctu "#{sloupec_pismeno}#{r + 1}", (soucty_od..soucty_od+pocet_radku-1)
    r += 1
  end

  #prázdný součtový řádek
  if souctove_radky==:prazdne
    vypis_radek_souctu "#{sloupec_pismeno}#{r + 1}"
    r += 1
  end

  r - puvodni_r
end

#vypis_blok_dat(pozice, radky, formaty = []) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/xls_sestavy/tabulky/tabulka_xls.rb', line 77

def vypis_blok_dat(pozice, radky, formaty=[])
  r, c = XLSSestavy::Xls.ciselne_souradnice(pozice).first

  radky.each do |objekt|
    @sloupce.each_with_index do |s, i|
      hodnota = XLSSestavy::Xls.douprav_hodnotu_bunky s.hodnota_pro(objekt)
      case s.opt(:datovy_typ)
        when :cas, :datum
          @worksheet.write_date_time r, c+i, hodnota, formaty[i]
        else
          @worksheet.write r, c+i, hodnota, formaty[i]
      end
    end
    r += 1
  end
end

#vypis_radek_souctu(pozice, rozsah = nil) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/xls_sestavy/tabulky/tabulka_xls.rb', line 28

def vypis_radek_souctu(pozice, rozsah=nil)
  r, c = XLSSestavy::Xls.ciselne_souradnice(pozice).first
  format_souctu = @sestava.get_format @args[:format_souctu] || :radek_souctu

  @sloupce.each_with_index do |s, i|
    format_hash = {num_format: XLSSestavy::Xls.num_format(s.opt(:datovy_typ))}
    format_hash.merge! s.opt(:xls_format) if s.opt(:xls_format).class == Hash
    format = @sestava.alter_format format_souctu, format_hash

    pismeno = XLSSestavy::Xls.sloupec_pismeno c + i
    case rozsah && s.opt(:radek_souctu)
      when :soucet
        formule = "SUBTOTAL(9,#{pismeno}#{rozsah.min}:#{pismeno}#{rozsah.max})"
        @worksheet.write_formula r, c+i, formule, format
      when :pocet
        formule = "SUBTOTAL(3,#{pismeno}#{rozsah.min}:#{pismeno}#{rozsah.max})"
        @worksheet.write_formula r, c+i, formule, format
      else
        @worksheet.write r, c+i, nil, format
    end
  end
end

#vypis_radek_zahlavi(pozice) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/xls_sestavy/tabulky/tabulka_xls.rb', line 12

def vypis_radek_zahlavi(pozice)
  r, c = XLSSestavy::Xls.ciselne_souradnice(pozice).first
  format_zahlavi = @sestava.get_format @args[:format_zahlavi] || :radek_zahlavi

  @sloupce.each_with_index do |s, i|
    format = if s.opt(:xls_format).class==Hash
               format_hash = s.opt(:xls_format).clone
               format_hash.delete :num_format
               @sestava.alter_format format_zahlavi, format_hash
             else
               format_zahlavi
             end
    @worksheet.write r, c+i, s.zahlavi, format
  end
end

#vypis_radky_dat(pozice, radky) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/xls_sestavy/tabulky/tabulka_xls.rb', line 51

def vypis_radky_dat(pozice, radky)
  r, c = XLSSestavy::Xls.ciselne_souradnice(pozice).first
  radku_vypsano = 0

  format_dat = @sestava.get_format @args[:format_dat] || :radky_dat
  formaty = @sloupce.map do |s|
    format_hash = {num_format: XLSSestavy::Xls.num_format(s.opt(:datovy_typ))}
    format_hash.merge! s.opt(:xls_format) if s.opt(:xls_format).class == Hash
    @sestava.alter_format format_dat, format_hash
  end

  if radky.class == ActiveRecord::Relation
    velikost_sady = @args[:velikost_sady] || 200
    radky.find_in_batches batch_size: velikost_sady do |sada|
      aktualni_pozice = "#{XLSSestavy::Xls.sloupec_pismeno c}#{r + 1 + radku_vypsano}"
      vypis_blok_dat aktualni_pozice, sada, formaty
      radku_vypsano += sada.length
    end
  else
    vypis_blok_dat pozice, radky, formaty
    radku_vypsano = radky.length
  end

  radku_vypsano
end