xls_sestavy 0.2.13 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|