xls_sestavy 0.2.3
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 +15 -0
- data/.gitignore +18 -0
- data/Gemfile +6 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +1 -0
- data/lib/xls_sestavy/argumenty_sestavy.rb +31 -0
- data/lib/xls_sestavy/definice_sloupcu.rb +33 -0
- data/lib/xls_sestavy/excel_formaty.rb +65 -0
- data/lib/xls_sestavy/excel_helper.rb +96 -0
- data/lib/xls_sestavy/excel_tabulky.rb +148 -0
- data/lib/xls_sestavy/preddefinovany_sloupec.rb +13 -0
- data/lib/xls_sestavy/rada_sloupcu.rb +41 -0
- data/lib/xls_sestavy/sestava.rb +41 -0
- data/lib/xls_sestavy/sloupec.rb +41 -0
- data/lib/xls_sestavy/version.rb +5 -0
- data/lib/xls_sestavy.rb +11 -0
- data/xls_sestavy.gemspec +23 -0
- metadata +90 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ZTEwYTU4ZDdjMDEwMzYxMWNhOTdmMjdiOTE2NjhkOGFlYzBiYjY5NA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
ZGQ3YWFjZjc0ZDFhYmQ4NDFkODI1OTkyMThkN2UzNGI2Y2RmMjhjZg==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
OWM4ZGY5MTNiN2FhZjAzOTJjYzVhYjFlNTMyZGEzZjA1NGNlZDNkOWQwZjBh
|
10
|
+
ZDhiOGJiNjFhMGVlYTE1YzVkMWRlZTVjZTRhYjYyMWRmMGY0ZTIyYzk5MjY0
|
11
|
+
ZGU2ZWQyZDlmYWY2OWRjYWUyYmNhNGZmZTcyODQ1OGZiNzc2Njg=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ZTZkY2U0OTllMWU1NzlhYjE4YmQ1MjRhN2UxMjdlYTNiZmQwYTIyYmE3ZGJi
|
14
|
+
MDNkY2VlZWIzNWZjMzA2NDVkYzViMjZiZWRmYjliZmI5YTA1MTc3ZGZjNTE5
|
15
|
+
NGQ2NjZhZDkxY2ZjNDYzY2E3NTI2MjM0MzliMjJjODgxOTEzOTc=
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Ondřej Želazko
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# XlsSestavy
|
2
|
+
|
3
|
+
TODO: Write a gem description
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'xls_sestavy'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install xls_sestavy
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
TODO: Write usage instructions here
|
22
|
+
|
23
|
+
## Contributing
|
24
|
+
|
25
|
+
1. Fork it
|
26
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
29
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,31 @@
|
|
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 ? 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
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module XLSSestavy
|
3
|
+
class DefiniceSloupcu < RadaSloupcu
|
4
|
+
|
5
|
+
def self.[](klic)
|
6
|
+
ds = DefiniceSloupcu.cache_definic[klic]
|
7
|
+
if ds.class==Class
|
8
|
+
ds = ds.new
|
9
|
+
ds.definice
|
10
|
+
ds.aktualizuj_seznam
|
11
|
+
DefiniceSloupcu.cache_definic[klic] = ds
|
12
|
+
end
|
13
|
+
ds
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.pridej_jako_definice(klic)
|
17
|
+
DefiniceSloupcu.cache_definic[klic] = self
|
18
|
+
end
|
19
|
+
|
20
|
+
def definice; end
|
21
|
+
|
22
|
+
def definuj(*args, &block)
|
23
|
+
@sloupce << PreddefinovanySloupec.new(*args, &block)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def self.cache_definic
|
29
|
+
@cache_definic ||= {}
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module XLSSestavy
|
3
|
+
module ExcelFormaty
|
4
|
+
|
5
|
+
#do uchovávaného pole zapíše pod daným symbolem nový formát využívaný ostatními metodami
|
6
|
+
def add_format(symbol, *args)
|
7
|
+
@formaty = {} unless defined? @formaty
|
8
|
+
@formaty[symbol] = @wb.add_format *args
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_altered_format(symbol, format, zmeny_hash)
|
12
|
+
@formaty = {} unless defined? @formaty
|
13
|
+
@formaty[symbol] = alter_format format, zmeny_hash
|
14
|
+
end
|
15
|
+
|
16
|
+
# vytáhne vytvořený formát podle symbolu
|
17
|
+
def get_format(symbol=nil)
|
18
|
+
@formaty = {} unless defined? @formaty
|
19
|
+
unless symbol
|
20
|
+
@format = :default unless defined? @format
|
21
|
+
symbol = @format
|
22
|
+
end
|
23
|
+
f = @formaty[symbol]
|
24
|
+
return f if f
|
25
|
+
add_default_format symbol
|
26
|
+
end
|
27
|
+
|
28
|
+
def alter_format(format, zmeny_hash)
|
29
|
+
f = @wb.add_format
|
30
|
+
f.copy format
|
31
|
+
f.set_format_properties zmeny_hash
|
32
|
+
f
|
33
|
+
end
|
34
|
+
|
35
|
+
#aktivní format je využíván dalšímí metodami
|
36
|
+
def set_aktivni_format(format)
|
37
|
+
@format = format
|
38
|
+
end
|
39
|
+
|
40
|
+
#definice defaultních formátů (voláno z add_format)
|
41
|
+
def add_default_format(symbol)
|
42
|
+
case symbol
|
43
|
+
when :sestava_nadpis
|
44
|
+
add_format symbol, bold: 1, size: 15, bg_color: 52, align: 'left'
|
45
|
+
when :sestava_nadpis2
|
46
|
+
add_format symbol, size: 12, bold: 1, align: 'left'
|
47
|
+
when :sestava_info
|
48
|
+
add_format symbol, italic: 1
|
49
|
+
when :zahlavi
|
50
|
+
add_format symbol, bold: 1, border: 1, text_wrap: 1, align: 'center', bg_color: 22
|
51
|
+
when :data
|
52
|
+
add_format symbol, text_wrap: 1, border: 1
|
53
|
+
when :data_stred
|
54
|
+
add_format symbol, text_wrap: 1, border: 1, align: 'center'
|
55
|
+
when :souctovy_radek
|
56
|
+
add_format symbol, align: 'right', bg_color: 42, bold: 1, border: 1
|
57
|
+
when :default
|
58
|
+
add_format symbol
|
59
|
+
else
|
60
|
+
raise "Formát :#{symbol} není definován"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,96 @@
|
|
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
|
@@ -0,0 +1,148 @@
|
|
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
|
+
objekty.each do |objekt|
|
108
|
+
sloupce.each_with_index do |s, i|
|
109
|
+
hodnota = XLSSestavy.douprav_hodnotu_bunky s.hodnota_pro(objekt)
|
110
|
+
if s.num_format==:cas || s.num_format==:datum
|
111
|
+
@ws.write_date_time y+dy, x+i, hodnota, formaty[i]
|
112
|
+
else
|
113
|
+
@ws.write y+dy, x+i, hodnota, formaty[i]
|
114
|
+
end
|
115
|
+
end
|
116
|
+
dy += 1
|
117
|
+
end
|
118
|
+
#součty :pod
|
119
|
+
if soucty==:pod || soucty==:nad_pod
|
120
|
+
vypis_souctovy_radek y+dy, x, sloupce, [y_soucty..y_soucty+objekty.length-1]
|
121
|
+
dy += 1
|
122
|
+
end
|
123
|
+
#případně, když nejsou žádné objekty jenom prázdný součtový řádek
|
124
|
+
if soucty==:prazdne
|
125
|
+
format = get_format :souctovy_radek
|
126
|
+
sloupce.length.times{|i| @ws.write y+dy, x+i, '', format }
|
127
|
+
dy += 1
|
128
|
+
end
|
129
|
+
dy
|
130
|
+
end
|
131
|
+
|
132
|
+
def vypis_souctovy_radek(y, x, sloupce, rozsah)
|
133
|
+
format = get_format :souctovy_radek
|
134
|
+
sloupce.each_with_index do |s, i|
|
135
|
+
pismeno = XLSSestavy.sloupec_pismeno x
|
136
|
+
formule = case s.souctovy_radek
|
137
|
+
when :soucet; "SUBTOTAL(9,#{pismeno}#{rozsah.min}:#{pismeno}#{rozsah.max})"
|
138
|
+
when :pocet; "SUBTOTAL(9,#{pismeno}#{rozsah.min}:#{pismeno}#{rozsah.max})"
|
139
|
+
else
|
140
|
+
@ws.write y, x+i, '', format
|
141
|
+
next
|
142
|
+
end
|
143
|
+
@ws.write_formula y, x+i, formule, format
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
end
|
148
|
+
end
|
@@ -0,0 +1,41 @@
|
|
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
|
+
@sloupce.each{|s| s.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 [](klic)
|
27
|
+
index = @seznam[klic.to_sym]
|
28
|
+
index ? @sloupce[index] :nil
|
29
|
+
end
|
30
|
+
|
31
|
+
protected
|
32
|
+
|
33
|
+
def aktualizuj_seznam
|
34
|
+
@seznam = {}
|
35
|
+
@sloupce.each_with_index do |s,i|
|
36
|
+
@seznam[s.klic] = i if s.class==PreddefinovanySloupec
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'tempfile'
|
3
|
+
require 'xls_sestavy/excel_formaty'
|
4
|
+
require 'xls_sestavy/excel_tabulky'
|
5
|
+
|
6
|
+
|
7
|
+
module XLSSestavy
|
8
|
+
class Sestava
|
9
|
+
NAZEV = 'Prázdná sestava'
|
10
|
+
|
11
|
+
include ExcelTabulky
|
12
|
+
include ExcelFormaty
|
13
|
+
|
14
|
+
attr_reader :argumenty
|
15
|
+
|
16
|
+
def initialize(args={})
|
17
|
+
@argumenty = ArgumentySestavy.new args
|
18
|
+
end
|
19
|
+
|
20
|
+
def vytvor_soubor
|
21
|
+
f = Tempfile.new self.class::NAZEV.gsub(' ','_'), Rails.root.join('tmp')
|
22
|
+
@wb = WriteExcel.new f
|
23
|
+
vypracuj_sestavu
|
24
|
+
@wb.close
|
25
|
+
block_given? ? yield(f) : po_vypracovani(f)
|
26
|
+
end
|
27
|
+
|
28
|
+
def vypracuj_sestavu; end
|
29
|
+
|
30
|
+
def po_vypracovani(f); end
|
31
|
+
|
32
|
+
def nazev_souboru
|
33
|
+
to_s + '.xls'
|
34
|
+
end
|
35
|
+
|
36
|
+
def to_s
|
37
|
+
"#{self.class::NAZEV.gsub(' ','_')}_#{@argumenty.to_s}"
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,41 @@
|
|
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
|
data/lib/xls_sestavy.rb
ADDED
@@ -0,0 +1,11 @@
|
|
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
|
+
|
10
|
+
require 'xls_sestavy/argumenty_sestavy'
|
11
|
+
require 'xls_sestavy/sestava'
|
data/xls_sestavy.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'xls_sestavy/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "xls_sestavy"
|
8
|
+
spec.version = XLSSestavy::VERSION
|
9
|
+
spec.authors = ["Ondřej Želazko"]
|
10
|
+
spec.email = ["zelazk.o@email.cz"]
|
11
|
+
spec.description = %q(Uses writeexcel and puts some helper methods on top for making summaries in xls format)
|
12
|
+
spec.summary = %q(xls simple helper library)
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
end
|
metadata
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: xls_sestavy
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.3
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ondřej Želazko
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-04-24 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: Uses writeexcel and puts some helper methods on top for making summaries
|
42
|
+
in xls format
|
43
|
+
email:
|
44
|
+
- zelazk.o@email.cz
|
45
|
+
executables: []
|
46
|
+
extensions: []
|
47
|
+
extra_rdoc_files: []
|
48
|
+
files:
|
49
|
+
- .gitignore
|
50
|
+
- Gemfile
|
51
|
+
- LICENSE.txt
|
52
|
+
- README.md
|
53
|
+
- Rakefile
|
54
|
+
- lib/xls_sestavy.rb
|
55
|
+
- lib/xls_sestavy/argumenty_sestavy.rb
|
56
|
+
- lib/xls_sestavy/definice_sloupcu.rb
|
57
|
+
- lib/xls_sestavy/excel_formaty.rb
|
58
|
+
- lib/xls_sestavy/excel_helper.rb
|
59
|
+
- lib/xls_sestavy/excel_tabulky.rb
|
60
|
+
- lib/xls_sestavy/preddefinovany_sloupec.rb
|
61
|
+
- lib/xls_sestavy/rada_sloupcu.rb
|
62
|
+
- lib/xls_sestavy/sestava.rb
|
63
|
+
- lib/xls_sestavy/sloupec.rb
|
64
|
+
- lib/xls_sestavy/version.rb
|
65
|
+
- xls_sestavy.gemspec
|
66
|
+
homepage: ''
|
67
|
+
licenses:
|
68
|
+
- MIT
|
69
|
+
metadata: {}
|
70
|
+
post_install_message:
|
71
|
+
rdoc_options: []
|
72
|
+
require_paths:
|
73
|
+
- lib
|
74
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ! '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ! '>='
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
requirements: []
|
85
|
+
rubyforge_project:
|
86
|
+
rubygems_version: 2.1.11
|
87
|
+
signing_key:
|
88
|
+
specification_version: 4
|
89
|
+
summary: xls simple helper library
|
90
|
+
test_files: []
|