xls_sestavy 0.2.13 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/lib/xls_sestavy/sestava.rb +26 -23
- data/lib/xls_sestavy/sestava_xls.rb +45 -0
- data/lib/xls_sestavy/tabulky/sloupce/definice_sloupcu.rb +27 -0
- data/lib/xls_sestavy/{preddefinovany_sloupec.rb → tabulky/sloupce/preddefinovany_sloupce.rb} +0 -0
- data/lib/xls_sestavy/tabulky/sloupce/sloupec.rb +41 -0
- data/lib/xls_sestavy/tabulky/tabulka.rb +27 -0
- data/lib/xls_sestavy/tabulky/tabulka_xls.rb +145 -0
- data/lib/xls_sestavy/version.rb +1 -1
- data/lib/xls_sestavy/{excel_formaty.rb → xls/formaty.rb} +6 -6
- data/lib/xls_sestavy/xls/xls.rb +89 -0
- data/lib/xls_sestavy/xls/zapisovani.rb +59 -0
- data/lib/xls_sestavy.rb +3 -10
- metadata +11 -10
- data/lib/xls_sestavy/argumenty_sestavy.rb +0 -31
- data/lib/xls_sestavy/definice_sloupcu.rb +0 -37
- data/lib/xls_sestavy/excel_helper.rb +0 -96
- data/lib/xls_sestavy/excel_tabulky.rb +0 -164
- data/lib/xls_sestavy/rada_sloupcu.rb +0 -43
- data/lib/xls_sestavy/sloupec.rb +0 -41
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YjFlYWVkNDY1M2U0MmNmMDcwY2UyOWM2NmM2MGI2MGIwOTNiOThlOQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZWYyYWI3NDY0ZTk2NGMwMDRiMGQ2MDhjMjM0ODgxMjdmY2Q3NzQ5NA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YzkxY2Y4NzQ4NWU2MTgxNDcyZjdhNTBmYTQ0ZTk0YmQxNTIxYjU5MTE4MmM0
|
10
|
+
OGQyODY2ZjNkNjJlMWQ5ZTMyMjgwMjg1NWZmMDkzYjg3M2RkODU3MWQ3MTYx
|
11
|
+
M2ZkZGE4YTU1YTljYmRjNTEwNGI1YzJhMGI1N2E4MzZkZjIzMTY=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZjZmNWU1NmJjZjhjMTJmY2YzYTYyZThlMzQxYzE0MDk1MTA0ZWYxYzExYzU1
|
14
|
+
OGRjZDQyNDJiMDgzMGNkOGRhY2VmYTZiZGJkY2EzNjMzYzYwYmY4MDZkNTg3
|
15
|
+
YWRkNTlkMTcyZTgyNzEwZmI1ZDQzZWUzNjc3NzdkM2I0MzdiN2M=
|
data/lib/xls_sestavy/sestava.rb
CHANGED
@@ -1,41 +1,44 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
|
2
|
+
require "xls_sestavy/tabulky/tabulka"
|
3
|
+
require "xls_sestavy/tabulky/sloupce/sloupec"
|
4
|
+
require "xls_sestavy/tabulky/sloupce/preddefinovany_sloupce"
|
5
|
+
require "xls_sestavy/tabulky/sloupce/definice_sloupcu"
|
6
6
|
|
7
7
|
module XLSSestavy
|
8
8
|
class Sestava
|
9
|
-
NAZEV = 'Prázdná sestava'
|
10
9
|
|
11
|
-
|
12
|
-
|
10
|
+
def self.nazev
|
11
|
+
@nazev ||= 'bezejména'
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.nastav_nazev(txt)
|
15
|
+
@nazev = txt
|
16
|
+
end
|
13
17
|
|
14
|
-
attr_reader :
|
18
|
+
attr_reader :params
|
15
19
|
|
16
|
-
def initialize(
|
17
|
-
|
18
|
-
@
|
20
|
+
def initialize(params)
|
21
|
+
@params = zpracuj_params params
|
22
|
+
@cas_vytvoreni = Time.zone.now
|
19
23
|
end
|
20
24
|
|
21
|
-
def
|
22
|
-
|
23
|
-
@wb = ::WriteExcel.new f
|
24
|
-
vypracuj_sestavu
|
25
|
-
@wb.close
|
26
|
-
block_given? ? yield(f) : po_vypracovani(f)
|
25
|
+
def zpracuj_params(params)
|
26
|
+
params
|
27
27
|
end
|
28
28
|
|
29
|
-
def
|
29
|
+
def zpracuj
|
30
|
+
vypracovani
|
31
|
+
block_given? ? yield : po_vypracovani
|
32
|
+
end
|
30
33
|
|
31
|
-
|
34
|
+
# přepsáno v podtřídách
|
35
|
+
def vypracovani; end
|
32
36
|
|
33
|
-
|
34
|
-
|
35
|
-
end
|
37
|
+
# přepsáno v podtřídách
|
38
|
+
def po_vypracovani; end
|
36
39
|
|
37
40
|
def to_s
|
38
|
-
|
41
|
+
self.class.nazev.gsub ' ','_'
|
39
42
|
end
|
40
43
|
|
41
44
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'tempfile'
|
3
|
+
require 'writeexcel'
|
4
|
+
require "xls_sestavy/xls/xls"
|
5
|
+
require "xls_sestavy/xls/formaty"
|
6
|
+
require "xls_sestavy/xls/zapisovani"
|
7
|
+
require "xls_sestavy/tabulky/tabulka_xls"
|
8
|
+
|
9
|
+
module XLSSestavy
|
10
|
+
class SestavaXls < Sestava
|
11
|
+
|
12
|
+
include XLSSestavy::Xls::Formaty
|
13
|
+
include XLSSestavy::Xls::Zapisovani
|
14
|
+
|
15
|
+
def zpracuj
|
16
|
+
f = Tempfile.new to_s, Rails.root.join('tmp')
|
17
|
+
@wb = ::WriteExcel.new f
|
18
|
+
vypracovani
|
19
|
+
@wb.close
|
20
|
+
block_given? ? yield(f) : po_vypracovani(f)
|
21
|
+
end
|
22
|
+
|
23
|
+
# přepsáno v podtřídách
|
24
|
+
def vypracovani; end
|
25
|
+
|
26
|
+
# přepsáno v podtřídách
|
27
|
+
def po_vypracovani(f); end
|
28
|
+
|
29
|
+
def to_s
|
30
|
+
self.class.nazev.gsub ' ','_'
|
31
|
+
end
|
32
|
+
|
33
|
+
def nazev_souboru
|
34
|
+
to_s + '.xls'
|
35
|
+
end
|
36
|
+
|
37
|
+
# vytvoří list, zapíše jej do @ws a vrátí jej. mezi tím případně provede předaný blok
|
38
|
+
def vytvor_list(nazev)
|
39
|
+
@ws = @wb.add_worksheet nazev
|
40
|
+
yield @ws if block_given?
|
41
|
+
@ws
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module XLSSestavy
|
3
|
+
class DefiniceSloupcu
|
4
|
+
|
5
|
+
def self.[](klic)
|
6
|
+
@instance ||= new
|
7
|
+
@instance[klic]
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@seznam = {}
|
12
|
+
definice
|
13
|
+
end
|
14
|
+
|
15
|
+
def definice; end # tato metoda bude přepsána
|
16
|
+
|
17
|
+
def definuj(*args, &block)
|
18
|
+
s = PreddefinovanySloupec.new(*args, &block)
|
19
|
+
@seznam[s.klic] = s
|
20
|
+
end
|
21
|
+
|
22
|
+
def [](klic)
|
23
|
+
@seznam[klic]
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
data/lib/xls_sestavy/{preddefinovany_sloupec.rb → tabulky/sloupce/preddefinovany_sloupce.rb}
RENAMED
File without changes
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module XLSSestavy
|
3
|
+
class Sloupec
|
4
|
+
|
5
|
+
attr_accessor :tabulka
|
6
|
+
|
7
|
+
def initialize(zahlavi, opts={}, &block)
|
8
|
+
@options = opts.merge! zahlavi: zahlavi, fce: (opts[:fce] || block)
|
9
|
+
end
|
10
|
+
|
11
|
+
def zahlavi
|
12
|
+
raise 'Není přiřazena tabulka.' unless @tabulka
|
13
|
+
@zahlavi ||= I18n.translate(@options[:zahlavi], {default: @options[:zahlavi]}.merge!(@tabulka.sestava.params))
|
14
|
+
end
|
15
|
+
|
16
|
+
def argumenty_array
|
17
|
+
return @argumenty_array if defined? @argumenty_array
|
18
|
+
raise 'Není přiřazena tabulka.' unless @tabulka
|
19
|
+
params = @tabulka.sestava.params
|
20
|
+
@argumenty_array = (@options[:argumenty] || []).map{|arg_sym| params[arg_sym]}
|
21
|
+
end
|
22
|
+
|
23
|
+
def hodnota_pro(objekt)
|
24
|
+
@fce ||= @options[:fce]
|
25
|
+
if @fce.class==Proc
|
26
|
+
@fce.call(objekt, *argumenty_array)
|
27
|
+
elsif objekt.respond_to? @fce
|
28
|
+
objekt.send(@fce, *argumenty_array)
|
29
|
+
elsif nil
|
30
|
+
nil
|
31
|
+
else
|
32
|
+
raise "Není definováno pro @fce=#{@fce.class}:#{@fce}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def opt(klic)
|
37
|
+
@options[klic]
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module XLSSestavy
|
3
|
+
class Tabulka
|
4
|
+
|
5
|
+
attr_reader :sestava
|
6
|
+
|
7
|
+
def initialize(sestava, args={}, &block)
|
8
|
+
@sestava = sestava
|
9
|
+
@args = args
|
10
|
+
|
11
|
+
@sloupce = args[:sloupce] || []
|
12
|
+
yield self if block_given?
|
13
|
+
@sloupce.each{|s| s.tabulka = self}
|
14
|
+
end
|
15
|
+
|
16
|
+
def sloupec(*args, &block)
|
17
|
+
s = if args.first.is_a? Sloupec
|
18
|
+
args.first
|
19
|
+
else
|
20
|
+
Sloupec.new(*args, &block)
|
21
|
+
end
|
22
|
+
s.tabulka = self
|
23
|
+
@sloupce << s
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,145 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module XLSSestavy
|
3
|
+
class Xls::TabulkaXls < Tabulka
|
4
|
+
|
5
|
+
def initialize(sestava, worksheet, args={}, &block)
|
6
|
+
raise 'Sestava musí být typu SestavaXls' unless sestava.kind_of? SestavaXls
|
7
|
+
@worksheet = worksheet
|
8
|
+
super sestava, args, &block
|
9
|
+
end
|
10
|
+
|
11
|
+
def vypis_radek_zahlavi(pozice)
|
12
|
+
r, c = XLSSestavy::Xls.ciselne_souradnice(pozice).first
|
13
|
+
format_zahlavi = @sestava.get_format @args[:format_zahlavi] || :radek_zahlavi
|
14
|
+
|
15
|
+
@sloupce.each_with_index do |s, i|
|
16
|
+
format = if s.opt(:xls_format).class==Hash
|
17
|
+
format_hash = s.opt(:xls_format).clone
|
18
|
+
format_hash.delete :num_format
|
19
|
+
@sestava.alter_format format_zahlavi, format_hash
|
20
|
+
else
|
21
|
+
format_zahlavi
|
22
|
+
end
|
23
|
+
@worksheet.write r, c+i, s.zahlavi, format
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def vypis_radek_souctu(pozice, rozsah=nil)
|
28
|
+
r, c = XLSSestavy::Xls.ciselne_souradnice(pozice).first
|
29
|
+
format_souctu = @sestava.get_format @args[:format_souctu] || :radek_souctu
|
30
|
+
|
31
|
+
@sloupce.each_with_index do |s, i|
|
32
|
+
format_hash = {num_format: XLSSestavy::Xls.num_format(s.opt(:datovy_typ))}
|
33
|
+
format_hash.merge! s.opt(:xls_format) if s.opt(:xls_format).class == Hash
|
34
|
+
format = @sestava.alter_format format_souctu, format_hash
|
35
|
+
|
36
|
+
pismeno = XLSSestavy::Xls.sloupec_pismeno c + i
|
37
|
+
case rozsah && s.opt(:radek_souctu)
|
38
|
+
when :soucet
|
39
|
+
formule = "SUBTOTAL(9,#{pismeno}#{rozsah.min}:#{pismeno}#{rozsah.max})"
|
40
|
+
@worksheet.write_formula r, c+i, formule, format
|
41
|
+
when :pocet
|
42
|
+
formule = "SUBTOTAL(3,#{pismeno}#{rozsah.min}:#{pismeno}#{rozsah.max})"
|
43
|
+
@worksheet.write_formula r, c+i, formule, format
|
44
|
+
else
|
45
|
+
@worksheet.write r, c+i, nil, format
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def vypis_radky_dat(pozice, radky)
|
51
|
+
r, c = XLSSestavy::Xls.ciselne_souradnice(pozice).first
|
52
|
+
radku_vypsano = 0
|
53
|
+
|
54
|
+
format_dat = @sestava.get_format @args[:format_dat] || :radky_dat
|
55
|
+
formaty = @sloupce.map do |s|
|
56
|
+
format_hash = {num_format: XLSSestavy::Xls.num_format(s.opt(:datovy_typ))}
|
57
|
+
format_hash.merge! s.opt(:xls_format) if s.opt(:xls_format).class == Hash
|
58
|
+
@sestava.alter_format format_dat, format_hash
|
59
|
+
end
|
60
|
+
|
61
|
+
if radky.class == ActiveRecord::Relation
|
62
|
+
velikost_sady = @args[:velikost_sady] || 200
|
63
|
+
radky.find_in_batches batch_size: velikost_sady do |sada|
|
64
|
+
aktualni_pozice = "#{XLSSestavy::Xls.sloupec_pismeno c}#{r + 1 + radku_vypsano}"
|
65
|
+
vypis_blok_dat aktualni_pozice, sada, formaty
|
66
|
+
radku_vypsano += sada.length
|
67
|
+
end
|
68
|
+
else
|
69
|
+
vypis_blok_dat pozice, radky, formaty
|
70
|
+
radku_vypsano = radky.length
|
71
|
+
end
|
72
|
+
|
73
|
+
radku_vypsano
|
74
|
+
end
|
75
|
+
|
76
|
+
def vypis_blok_dat(pozice, radky, formaty=[])
|
77
|
+
r, c = XLSSestavy::Xls.ciselne_souradnice(pozice).first
|
78
|
+
|
79
|
+
radky.each do |objekt|
|
80
|
+
@sloupce.each_with_index do |s, i|
|
81
|
+
hodnota = XLSSestavy::Xls.douprav_hodnotu_bunky s.hodnota_pro(objekt)
|
82
|
+
case s.opt(:datovy_typ)
|
83
|
+
when :cas, :datum
|
84
|
+
@worksheet.write_date_time r, c+i, hodnota, formaty[i]
|
85
|
+
else
|
86
|
+
@worksheet.write r, c+i, hodnota, formaty[i]
|
87
|
+
end
|
88
|
+
end
|
89
|
+
r += 1
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def vypis(pozice, radky)
|
94
|
+
r, c = XLSSestavy::Xls.ciselne_souradnice(pozice).first
|
95
|
+
sloupec_pismeno = XLSSestavy::Xls.sloupec_pismeno c
|
96
|
+
puvodni_r = r
|
97
|
+
pocet_radku = radky.count
|
98
|
+
|
99
|
+
soucty_od = puvodni_r + 1
|
100
|
+
souctove_radky = @args[:souctove_radky]
|
101
|
+
souctove_radky = :prazdne if pocet_radku==0 && souctove_radky
|
102
|
+
|
103
|
+
#šířky sloupců
|
104
|
+
@sloupce.each_with_index do |s, i|
|
105
|
+
sirka = s.opt(:sirka_sloupce)
|
106
|
+
next unless sirka
|
107
|
+
si = c + i
|
108
|
+
@worksheet.set_column si, si, XLSSestavy::Xls.col_cm_to_p(sirka)
|
109
|
+
end
|
110
|
+
|
111
|
+
#hlavičky
|
112
|
+
vypis_radek_zahlavi pozice
|
113
|
+
r += 1
|
114
|
+
@worksheet.set_row r, XLSSestavy::Xls.row_cm_to_p(@args[:vyska_zahlavi] || 1.3)
|
115
|
+
|
116
|
+
#součtové řádky nad
|
117
|
+
if souctove_radky==:nad || souctove_radky==:nad_pod
|
118
|
+
soucty_od += 1
|
119
|
+
vypis_radek_souctu "#{sloupec_pismeno}#{r + 1}", (soucty_od..soucty_od+pocet_radku-1)
|
120
|
+
r += 1
|
121
|
+
end
|
122
|
+
|
123
|
+
#ukotvení
|
124
|
+
@worksheet.freeze_panes r, 0 if @args[:ukotvit_zahlavi]
|
125
|
+
|
126
|
+
#vypsání dat
|
127
|
+
r += vypis_radky_dat("#{sloupec_pismeno}#{r + 1}", radky)
|
128
|
+
|
129
|
+
#součty pod
|
130
|
+
if souctove_radky==:pod || souctove_radky==:nad_pod
|
131
|
+
vypis_radek_souctu "#{sloupec_pismeno}#{r + 1}", (soucty_od..soucty_od+pocet_radku-1)
|
132
|
+
r += 1
|
133
|
+
end
|
134
|
+
|
135
|
+
#prázdný součtový řádek
|
136
|
+
if souctove_radky==:prazdne
|
137
|
+
vypis_radek_souctu "#{sloupec_pismeno}#{r + 1}"
|
138
|
+
r += 1
|
139
|
+
end
|
140
|
+
|
141
|
+
r - puvodni_r
|
142
|
+
end
|
143
|
+
|
144
|
+
end
|
145
|
+
end
|
data/lib/xls_sestavy/version.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
module XLSSestavy
|
3
|
-
module
|
3
|
+
module Xls::Formaty
|
4
4
|
|
5
5
|
#do uchovávaného pole zapíše pod daným symbolem nový formát využívaný ostatními metodami
|
6
6
|
def add_format(symbol, *args)
|
@@ -46,13 +46,13 @@ module XLSSestavy
|
|
46
46
|
add_format symbol, size: 12, bold: 1, align: 'left'
|
47
47
|
when :sestava_info
|
48
48
|
add_format symbol, italic: 1
|
49
|
-
when :
|
49
|
+
when :radek_zahlavi
|
50
50
|
add_format symbol, bold: 1, border: 1, text_wrap: 1, align: 'center', bg_color: 22
|
51
|
-
when :
|
51
|
+
when :radky_dat
|
52
52
|
add_format symbol, text_wrap: 1, border: 1
|
53
|
-
when :
|
53
|
+
when :radky_dat_stred
|
54
54
|
add_format symbol, text_wrap: 1, border: 1, align: 'center'
|
55
|
-
when :
|
55
|
+
when :radek_souctu
|
56
56
|
add_format symbol, align: 'right', bg_color: 42, bold: 1, border: 1
|
57
57
|
when :default
|
58
58
|
add_format symbol
|
@@ -62,4 +62,4 @@ module XLSSestavy
|
|
62
62
|
end
|
63
63
|
|
64
64
|
end
|
65
|
-
end
|
65
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module XLSSestavy
|
3
|
+
module Xls
|
4
|
+
|
5
|
+
#převod cm na points pro řádky
|
6
|
+
def self.row_cm_to_p(cm)
|
7
|
+
(cm*28.3464567).to_i
|
8
|
+
end
|
9
|
+
|
10
|
+
#převod cm na points pro sloupce
|
11
|
+
#přibližně .. (nenalezen přesný výpočet)
|
12
|
+
def self.col_cm_to_p(cm)
|
13
|
+
(cm*28.3464567/5.6).to_i
|
14
|
+
end
|
15
|
+
|
16
|
+
#převod z mm na palce
|
17
|
+
def self.mm_to_inch(mm)
|
18
|
+
mm/25.4
|
19
|
+
end
|
20
|
+
|
21
|
+
#číslo sloupce ze znaků ('A' => 0)
|
22
|
+
# do maximální hodnoty 'ZZ'
|
23
|
+
def self.sloupec_cislo(znak)
|
24
|
+
znak.upcase!
|
25
|
+
if znak.length==1
|
26
|
+
znak.ord-65
|
27
|
+
elsif znak.length==2
|
28
|
+
(znak[0].ord-64)*26 + znak[1].ord-65
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
#písmeno sloupce z čísla (0 => 'A')
|
33
|
+
# do maximální hodnoty 'ZZ'
|
34
|
+
def self.sloupec_pismeno(cislo)
|
35
|
+
return (cislo+65).chr if cislo < 26
|
36
|
+
a = (cislo/26) - 1
|
37
|
+
b = cislo%26
|
38
|
+
"#{(a+65).chr}#{(b+65).chr}"
|
39
|
+
end
|
40
|
+
|
41
|
+
#převod standartních souřadnic na pole číselných souradnic:
|
42
|
+
# 'A3' => [[2,0]], 'A5:B7' => [[4,0],[6,1]] <radek, sloupec>
|
43
|
+
def self.ciselne_souradnice(bunky)
|
44
|
+
a = bunky.match /^(\D+)(\d+)(:(\D+)(\d+))?$/
|
45
|
+
return unless a
|
46
|
+
souradnice = [[a[2].to_i-1, sloupec_cislo(a[1])]]
|
47
|
+
souradnice << [a[5].to_i-1, sloupec_cislo(a[4])] if a[3]
|
48
|
+
souradnice
|
49
|
+
end
|
50
|
+
|
51
|
+
#doupravuje hodnotu buňky, aby nedošlo na předvídatelné konflikty.
|
52
|
+
#Důležité pro všechny typy času/datumu, protože to je potřeba převést na textový řetězec pro excel stravitelný
|
53
|
+
def self.douprav_hodnotu_bunky(hodnota)
|
54
|
+
return '' unless hodnota
|
55
|
+
case hodnota
|
56
|
+
when Hash
|
57
|
+
YAML.dump hodnota
|
58
|
+
when Array
|
59
|
+
hodnota.join ', '
|
60
|
+
when Time, DateTime, Date
|
61
|
+
I18n.localize hodnota, format: :excel
|
62
|
+
else
|
63
|
+
hodnota
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
#klíč num_formátu pro excel
|
68
|
+
def self.num_format(sym)
|
69
|
+
sym && case sym
|
70
|
+
when :cas; 'yyyy-MM-dd HH:mm:ss'
|
71
|
+
when :datum; 'd. M. yyyy'
|
72
|
+
when :suma; "#,###0.00 #{@def_mena}"
|
73
|
+
when :pocet; '#,##0'
|
74
|
+
when :cislo; '#0'
|
75
|
+
else raise "nedefinovaný num_format: #{sym}"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def self.def_mena=(mena)
|
80
|
+
@def_mena = case mena
|
81
|
+
when '€'; '[$€-4B1]'
|
82
|
+
when 'Kč'; '[$Kč-405]'
|
83
|
+
else; '??'
|
84
|
+
end
|
85
|
+
end
|
86
|
+
self.def_mena = 'Kč'
|
87
|
+
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module XLSSestavy
|
3
|
+
module Xls::Zapisovani
|
4
|
+
|
5
|
+
# roztahuje se na (defaultně) 24 sloupců v prvním řádku
|
6
|
+
def sestava_nadpis(text, roztahnout=12, radek=0)
|
7
|
+
@ws.merge_range radek, 0, radek, roztahnout-1, text, get_format(:sestava_nadpis)
|
8
|
+
@ws.set_row radek, XLSSestavy::Xls.row_cm_to_p(1)
|
9
|
+
end
|
10
|
+
|
11
|
+
# pozice ve standartních excel souřadnicích 'A2', 'B3:B5' (spojení buňek)
|
12
|
+
# vyska znamená výška daného řádku v cm
|
13
|
+
def sestava_napdis2(text, pozice, vyska = 0.7)
|
14
|
+
zapis pozice, text, get_format(:sestava_nadpis2)
|
15
|
+
@ws.set_row ciselne_souradnice(pozice).first.first, XLSSestavy::Xls.row_cm_to_p(vyska)
|
16
|
+
end
|
17
|
+
|
18
|
+
#pozice ve standartních excel souřadnicích 'A2', 'B3:B5' (spojení buňek)
|
19
|
+
def sestava_cas_vytvoreni(pozice='A2')
|
20
|
+
cas = "začátek zpracování: #{I18n.localize Time.zone.now}"
|
21
|
+
zapis pozice, cas, get_format(:default)
|
22
|
+
end
|
23
|
+
|
24
|
+
# pozice bunkdy jsou ve standartních souřadnicích ( 'A3')
|
25
|
+
def zapis(pozice, hodnota, format=nil)
|
26
|
+
format = get_format unless format
|
27
|
+
z_pole, do_pole = XLSSestavy::Xls.ciselne_souradnice pozice
|
28
|
+
if do_pole
|
29
|
+
@ws.merge_range z_pole[0], z_pole[1], do_pole[0], do_pole[1], hodnota, format
|
30
|
+
else
|
31
|
+
@ws.write z_pole[0], z_pole[1], hodnota, format
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def zapis_radu(pozice, hodnoty, format=nil)
|
36
|
+
format = get_format unless format
|
37
|
+
r, c = XLSSestavy::Xls.ciselne_souradnice(pozice).first
|
38
|
+
hodnoty.each do |h|
|
39
|
+
@ws.write r, c, h, format
|
40
|
+
c += 1
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def zapis_sloupec(pozice, hodnoty, format=nil)
|
45
|
+
format = get_format unless format
|
46
|
+
r, c = XLSSestavy::Xls.ciselne_souradnice(pozice).first
|
47
|
+
hodnoty.each do |h|
|
48
|
+
@ws.write r, c, h, format
|
49
|
+
r += 1
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def zapis_tabulku(pozice, radky, args={}, &block)
|
54
|
+
tabulka = XLSSestavy::Xls::TabulkaXls.new self, @ws, args, &block
|
55
|
+
tabulka.vypis pozice, radky
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
end
|
data/lib/xls_sestavy.rb
CHANGED
@@ -1,13 +1,6 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require "xls_sestavy/version"
|
3
|
-
require "xls_sestavy/excel_helper"
|
4
|
-
|
5
|
-
require 'xls_sestavy/sloupec'
|
6
|
-
require 'xls_sestavy/preddefinovany_sloupec'
|
7
|
-
require 'xls_sestavy/rada_sloupcu'
|
8
|
-
require 'xls_sestavy/definice_sloupcu'
|
9
2
|
|
10
|
-
require
|
11
|
-
require
|
3
|
+
require "xls_sestavy/version"
|
4
|
+
require "xls_sestavy/sestava"
|
5
|
+
require "xls_sestavy/sestava_xls"
|
12
6
|
|
13
|
-
require 'writeexcel'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xls_sestavy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ondřej Želazko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-06-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,16 +66,17 @@ files:
|
|
66
66
|
- README.md
|
67
67
|
- Rakefile
|
68
68
|
- lib/xls_sestavy.rb
|
69
|
-
- lib/xls_sestavy/argumenty_sestavy.rb
|
70
|
-
- lib/xls_sestavy/definice_sloupcu.rb
|
71
|
-
- lib/xls_sestavy/excel_formaty.rb
|
72
|
-
- lib/xls_sestavy/excel_helper.rb
|
73
|
-
- lib/xls_sestavy/excel_tabulky.rb
|
74
|
-
- lib/xls_sestavy/preddefinovany_sloupec.rb
|
75
|
-
- lib/xls_sestavy/rada_sloupcu.rb
|
76
69
|
- lib/xls_sestavy/sestava.rb
|
77
|
-
- lib/xls_sestavy/
|
70
|
+
- lib/xls_sestavy/sestava_xls.rb
|
71
|
+
- lib/xls_sestavy/tabulky/sloupce/definice_sloupcu.rb
|
72
|
+
- lib/xls_sestavy/tabulky/sloupce/preddefinovany_sloupce.rb
|
73
|
+
- lib/xls_sestavy/tabulky/sloupce/sloupec.rb
|
74
|
+
- lib/xls_sestavy/tabulky/tabulka.rb
|
75
|
+
- lib/xls_sestavy/tabulky/tabulka_xls.rb
|
78
76
|
- lib/xls_sestavy/version.rb
|
77
|
+
- lib/xls_sestavy/xls/formaty.rb
|
78
|
+
- lib/xls_sestavy/xls/xls.rb
|
79
|
+
- lib/xls_sestavy/xls/zapisovani.rb
|
79
80
|
- xls_sestavy.gemspec
|
80
81
|
homepage: https://github.com/doooby/xls_sestavy
|
81
82
|
licenses:
|
@@ -1,31 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module XLSSestavy
|
3
|
-
class ArgumentySestavy
|
4
|
-
|
5
|
-
attr_accessor :od_data, :do_data, :uzivatel_id
|
6
|
-
alias_method :k_datu, :od_data
|
7
|
-
def k_datu=(datum); @od_data = datum; @do_data = datum; end
|
8
|
-
|
9
|
-
def initialize(args={})
|
10
|
-
args.each_pair{|k, v| send "#{k}=", v }
|
11
|
-
end
|
12
|
-
|
13
|
-
def jeden_datum?
|
14
|
-
@od_data==@do_data
|
15
|
-
end
|
16
|
-
|
17
|
-
def argumenty_sloupce(arr)
|
18
|
-
arr.map{|a| (a.class==Symbol && respond_to?(a)) ? send(a) : a}
|
19
|
-
end
|
20
|
-
|
21
|
-
def to_s
|
22
|
-
return @to_s if defined? @to_s
|
23
|
-
@to_s = if jeden_datum?
|
24
|
-
"#{I18n.l(@od_data, format: :excel)[0..-2]}"
|
25
|
-
else
|
26
|
-
"#{I18n.l(@od_data, format: :excel)[0..-2]}_#{I18n.l(@do_data, format: :excel)[0..-2]}"
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|
31
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module XLSSestavy
|
3
|
-
class DefiniceSloupcu < RadaSloupcu
|
4
|
-
|
5
|
-
def self.[](klic)
|
6
|
-
DefiniceSloupcu.definice(self)[klic]
|
7
|
-
end
|
8
|
-
|
9
|
-
def self.pridej_jako_definice
|
10
|
-
DefiniceSloupcu.cache_definic[self] = self
|
11
|
-
end
|
12
|
-
|
13
|
-
def definice; end
|
14
|
-
|
15
|
-
def definuj(*args, &block)
|
16
|
-
@sloupce << PreddefinovanySloupec.new(*args, &block)
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
def self.definice(klass)
|
22
|
-
ds = DefiniceSloupcu.cache_definic[klass]
|
23
|
-
if ds.class==Class
|
24
|
-
ds = ds.new
|
25
|
-
ds.definice
|
26
|
-
ds.aktualizuj_seznam
|
27
|
-
@cache_definic[klass] = ds
|
28
|
-
end
|
29
|
-
ds
|
30
|
-
end
|
31
|
-
|
32
|
-
def self.cache_definic
|
33
|
-
@cache_definic ||= {}
|
34
|
-
end
|
35
|
-
|
36
|
-
end
|
37
|
-
end
|
@@ -1,96 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module XLSSestavy
|
3
|
-
#převod cm na points pro řádky
|
4
|
-
def self.row_cm_to_p(cm)
|
5
|
-
(cm*28.3464567).to_i
|
6
|
-
end
|
7
|
-
|
8
|
-
#převod cm na points pro sloupce
|
9
|
-
#přibližně .. (nenalezen přesný výpočet)
|
10
|
-
def self.col_cm_to_p(cm)
|
11
|
-
(cm*28.3464567/5.6).to_i
|
12
|
-
end
|
13
|
-
|
14
|
-
#převod z mm na palce
|
15
|
-
def self.mm_to_inch(mm)
|
16
|
-
mm/25.4
|
17
|
-
end
|
18
|
-
|
19
|
-
#číslo sloupce ze znaků ('A' => 0)
|
20
|
-
# do maximální hodnoty 'ZZ'
|
21
|
-
def self.sloupec_cislo(znak)
|
22
|
-
znak.upcase!
|
23
|
-
if znak.length==1
|
24
|
-
znak.ord-65
|
25
|
-
elsif znak.length==2
|
26
|
-
(znak[0].ord-64)*26 + znak[1].ord-65
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
#písmeno sloupce z čísla (0 => 'A')
|
31
|
-
# do maximální hodnoty 'ZZ'
|
32
|
-
def self.sloupec_pismeno(cislo)
|
33
|
-
return (cislo+65).chr if cislo < 26
|
34
|
-
a = (cislo/26) - 1
|
35
|
-
b = cislo%26
|
36
|
-
"#{(a+65).chr}#{(b+65).chr}"
|
37
|
-
end
|
38
|
-
|
39
|
-
#převod standartních souřadnic na pole číselných souradnic:
|
40
|
-
# 'A3' => [[2,0]], 'A5:B7' => [[4,0],[6,1]] <radek, sloupec>
|
41
|
-
def self.ciselne_souradnice(bunky)
|
42
|
-
a = bunky.match /^(\D+)(\d+)(:(\D+)(\d+))?$/
|
43
|
-
return unless a
|
44
|
-
souradnice = [[a[2].to_i-1, sloupec_cislo(a[1])]]
|
45
|
-
souradnice << [a[5].to_i-1, sloupec_cislo(a[4])] if a[3]
|
46
|
-
souradnice
|
47
|
-
end
|
48
|
-
|
49
|
-
#doupravuje hodnotu buňky, aby nedošlo na předvídatelné konflikty.
|
50
|
-
#Důležité pro všechny typy času/datumu, protože to je potřeba převést na textový řetězec pro excel stravitelný
|
51
|
-
def self.douprav_hodnotu_bunky(hodnota)
|
52
|
-
case hodnota
|
53
|
-
when Hash
|
54
|
-
ret = '---'
|
55
|
-
hodnota.each_pair{|k, v| ret += "\n#{k}: #{v}"}
|
56
|
-
ret
|
57
|
-
when Array
|
58
|
-
hodnota.join ', '
|
59
|
-
when Time, DateTime, Date
|
60
|
-
I18n.l hodnota, format: :excel
|
61
|
-
when NilClass
|
62
|
-
''
|
63
|
-
else
|
64
|
-
hodnota
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
#klíč num_formátu pro excel
|
69
|
-
def self.num_format(sym)
|
70
|
-
case sym
|
71
|
-
when :cas
|
72
|
-
'yyyy-MM-dd HH:mm:ss'
|
73
|
-
when :datum
|
74
|
-
'd. M. yyyy'
|
75
|
-
when :suma
|
76
|
-
"#,###0.00 #{@def_mena}"
|
77
|
-
when :pocet
|
78
|
-
'#,##0'
|
79
|
-
when :cislo_smlouvy
|
80
|
-
'#0'
|
81
|
-
else
|
82
|
-
raise "nedefinovaný num_format: #{sym}"
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
|
87
|
-
def self.def_mena=(mena)
|
88
|
-
@def_mena = case mena
|
89
|
-
when '€'; '[$€-4B1]'
|
90
|
-
when 'Kč'; '[$Kč-405]'
|
91
|
-
else; '??'
|
92
|
-
end
|
93
|
-
end
|
94
|
-
self.def_mena = 'Kč'
|
95
|
-
|
96
|
-
end
|
@@ -1,164 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module XLSSestavy
|
3
|
-
module ExcelTabulky
|
4
|
-
|
5
|
-
# vytvoří list, zapíše jej do @ws a vrátí jej. mezi tím případně provede předaný blok
|
6
|
-
def vytvor_list(nazev)
|
7
|
-
@ws = @wb.add_worksheet nazev
|
8
|
-
yield @ws if block_given?
|
9
|
-
@ws
|
10
|
-
end
|
11
|
-
|
12
|
-
# roztahuje se na (defaultně) 24 sloupců v prvním řádku
|
13
|
-
def sestava_nadpis(text, roztahnout=24, radek=0)
|
14
|
-
@ws.merge_range radek, 0, radek, roztahnout-1, text, get_format(:sestava_nadpis)
|
15
|
-
@ws.set_row radek, XLSSestavy.row_cm_to_p(1)
|
16
|
-
end
|
17
|
-
|
18
|
-
# pozice ve standartních excel souřadnicích 'A2', 'B3:B5' (spojení buňek)
|
19
|
-
# vyska znamená výška daného řádku v cm
|
20
|
-
def sestava_napdis2(text, pozice, vyska = 0.7)
|
21
|
-
zapis pozice, text, get_format(:sestava_nadpis2)
|
22
|
-
@ws.set_row ciselne_souradnice(pozice)[0][0], XLSSestavy.row_cm_to_p(vyska)
|
23
|
-
end
|
24
|
-
|
25
|
-
#pozice ve standartních excel souřadnicích 'A2', 'B3:B5' (spojení buňek)
|
26
|
-
def sestava_cas_vytvoreni(pozice='A2')
|
27
|
-
cas = "začátek zpracování: #{l Time.now}"
|
28
|
-
zapis pozice, cas, get_format(:default)
|
29
|
-
end
|
30
|
-
|
31
|
-
# pozice bunkdy jsou ve standartních souřadnicích ( 'A3')
|
32
|
-
def zapis(bunky, hodnota, format=nil)
|
33
|
-
format = get_format unless format
|
34
|
-
souradnice = XLSSestavy.ciselne_souradnice bunky
|
35
|
-
if souradnice.length==1
|
36
|
-
@ws.write souradnice[0][0], souradnice[0][1], hodnota, format
|
37
|
-
else
|
38
|
-
@ws.merge_range souradnice[0][0], souradnice[0][1], souradnice[1][0], souradnice[1][1], hodnota, format
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def zapis_radu(prvni_bunka, hodnoty, format=nil)
|
43
|
-
format = get_format unless format
|
44
|
-
souradnice = XLSSestavy.ciselne_souradnice(prvni_bunka).first
|
45
|
-
hodnoty.each do |h|
|
46
|
-
@ws.write souradnice[0], souradnice[1], h, format
|
47
|
-
souradnice[1] += 1
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
def zapis_sloupec(prvni_bunka, hodnoty, format=nil)
|
52
|
-
format = get_format unless format
|
53
|
-
souradnice = XLSSestavy.ciselne_souradnice(prvni_bunka).first
|
54
|
-
hodnoty.each do |h|
|
55
|
-
@ws.write souradnice[0], souradnice[1], h, format
|
56
|
-
souradnice[0] += 1
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
#vypsání dat tabulky, hlaviček a případných součtových řádků
|
61
|
-
# vrací počet, kolik řádků bylo vypsáno
|
62
|
-
# objekty = <Array<Object>> / <ActiveRecord::Relation>
|
63
|
-
# sloupce: <Array<Sloupec>> / <RadaSloupcu> -pole sloupců
|
64
|
-
#--- args ---
|
65
|
-
# vyska_zahlavi: <Numerical> -hodnota výšky prvního řádku v cm
|
66
|
-
# 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)
|
67
|
-
# soucty: :nad, :pod, :nad_pod, :prazdne, nil
|
68
|
-
# format_zahlavi: <Symbol> -formát hlavičky (bude upraven formátem sloupce)
|
69
|
-
# format_dat: <Symbol> -formát řádků dat (bude upraven formátem sloupce)
|
70
|
-
def vypis_tabulku(pozice, objekty, sloupce, args={})
|
71
|
-
y, x = XLSSestavy.ciselne_souradnice(pozice).first
|
72
|
-
sloupce = sloupce.sloupce if sloupce.kind_of? RadaSloupcu
|
73
|
-
soucty = args[:soucty]
|
74
|
-
soucty = :prazdne if objekty.length==0 && soucty
|
75
|
-
|
76
|
-
dy = 0 # posun v řádcích
|
77
|
-
#hlavičky
|
78
|
-
format_zahlavi = get_format args[:format_zahlavi]||:zahlavi
|
79
|
-
formaty = sloupce.map do |s|
|
80
|
-
next format_zahlavi unless s.format.class==Hash
|
81
|
-
format_hash = s.format.clone
|
82
|
-
format_hash[:num_format] = nil
|
83
|
-
alter_format format_zahlavi, format_hash
|
84
|
-
end
|
85
|
-
sloupce.each_with_index do |s, i|
|
86
|
-
x_sloupce = x + i
|
87
|
-
@ws.write y, x_sloupce, s.zahlavi, formaty[i]
|
88
|
-
@ws.set_column x_sloupce, x_sloupce, XLSSestavy.col_cm_to_p(s.sirka)
|
89
|
-
end
|
90
|
-
@ws.set_row y, XLSSestavy.row_cm_to_p(args[:vyska_zahlavi]||1.3)
|
91
|
-
dy += 1
|
92
|
-
#součty :nad
|
93
|
-
y_soucty = y+dy+1
|
94
|
-
if soucty==:nad || soucty==:nad_pod
|
95
|
-
y_soucty += 1
|
96
|
-
vypis_souctovy_radek y+dy, x, sloupce, (y_soucty..y_soucty+objekty.length-1)
|
97
|
-
dy += 1
|
98
|
-
end
|
99
|
-
#ukotvit
|
100
|
-
@ws.freeze_panes y+dy, 0 if args[:ukotvit_zahlavi]
|
101
|
-
#vypsani samotnych dat
|
102
|
-
format_dat = get_format args[:format_dat]||:data
|
103
|
-
formaty = sloupce.map do |s|
|
104
|
-
next format_dat unless s.format.class==Hash
|
105
|
-
alter_format format_dat, s.format
|
106
|
-
end
|
107
|
-
if objekty.class==ActiveRecord::Relation
|
108
|
-
objekty.find_in_batches batch_size: 100 do |batch|
|
109
|
-
batch.each do |objekt|
|
110
|
-
sloupce.each_with_index do |s, i|
|
111
|
-
hodnota = XLSSestavy.douprav_hodnotu_bunky s.hodnota_pro(objekt)
|
112
|
-
if s.num_format==:cas || s.num_format==:datum
|
113
|
-
@ws.write_date_time y+dy, x+i, hodnota, formaty[i]
|
114
|
-
else
|
115
|
-
@ws.write y+dy, x+i, hodnota, formaty[i]
|
116
|
-
end
|
117
|
-
end
|
118
|
-
dy += 1
|
119
|
-
end
|
120
|
-
end
|
121
|
-
else
|
122
|
-
objekty.each do |objekt|
|
123
|
-
sloupce.each_with_index do |s, i|
|
124
|
-
hodnota = XLSSestavy.douprav_hodnotu_bunky s.hodnota_pro(objekt)
|
125
|
-
if s.num_format==:cas || s.num_format==:datum
|
126
|
-
@ws.write_date_time y+dy, x+i, hodnota, formaty[i]
|
127
|
-
else
|
128
|
-
@ws.write y+dy, x+i, hodnota, formaty[i]
|
129
|
-
end
|
130
|
-
end
|
131
|
-
dy += 1
|
132
|
-
end
|
133
|
-
end
|
134
|
-
#součty :pod
|
135
|
-
if soucty==:pod || soucty==:nad_pod
|
136
|
-
vypis_souctovy_radek y+dy, x, sloupce, (y_soucty..y_soucty+objekty.length-1)
|
137
|
-
dy += 1
|
138
|
-
end
|
139
|
-
#případně, když nejsou žádné objekty jenom prázdný součtový řádek
|
140
|
-
if soucty==:prazdne
|
141
|
-
format = get_format :souctovy_radek
|
142
|
-
sloupce.length.times{|i| @ws.write y+dy, x+i, '', format }
|
143
|
-
dy += 1
|
144
|
-
end
|
145
|
-
dy
|
146
|
-
end
|
147
|
-
|
148
|
-
def vypis_souctovy_radek(y, x, sloupce, rozsah)
|
149
|
-
format = get_format :souctovy_radek
|
150
|
-
sloupce.each_with_index do |s, i|
|
151
|
-
pismeno = XLSSestavy.sloupec_pismeno x+i
|
152
|
-
formule = case s.souctovy_radek
|
153
|
-
when :soucet; "SUBTOTAL(9,#{pismeno}#{rozsah.min}:#{pismeno}#{rozsah.max})"
|
154
|
-
when :pocet; "SUBTOTAL(3,#{pismeno}#{rozsah.min}:#{pismeno}#{rozsah.max})"
|
155
|
-
else
|
156
|
-
@ws.write y, x+i, '', format
|
157
|
-
next
|
158
|
-
end
|
159
|
-
@ws.write_formula y, x+i, formule, format
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
end
|
164
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module XLSSestavy
|
3
|
-
class RadaSloupcu
|
4
|
-
|
5
|
-
attr_reader :sloupce
|
6
|
-
|
7
|
-
def initialize(sloupce=nil, argumenty=nil)
|
8
|
-
@sloupce = sloupce || []
|
9
|
-
yield self if block_given?
|
10
|
-
if @sloupce.class!=Array && @sloupce.any?{|s| !s.kind_of? Sloupec}
|
11
|
-
raise 'RadaSloupcu musí být inicializovány polem Sloupců'
|
12
|
-
end
|
13
|
-
nastav_argumenty argumenty if argumenty
|
14
|
-
@seznam = {}
|
15
|
-
aktualizuj_seznam
|
16
|
-
end
|
17
|
-
|
18
|
-
def pridej(*args, &block)
|
19
|
-
if args.first.is_a? Sloupec
|
20
|
-
@sloupce << args.first
|
21
|
-
else
|
22
|
-
@sloupce << Sloupec.new(*args, &block)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def nastav_argumenty(argumenty)
|
27
|
-
@sloupce.each{|s| s.nastav_argumenty argumenty}
|
28
|
-
end
|
29
|
-
|
30
|
-
def [](klic)
|
31
|
-
index = @seznam[klic.to_sym]
|
32
|
-
index ? @sloupce[index] :nil
|
33
|
-
end
|
34
|
-
|
35
|
-
def aktualizuj_seznam
|
36
|
-
@seznam = {}
|
37
|
-
@sloupce.each_with_index do |s,i|
|
38
|
-
@seznam[s.klic] = i if s.class==PreddefinovanySloupec
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
end
|
43
|
-
end
|
data/lib/xls_sestavy/sloupec.rb
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module XLSSestavy
|
3
|
-
class Sloupec
|
4
|
-
|
5
|
-
attr_accessor :zahlavi, :sirka, :format, :num_format, :souctovy_radek
|
6
|
-
|
7
|
-
def initialize(zahlavi, args={}, &block)
|
8
|
-
@zahlavi= zahlavi
|
9
|
-
@fce = args[:fce] || block
|
10
|
-
nastav args
|
11
|
-
end
|
12
|
-
|
13
|
-
def nastav(args={})
|
14
|
-
@parametry = args[:parametry] || []
|
15
|
-
@sirka = args[:sirka] || 3
|
16
|
-
@souctovy_radek = args[:souctovy_radek]
|
17
|
-
@format = args[:format]
|
18
|
-
@num_format = args[:num_format]
|
19
|
-
if @num_format
|
20
|
-
@format ||= {}
|
21
|
-
@format[:num_format] = XLSSestavy.num_format @num_format
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def nastav_argumenty(argumenty)
|
26
|
-
@argumenty_array = argumenty.argumenty_sloupce(@parametry)
|
27
|
-
@zahlavi.gsub!(/%\w+%/){|m| argumenty.send m[1..-2]}
|
28
|
-
end
|
29
|
-
|
30
|
-
def hodnota_pro(objekt)
|
31
|
-
if @fce.class==Proc
|
32
|
-
@fce.call(objekt, *@argumenty_array)
|
33
|
-
elsif objekt.respond_to? @fce
|
34
|
-
objekt.send(@fce, *@argumenty_array)
|
35
|
-
else
|
36
|
-
raise "Není definováno pro @fce=#{@fce.class}:#{@fce}"
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
end
|
41
|
-
end
|