workbook 0.2.0 → 0.2.1
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.
- data/.yardoc/checksums +18 -0
- data/.yardoc/object_types +3 -0
- data/.yardoc/objects/root.dat +0 -0
- data/.yardoc/proxy_types +0 -0
- data/Gemfile.lock +1 -1
- data/{readme.markdown → README.md} +36 -10
- data/doc/RubyXL.html +128 -0
- data/doc/RubyXL/Cell.html +202 -0
- data/doc/RubyXL/Workbook.html +447 -0
- data/doc/Workbook.html +130 -0
- data/doc/Workbook/Book.html +1484 -0
- data/doc/Workbook/Cell.html +1402 -0
- data/doc/Workbook/Format.html +654 -0
- data/doc/Workbook/Modules.html +117 -0
- data/doc/Workbook/Modules/RawObjectsStorage.html +508 -0
- data/doc/Workbook/Modules/TableDiffSort.html +620 -0
- data/doc/Workbook/Modules/TypeParser.html +1012 -0
- data/doc/Workbook/Readers.html +117 -0
- data/doc/Workbook/Readers/CsvReader.html +262 -0
- data/doc/Workbook/Readers/TxtReader.html +238 -0
- data/doc/Workbook/Readers/XlsReader.html +362 -0
- data/doc/Workbook/Readers/XlsShared.html +189 -0
- data/doc/Workbook/Readers/XlsxReader.html +295 -0
- data/doc/Workbook/Row.html +1939 -0
- data/doc/Workbook/Sheet.html +528 -0
- data/doc/Workbook/Table.html +883 -0
- data/doc/Workbook/Template.html +639 -0
- data/doc/Workbook/Writers.html +117 -0
- data/doc/Workbook/Writers/CsvTableWriter.html +175 -0
- data/doc/Workbook/Writers/XlsWriter.html +865 -0
- data/doc/_index.html +336 -0
- data/doc/class_list.html +53 -0
- data/doc/css/common.css +1 -0
- data/doc/css/full_list.css +57 -0
- data/doc/css/style.css +328 -0
- data/doc/file.README.html +236 -0
- data/doc/file_list.html +55 -0
- data/doc/frames.html +28 -0
- data/doc/index.html +236 -0
- data/doc/js/app.js +214 -0
- data/doc/js/full_list.js +173 -0
- data/doc/js/jquery.js +4 -0
- data/doc/method_list.html +972 -0
- data/doc/top-level-namespace.html +112 -0
- data/lib/workbook/book.rb +38 -29
- data/lib/workbook/cell.rb +25 -0
- data/lib/workbook/format.rb +9 -2
- data/lib/workbook/modules/raw_objects_storage.rb +5 -0
- data/lib/workbook/modules/table_diff_sort.rb +8 -6
- data/lib/workbook/modules/type_parser.rb +16 -3
- data/lib/workbook/readers/xls_reader.rb +1 -70
- data/lib/workbook/readers/xls_shared.rb +75 -0
- data/lib/workbook/row.rb +89 -17
- data/lib/workbook/sheet.rb +26 -0
- data/lib/workbook/table.rb +20 -1
- data/lib/workbook/template.rb +12 -11
- data/lib/workbook/writers/xls_writer.rb +19 -77
- data/test/test_modules_table_diff_sort.rb +19 -6
- data/test/test_row.rb +54 -0
- data/test/test_sheet.rb +8 -0
- data/test/test_table.rb +22 -3
- data/test/test_writers_xls_writer.rb +3 -0
- data/workbook.gemspec +1 -1
- metadata +46 -3
@@ -1,22 +1,35 @@
|
|
1
1
|
module Workbook
|
2
2
|
module Modules
|
3
|
+
# Adds type parsing capabilities to e.g. a Cell.
|
3
4
|
module TypeParser
|
5
|
+
|
6
|
+
# Cleans a text file from all kinds of different ways of representing new lines
|
7
|
+
# @param [String] csv_raw a raw csv string
|
4
8
|
def strip_win_chars csv_raw
|
5
9
|
csv_raw.gsub(/(\n\r|\r\n|\r)/,"\n")
|
6
10
|
end
|
7
11
|
|
12
|
+
# Return the different active string parsers
|
13
|
+
# @return [Array<Symbol>] A list of parsers
|
8
14
|
def string_parsers
|
9
15
|
@string_parsers ||= [:string_cleaner,:string_nil_converter,:string_integer_converter,:string_boolean_converter]
|
10
16
|
end
|
11
17
|
|
12
|
-
|
13
|
-
|
18
|
+
# Set the list of string parsers
|
19
|
+
# @param [Array<Symbol>] parsers A list of parsers
|
20
|
+
# @return [Array<Symbol>] A list of parsers
|
21
|
+
def string_parsers= parsers
|
22
|
+
@string_parsers = parsers
|
14
23
|
end
|
15
|
-
|
24
|
+
|
25
|
+
# Return the different active string parsers
|
26
|
+
# @return [Array<Proc>] A list of parsers as Procs
|
16
27
|
def string_parsers_as_procs
|
17
28
|
string_parsers.collect{|c| c.is_a?(Proc) ? c : self.send(c)}
|
18
29
|
end
|
19
30
|
|
31
|
+
# Returns the parsed value (retrieved by calling #value)
|
32
|
+
# @return [Object] The parsed object, ideally a date or integer when found to be a such...
|
20
33
|
def parse options={}
|
21
34
|
options = {:detect_date=>false}.merge(options)
|
22
35
|
string_parsers.push :string_optimistic_date_converter if options[:detect_date]
|
@@ -3,75 +3,6 @@ require 'spreadsheet'
|
|
3
3
|
module Workbook
|
4
4
|
module Readers
|
5
5
|
module XlsReader
|
6
|
-
XLS_COLORS = {:xls_color_1=>'#000000',
|
7
|
-
:xls_color_2=>'#FFFFFF',
|
8
|
-
:xls_color_3=>'#FF0000',
|
9
|
-
:xls_color_4=>'#00FF00',
|
10
|
-
:xls_color_5=>'#0000FF',
|
11
|
-
:xls_color_6=>'#FFFF00',
|
12
|
-
:xls_color_7=>'#FF00FF',
|
13
|
-
:xls_color_8=>'#00FFFF',
|
14
|
-
:xls_color_9=>'#800000',
|
15
|
-
:xls_color_10=>'#008000',
|
16
|
-
:xls_color_11=>'#000080',
|
17
|
-
:xls_color_12=>'#808000',
|
18
|
-
:xls_color_13=>'#800080',
|
19
|
-
:xls_color_14=>'#008080',
|
20
|
-
:xls_color_15=>'#C0C0C0',
|
21
|
-
:xls_color_16=>'#808080',
|
22
|
-
:xls_color_17=>'#9999FF',
|
23
|
-
:xls_color_18=>'#993366',
|
24
|
-
:xls_color_19=>'#FFFFCC',
|
25
|
-
:xls_color_20=>'#CCFFFF',
|
26
|
-
:xls_color_21=>'#660066',
|
27
|
-
:xls_color_22=>'#FF8080',
|
28
|
-
:xls_color_23=>'#0066CC',
|
29
|
-
:xls_color_24=>'#CCCCFF',
|
30
|
-
:xls_color_25=>'#000080',
|
31
|
-
:xls_color_26=>'#FF00FF',
|
32
|
-
:xls_color_27=>'#FFFF00',
|
33
|
-
:xls_color_28=>'#00FFFF',
|
34
|
-
:xls_color_29=>'#800080',
|
35
|
-
:xls_color_30=>'#800000',
|
36
|
-
:xls_color_31=>'#008080',
|
37
|
-
:xls_color_32=>'#0000FF',
|
38
|
-
:xls_color_33=>'#00CCFF',
|
39
|
-
:xls_color_34=>'#CCFFFF',
|
40
|
-
:xls_color_35=>'#CCFFCC',
|
41
|
-
:xls_color_36=>'#FFFF99',
|
42
|
-
:xls_color_37=>'#99CCFF',
|
43
|
-
:xls_color_38=>'#FF99CC',
|
44
|
-
:xls_color_39=>'#CC99FF',
|
45
|
-
:xls_color_40=>'#FFCC99',
|
46
|
-
:xls_color_41=>'#3366FF',
|
47
|
-
:xls_color_42=>'#33CCCC',
|
48
|
-
:xls_color_43=>'#99CC00',
|
49
|
-
:xls_color_44=>'#FFCC00',
|
50
|
-
:xls_color_45=>'#FF9900',
|
51
|
-
:xls_color_46=>'#FF6600',
|
52
|
-
:xls_color_47=>'#666699',
|
53
|
-
:xls_color_48=>'#969696',
|
54
|
-
:xls_color_49=>'#003366',
|
55
|
-
:xls_color_50=>'#339966',
|
56
|
-
:xls_color_51=>'#003300',
|
57
|
-
:xls_color_52=>'#333300',
|
58
|
-
:xls_color_53=>'#993300',
|
59
|
-
:xls_color_54=>'#993366',
|
60
|
-
:xls_color_55=>'#333399',
|
61
|
-
:xls_color_56=>'#333333',
|
62
|
-
:black=>'#000000',
|
63
|
-
:white=>'#FFFFFF',
|
64
|
-
:red=>'#FF0000',
|
65
|
-
:green=>'#00FF00',
|
66
|
-
:blue=>'#0000FF',
|
67
|
-
:yellow=>'#FFFF00',
|
68
|
-
:magenta=>'#FF00FF',
|
69
|
-
:cyan=>'#00FFFF',
|
70
|
-
:border=>'#FFFFFF',
|
71
|
-
:text=>'#000000',
|
72
|
-
:lime=>'#00f94c'}
|
73
|
-
|
74
|
-
|
75
6
|
|
76
7
|
def load_xls file_obj
|
77
8
|
begin
|
@@ -158,7 +89,7 @@ module Workbook
|
|
158
89
|
|
159
90
|
private
|
160
91
|
def xls_color_to_html_hex color_sym
|
161
|
-
XLS_COLORS[color_sym] ? XLS_COLORS[color_sym] : "#000000"
|
92
|
+
Workbook::Book::XLS_COLORS[color_sym] ? Workbook::Book::XLS_COLORS[color_sym] : "#000000"
|
162
93
|
end
|
163
94
|
|
164
95
|
def ms_formatting_to_strftime ms_nr_format
|
@@ -0,0 +1,75 @@
|
|
1
|
+
module Workbook
|
2
|
+
module Readers
|
3
|
+
module XlsShared
|
4
|
+
XLS_COLORS = {:xls_color_1=>'#000000',
|
5
|
+
:xls_color_2=>'#FFFFFF',
|
6
|
+
:xls_color_3=>'#FF0000',
|
7
|
+
:xls_color_4=>'#00FF00',
|
8
|
+
:xls_color_5=>'#0000FF',
|
9
|
+
:xls_color_6=>'#FFFF00',
|
10
|
+
:xls_color_7=>'#FF00FF',
|
11
|
+
:xls_color_8=>'#00FFFF',
|
12
|
+
:xls_color_9=>'#800000',
|
13
|
+
:xls_color_10=>'#008000',
|
14
|
+
:xls_color_11=>'#000080',
|
15
|
+
:xls_color_12=>'#808000',
|
16
|
+
:xls_color_13=>'#800080',
|
17
|
+
:xls_color_14=>'#008080',
|
18
|
+
:xls_color_15=>'#C0C0C0',
|
19
|
+
:xls_color_16=>'#808080',
|
20
|
+
:xls_color_17=>'#9999FF',
|
21
|
+
:xls_color_18=>'#993366',
|
22
|
+
:xls_color_19=>'#FFFFCC',
|
23
|
+
:xls_color_20=>'#CCFFFF',
|
24
|
+
:xls_color_21=>'#660066',
|
25
|
+
:xls_color_22=>'#FF8080',
|
26
|
+
:xls_color_23=>'#0066CC',
|
27
|
+
:xls_color_24=>'#CCCCFF',
|
28
|
+
:xls_color_25=>'#000080',
|
29
|
+
:xls_color_26=>'#FF00FF',
|
30
|
+
:xls_color_27=>'#FFFF00',
|
31
|
+
:xls_color_28=>'#00FFFF',
|
32
|
+
:xls_color_29=>'#800080',
|
33
|
+
:xls_color_30=>'#800000',
|
34
|
+
:xls_color_31=>'#008080',
|
35
|
+
:xls_color_32=>'#0000FF',
|
36
|
+
:xls_color_33=>'#00CCFF',
|
37
|
+
:xls_color_34=>'#CCFFFF',
|
38
|
+
:xls_color_35=>'#CCFFCC',
|
39
|
+
:xls_color_36=>'#FFFF99',
|
40
|
+
:xls_color_37=>'#99CCFF',
|
41
|
+
:xls_color_38=>'#FF99CC',
|
42
|
+
:xls_color_39=>'#CC99FF',
|
43
|
+
:xls_color_40=>'#FFCC99',
|
44
|
+
:xls_color_41=>'#3366FF',
|
45
|
+
:xls_color_42=>'#33CCCC',
|
46
|
+
:xls_color_43=>'#99CC00',
|
47
|
+
:xls_color_44=>'#FFCC00',
|
48
|
+
:xls_color_45=>'#FF9900',
|
49
|
+
:xls_color_46=>'#FF6600',
|
50
|
+
:xls_color_47=>'#666699',
|
51
|
+
:xls_color_48=>'#969696',
|
52
|
+
:xls_color_49=>'#003366',
|
53
|
+
:xls_color_50=>'#339966',
|
54
|
+
:xls_color_51=>'#003300',
|
55
|
+
:xls_color_52=>'#333300',
|
56
|
+
:xls_color_53=>'#993300',
|
57
|
+
:xls_color_54=>'#993366',
|
58
|
+
:xls_color_55=>'#333399',
|
59
|
+
:xls_color_56=>'#333333',
|
60
|
+
:black=>'#000000',
|
61
|
+
:white=>'#FFFFFF',
|
62
|
+
:red=>'#FF0000',
|
63
|
+
:green=>'#00FF00',
|
64
|
+
:blue=>'#0000FF',
|
65
|
+
:yellow=>'#FFFF00',
|
66
|
+
:magenta=>'#FF00FF',
|
67
|
+
:cyan=>'#00FFFF',
|
68
|
+
:border=>'#FFFFFF',
|
69
|
+
:text=>'#000000',
|
70
|
+
:lime=>'#00f94c'
|
71
|
+
}
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
data/lib/workbook/row.rb
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
module Workbook
|
2
2
|
class Row < Array
|
3
3
|
alias_method :compare_without_header, :<=>
|
4
|
-
|
5
|
-
# The placeholder attribute is used in compares (corresponds to newly created or removed lines (depending which side you're on)
|
6
|
-
attr_accessor :placeholder
|
4
|
+
attr_accessor :placeholder # The placeholder attribute is used in compares (corresponds to newly created or removed lines (depending which side you're on)
|
7
5
|
attr_accessor :format
|
8
6
|
|
9
|
-
|
10
|
-
#
|
11
|
-
# @param [Workbook::
|
12
|
-
# @param [
|
7
|
+
# Initialize a new row
|
8
|
+
#
|
9
|
+
# @param [Workbook::Row, Array<Workbook::Cell>, Array] cells list of cells to initialize the row with, default is empty
|
10
|
+
# @param [Workbook::Table] table a row normally belongs to a table, reference it here
|
11
|
+
# @param [Hash] options Supprted options: parse_cells_on_batch_creation (parse cell values during row-initalization, default: false), cell_parse_options (default {}, see Workbook::Modules::TypeParser)
|
13
12
|
def initialize cells=[], table=nil, options={}
|
14
13
|
options=options ? {:parse_cells_on_batch_creation=>false,:cell_parse_options=>{}}.merge(options) : {}
|
15
14
|
cells = [] if cells==nil
|
@@ -25,22 +24,35 @@ module Workbook
|
|
25
24
|
end
|
26
25
|
end
|
27
26
|
|
27
|
+
# An internal function used in diffs
|
28
|
+
#
|
29
|
+
# @return [Boolean] returns true when this row is not an actual row, but a placeholder row to 'compare' against
|
28
30
|
def placeholder?
|
29
31
|
placeholder ? true : false
|
30
32
|
end
|
31
33
|
|
34
|
+
# Returns the table this row belongs to
|
35
|
+
#
|
36
|
+
# @return [Workbook::Table] the table this row belongs to
|
32
37
|
def table
|
33
38
|
@table
|
34
39
|
end
|
35
40
|
|
36
|
-
# Set reference to the table this row belongs to
|
41
|
+
# Set reference to the table this row belongs to without adding the row to the table
|
42
|
+
#
|
43
|
+
# @param [Workbook::Table] t the table this row belongs to
|
44
|
+
def set_table(t)
|
45
|
+
@table = t
|
46
|
+
end
|
47
|
+
|
48
|
+
# Set reference to the table this row belongs to and add the row to this table
|
37
49
|
#
|
38
|
-
# @param [Workbook::Table]
|
50
|
+
# @param [Workbook::Table] t the table this row belongs to
|
39
51
|
def table= t
|
40
52
|
raise ArgumentError, "table should be a Workbook::Table (you passed a #{t.class})" unless t.is_a?(Workbook::Table) or t == nil
|
41
53
|
if t
|
42
54
|
@table = t
|
43
|
-
table
|
55
|
+
table.push(self) #unless table.index(self) and self.placeholder?
|
44
56
|
end
|
45
57
|
end
|
46
58
|
|
@@ -50,25 +62,55 @@ module Workbook
|
|
50
62
|
# row[1] #=> <Cell value="a">
|
51
63
|
# row[:a] #=> <Cell value="a">
|
52
64
|
#
|
53
|
-
# @param [Fixnum, Symbol]
|
65
|
+
# @param [Fixnum, Symbol] index_or_hash
|
54
66
|
# @return [Workbook::Cell, nil]
|
55
67
|
def [](index_or_hash)
|
56
|
-
if index_or_hash.is_a?
|
57
|
-
return to_a[index_or_hash]
|
58
|
-
elsif index_or_hash.is_a? Symbol
|
68
|
+
if index_or_hash.is_a? Symbol
|
59
69
|
rv = nil
|
60
70
|
begin
|
61
71
|
rv = to_hash[index_or_hash]
|
62
72
|
rescue NoMethodError
|
63
73
|
end
|
64
74
|
return rv
|
75
|
+
else
|
76
|
+
if index_or_hash
|
77
|
+
return to_a[index_or_hash]
|
78
|
+
end
|
65
79
|
end
|
66
80
|
end
|
81
|
+
|
82
|
+
# Overrides normal Array's []=-function with support for symbols that identify a column based on the header-values
|
83
|
+
#
|
84
|
+
# @example Lookup using fixnum or header value encoded as symbol
|
85
|
+
# row[1] #=> <Cell value="a">
|
86
|
+
# row[:a] #=> <Cell value="a">
|
87
|
+
#
|
88
|
+
# @param [Fixnum, Symbol] index_or_hash
|
89
|
+
# @param [String, Fixnum, NilClass, Date, DateTime, Time, Float] value
|
90
|
+
# @return [Workbook::Cell, nil]
|
91
|
+
def []= (index_or_hash, value)
|
92
|
+
index = index_or_hash
|
93
|
+
if index_or_hash.is_a? Symbol
|
94
|
+
index = table_header_keys.index(index_or_hash)
|
95
|
+
end
|
67
96
|
|
97
|
+
value_celled = Workbook::Cell.new
|
98
|
+
if value.is_a? Workbook::Cell
|
99
|
+
value_celled = value
|
100
|
+
else
|
101
|
+
current_cell = self[index]
|
102
|
+
if current_cell.is_a? Workbook::Cell
|
103
|
+
value_celled = current_cell
|
104
|
+
end
|
105
|
+
value_celled.value=(value)
|
106
|
+
end
|
107
|
+
super(index,value_celled)
|
108
|
+
end
|
109
|
+
|
68
110
|
# Returns an array of cells allows you to find cells by a given color, normally a string containing a hex
|
69
111
|
#
|
70
|
-
# @param [String]
|
71
|
-
# @param [Hash] options
|
112
|
+
# @param [String] color a CSS-style hex-string
|
113
|
+
# @param [Hash] options Option :hash_keys (default true) returns row as an array of symbols
|
72
114
|
# @return [Array<Symbol>, Workbook::Row<Workbook::Cell>]
|
73
115
|
def find_cells_by_background_color color=:any, options={}
|
74
116
|
options = {:hash_keys=>true}.merge(options)
|
@@ -84,25 +126,45 @@ module Workbook
|
|
84
126
|
table != nil and self.object_id == table.header.object_id
|
85
127
|
end
|
86
128
|
|
129
|
+
# Is this the first row in the table
|
130
|
+
#
|
131
|
+
# @return [Boolean, NilClass] returns nil if it doesn't belong to a table, false when it isn't the first row of a table and true when it is.
|
132
|
+
def first?
|
133
|
+
table != nil and self.object_id == table.first.object_id
|
134
|
+
end
|
135
|
+
|
136
|
+
# Converts a row to an array of symbol representations of the row content, see also: Workbook::Cell#to_sym
|
87
137
|
# @return [Array<Symbol>] returns row as an array of symbols
|
88
138
|
def to_symbols
|
89
139
|
collect{|c| c.to_sym}
|
90
140
|
end
|
91
141
|
|
142
|
+
# Converts the row to an array of Workbook::Cell's
|
92
143
|
# @return [Array<Workbook::Cell>] returns row as an array of symbols
|
93
144
|
def to_a
|
94
145
|
self.collect{|c| c}
|
95
146
|
end
|
96
147
|
|
148
|
+
def table_header_keys
|
149
|
+
table.header.to_symbols
|
150
|
+
end
|
151
|
+
|
152
|
+
# Returns a hash representation of this row
|
153
|
+
#
|
154
|
+
# @return [Hash]
|
97
155
|
def to_hash
|
98
156
|
return @hash if @hash
|
99
|
-
keys =
|
157
|
+
keys = table_header_keys
|
100
158
|
values = self
|
101
159
|
@hash = {}
|
102
160
|
keys.each_with_index {|k,i| @hash[k]=values[i]}
|
103
161
|
return @hash
|
104
162
|
end
|
105
163
|
|
164
|
+
# Compares one row wiht another
|
165
|
+
#
|
166
|
+
# @param [Workbook::Row] other row to compare against
|
167
|
+
# @return [Workbook::Row] a row with the diff result.
|
106
168
|
def <=> other
|
107
169
|
a = self.header? ? 0 : 1
|
108
170
|
b = other.header? ? 0 : 1
|
@@ -110,6 +172,9 @@ module Workbook
|
|
110
172
|
compare_without_header other
|
111
173
|
end
|
112
174
|
|
175
|
+
# The first cell of the row is considered to be the key
|
176
|
+
#
|
177
|
+
# @return [Workbook::Cell] the key cell
|
113
178
|
def key
|
114
179
|
first
|
115
180
|
end
|
@@ -119,5 +184,12 @@ module Workbook
|
|
119
184
|
r = self.clone
|
120
185
|
r = r.collect{|c| c unless c.nil?}.compact
|
121
186
|
end
|
187
|
+
|
188
|
+
# clone the row with together with the cells
|
189
|
+
#
|
190
|
+
# @return [Workbook::Row] a cloned copy of self with cells
|
191
|
+
def clone
|
192
|
+
Workbook::Row.new(to_a.collect{|c| c.clone})
|
193
|
+
end
|
122
194
|
end
|
123
195
|
end
|
data/lib/workbook/sheet.rb
CHANGED
@@ -1,7 +1,14 @@
|
|
1
1
|
module Workbook
|
2
2
|
class Sheet < Array
|
3
|
+
# A Sheet is a container of tables
|
3
4
|
attr_accessor :book
|
4
5
|
|
6
|
+
# Initialize a new sheet
|
7
|
+
#
|
8
|
+
# @param [Workbook::Table, Array<Array>] table The first table of this sheet
|
9
|
+
# @param [Workbook::Book] book The book this sheet belongs to
|
10
|
+
# @param [Hash] options are forwarded to Workbook::Table.new
|
11
|
+
# @return [Workbook::Sheet] (self)
|
5
12
|
def initialize table=Workbook::Table.new([], self), book=nil, options={}
|
6
13
|
if table.is_a? Workbook::Table
|
7
14
|
push table
|
@@ -9,14 +16,33 @@ module Workbook
|
|
9
16
|
push Workbook::Table.new(table, self, options)
|
10
17
|
end
|
11
18
|
self.book = book
|
19
|
+
return self
|
12
20
|
end
|
13
21
|
|
22
|
+
# Returns true if the first table of this sheet contains anything
|
23
|
+
#
|
24
|
+
# @return [Boolean]
|
14
25
|
def has_contents?
|
15
26
|
table.has_contents?
|
16
27
|
end
|
17
28
|
|
29
|
+
# Returns the first table of this sheet
|
30
|
+
#
|
31
|
+
# @return [Workbook::Table] the first table of this sheet
|
18
32
|
def table
|
19
33
|
first
|
20
34
|
end
|
35
|
+
|
36
|
+
# Returns the book this sheet belongs to
|
37
|
+
#
|
38
|
+
# @return [Workbook::Book] the book this sheet belongs to
|
39
|
+
def book
|
40
|
+
if @book
|
41
|
+
return @book
|
42
|
+
else
|
43
|
+
self.book = Workbook::Book.new(self)
|
44
|
+
return @book
|
45
|
+
end
|
46
|
+
end
|
21
47
|
end
|
22
48
|
end
|
data/lib/workbook/table.rb
CHANGED
@@ -3,6 +3,7 @@ require 'workbook/writers/csv_table_writer'
|
|
3
3
|
|
4
4
|
|
5
5
|
module Workbook
|
6
|
+
# A table is a container of rows and keeps track of the sheet it belongs to and which row is its header. Additionally suport for CSV writing and diffing with another table is included.
|
6
7
|
class Table < Array
|
7
8
|
include Workbook::Modules::TableDiffSort
|
8
9
|
include Workbook::Writers::CsvTableWriter
|
@@ -10,7 +11,6 @@ module Workbook
|
|
10
11
|
attr_accessor :header
|
11
12
|
|
12
13
|
def initialize row_cel_values=[], sheet=nil, options={}
|
13
|
-
#@rows = []
|
14
14
|
row_cel_values = [] if row_cel_values == nil
|
15
15
|
row_cel_values.each do |r|
|
16
16
|
if r.is_a? Workbook::Row
|
@@ -57,6 +57,16 @@ module Workbook
|
|
57
57
|
self
|
58
58
|
end
|
59
59
|
|
60
|
+
def push(row)
|
61
|
+
super(row)
|
62
|
+
row.set_table(self)
|
63
|
+
end
|
64
|
+
|
65
|
+
def <<(row)
|
66
|
+
super(row)
|
67
|
+
row.set_table(self)
|
68
|
+
end
|
69
|
+
|
60
70
|
def has_contents?
|
61
71
|
self.clone.remove_empty_lines!.count != 0
|
62
72
|
end
|
@@ -66,5 +76,14 @@ module Workbook
|
|
66
76
|
self.collect{|r| r.object_id}.include? row.object_id
|
67
77
|
end
|
68
78
|
|
79
|
+
def sheet
|
80
|
+
if @sheet
|
81
|
+
return @sheet
|
82
|
+
else
|
83
|
+
self.sheet = Workbook::Sheet.new(self)
|
84
|
+
return @sheet
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
69
88
|
end
|
70
89
|
end
|