Module: XLSSestavy::ExcelTabulky
- Included in:
- Sestava
- Defined in:
- lib/xls_sestavy/excel_tabulky.rb
Instance Method Summary collapse
-
#sestava_cas_vytvoreni(pozice = 'A2') ⇒ Object
pozice ve standartních excel souřadnicích ‘A2’, ‘B3:B5’ (spojení buňek).
-
#sestava_nadpis(text, roztahnout = 24, radek = 0) ⇒ Object
roztahuje se na (defaultně) 24 sloupců v prvním řádku.
-
#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.
- #vypis_souctovy_radek(y, x, sloupce, rozsah) ⇒ Object
-
#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).
-
#vytvor_list(nazev) {|@ws| ... } ⇒ Object
vytvoří list, zapíše jej do @ws a vrátí jej.
-
#zapis(bunky, hodnota, format = nil) ⇒ Object
pozice bunkdy jsou ve standartních souřadnicích ( ‘A3’).
- #zapis_radu(prvni_bunka, hodnoty, format = nil) ⇒ Object
- #zapis_sloupec(prvni_bunka, hodnoty, format = nil) ⇒ Object
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
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 |