creek 2.3 → 2.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +10 -2
- data/lib/creek/sheet.rb +23 -12
- data/lib/creek/version.rb +1 -1
- data/spec/test_spec.rb +24 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bee3cecfd77048fd524de90b3c59d844295ac470
|
4
|
+
data.tar.gz: ea3765e651c0657920c714da61492afce161dcf4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 02de0c9ccc20d4489f66fcef6468e06adfba44320e0ccaf08091827706c53331d32fa641736a904c677e55e46c9ddde61894278eb63264d3567a551f4409fba1
|
7
|
+
data.tar.gz: '009e354166eba703d3ecd49dbc9b48114d612cd093a6904eb75fe42136016dfe3738f6229c910cd1565cc15e3cc26fbd772626b97ebf22904d59fe5c9ce14a3f'
|
data/README.md
CHANGED
@@ -26,11 +26,19 @@ creek = Creek::Book.new 'spec/fixtures/sample.xlsx'
|
|
26
26
|
sheet = creek.sheets[0]
|
27
27
|
|
28
28
|
sheet.rows.each do |row|
|
29
|
-
puts row # => {"A1"=>"Content 1", "B1"=>nil, C1"=>nil, "D1"=>"Content 3"}
|
29
|
+
puts row # => {"A1"=>"Content 1", "B1"=>nil, "C1"=>nil, "D1"=>"Content 3"}
|
30
|
+
end
|
31
|
+
|
32
|
+
sheet.simple_rows.each do |row|
|
33
|
+
puts row # => {"A"=>"Content 1", "B"=>nil, "C"=>nil, "D"=>"Content 3"}
|
30
34
|
end
|
31
35
|
|
32
36
|
sheet.rows_with_meta_data.each do |row|
|
33
|
-
puts row # => {"collapsed"=>"false", "customFormat"=>"false", "customHeight"=>"true", "hidden"=>"false", "ht"=>"12.1", "outlineLevel"=>"0", "r"=>"1", "cells"=>{"A1"=>"Content 1", "B1"=>nil, C1"=>nil, "D1"=>"Content 3"}}
|
37
|
+
puts row # => {"collapsed"=>"false", "customFormat"=>"false", "customHeight"=>"true", "hidden"=>"false", "ht"=>"12.1", "outlineLevel"=>"0", "r"=>"1", "cells"=>{"A1"=>"Content 1", "B1"=>nil, "C1"=>nil, "D1"=>"Content 3"}}
|
38
|
+
end
|
39
|
+
|
40
|
+
sheet.simple_rows_with_meta_data.each do |row|
|
41
|
+
puts row # => {"collapsed"=>"false", "customFormat"=>"false", "customHeight"=>"true", "hidden"=>"false", "ht"=>"12.1", "outlineLevel"=>"0", "r"=>"1", "cells"=>{"A"=>"Content 1", "B"=>nil, "C"=>nil, "D"=>"Content 3"}}
|
34
42
|
end
|
35
43
|
|
36
44
|
sheet.state # => 'visible'
|
data/lib/creek/sheet.rb
CHANGED
@@ -46,18 +46,33 @@ module Creek
|
|
46
46
|
@drawing.images_at(cell) if @images_present
|
47
47
|
end
|
48
48
|
|
49
|
+
|
50
|
+
##
|
51
|
+
# Provides an Enumerator that returns a hash representing each row.
|
52
|
+
# The key of the hash is the column ID and the value is the value of the cell.
|
53
|
+
def simple_rows
|
54
|
+
rows_generator false, true
|
55
|
+
end
|
56
|
+
|
49
57
|
##
|
50
58
|
# Provides an Enumerator that returns a hash representing each row.
|
51
59
|
# The key of the hash is the Cell id and the value is the value of the cell.
|
52
60
|
def rows
|
53
|
-
rows_generator
|
61
|
+
rows_generator false, false
|
54
62
|
end
|
55
63
|
|
56
64
|
##
|
57
65
|
# Provides an Enumerator that returns a hash representing each row.
|
58
66
|
# The hash contains meta data of the row and a 'cells' embended hash which contains the cell contents.
|
59
67
|
def rows_with_meta_data
|
60
|
-
rows_generator true
|
68
|
+
rows_generator true, false
|
69
|
+
end
|
70
|
+
|
71
|
+
##
|
72
|
+
# Provides an Enumerator that returns a hash representing each row.
|
73
|
+
# The hash contains meta data of the row and a 'cells' embended hash which contains the cell contents.
|
74
|
+
def simple_rows_with_meta_data
|
75
|
+
rows_generator true, true
|
61
76
|
end
|
62
77
|
|
63
78
|
private
|
@@ -65,7 +80,7 @@ module Creek
|
|
65
80
|
##
|
66
81
|
# Returns a hash per row that includes the cell ids and values.
|
67
82
|
# Empty cells will be also included in the hash with a nil value.
|
68
|
-
def rows_generator include_meta_data=false
|
83
|
+
def rows_generator include_meta_data=false, use_simple_rows_format=false
|
69
84
|
path = if @sheetfile.start_with? "/xl/" or @sheetfile.start_with? "xl/" then @sheetfile else "xl/#{@sheetfile}" end
|
70
85
|
if @book.files.file.exist?(path)
|
71
86
|
# SAX parsing, Each element in the stream comes through as two events:
|
@@ -84,7 +99,7 @@ module Creek
|
|
84
99
|
cells = Hash.new
|
85
100
|
y << (include_meta_data ? row : cells) if node.self_closing?
|
86
101
|
elsif (node.name.eql? 'row') and (node.node_type.eql? closer)
|
87
|
-
processed_cells = fill_in_empty_cells(cells, row['r'], cell)
|
102
|
+
processed_cells = fill_in_empty_cells(cells, row['r'], cell, use_simple_rows_format)
|
88
103
|
|
89
104
|
if @images_present
|
90
105
|
processed_cells.each do |cell_name, cell_value|
|
@@ -99,13 +114,9 @@ module Creek
|
|
99
114
|
cell_type = node.attributes['t']
|
100
115
|
cell_style_idx = node.attributes['s']
|
101
116
|
cell = node.attributes['r']
|
102
|
-
elsif (node.name
|
103
|
-
unless cell.nil?
|
104
|
-
cells[cell] = convert(node.inner_xml, cell_type, cell_style_idx)
|
105
|
-
end
|
106
|
-
elsif (node.name.eql? 't') and (node.node_type.eql? opener)
|
117
|
+
elsif (['v', 't'].include? node.name) and (node.node_type.eql? opener)
|
107
118
|
unless cell.nil?
|
108
|
-
cells[cell] = convert(node.inner_xml, cell_type, cell_style_idx)
|
119
|
+
cells[(use_simple_rows_format ? cell.tr("0-9", "") : cell)] = convert(node.inner_xml, cell_type, cell_style_idx)
|
109
120
|
end
|
110
121
|
end
|
111
122
|
end
|
@@ -129,14 +140,14 @@ module Creek
|
|
129
140
|
##
|
130
141
|
# The unzipped XML file does not contain any node for empty cells.
|
131
142
|
# Empty cells are being padded in using this function
|
132
|
-
def fill_in_empty_cells(cells, row_number, last_col)
|
143
|
+
def fill_in_empty_cells(cells, row_number, last_col, use_simple_rows_format)
|
133
144
|
new_cells = Hash.new
|
134
145
|
|
135
146
|
unless cells.empty?
|
136
147
|
last_col = last_col.gsub(row_number, '')
|
137
148
|
|
138
149
|
("A"..last_col).to_a.each do |column|
|
139
|
-
id = "#{column}#{row_number}"
|
150
|
+
id = use_simple_rows_format ? "#{column}" : "#{column}#{row_number}"
|
140
151
|
new_cells[id] = cells[id]
|
141
152
|
end
|
142
153
|
end
|
data/lib/creek/version.rb
CHANGED
data/spec/test_spec.rb
CHANGED
@@ -65,6 +65,16 @@ describe 'Creek parsing a sample XLSX file' do
|
|
65
65
|
{'A6'=>'1', 'B6'=>'2', 'C6'=>'3'}, {'A7'=>'Content 15', 'B7'=>'Content 16', 'C7'=>'Content 18', 'D7'=>'Content 19'},
|
66
66
|
{'A8'=>nil, 'B8'=>'Content 20', 'C8'=>nil, 'D8'=>nil, 'E8'=>nil, 'F8'=>'Content 21'},
|
67
67
|
{'A10' => 0.15, 'B10' => 0.15}]
|
68
|
+
|
69
|
+
@expected_simple_rows = [{"A"=>"Content 1", "B"=>nil, "C"=>"Content 2", "D"=>nil, "E"=>"Content 3"},
|
70
|
+
{"A"=>nil, "B"=>"Content 4", "C"=>nil, "D"=>"Content 5", "E"=>nil, "F"=>"Content 6"},
|
71
|
+
{},
|
72
|
+
{"A"=>"Content 7", "B"=>"Content 8", "C"=>"Content 9", "D"=>"Content 10", "E"=>"Content 11", "F"=>"Content 12"},
|
73
|
+
{"A"=>nil, "B"=>nil, "C"=>nil, "D"=>nil, "E"=>nil, "F"=>nil, "G"=>nil, "H"=>nil, "I"=>nil, "J"=>nil, "K"=>nil, "L"=>nil, "M"=>nil, "N"=>nil, "O"=>nil, "P"=>nil, "Q"=>nil, "R"=>nil, "S"=>nil, "T"=>nil, "U"=>nil, "V"=>nil, "W"=>nil, "X"=>nil, "Y"=>nil, "Z"=>"Z Content", "AA"=>nil, "AB"=>nil, "AC"=>nil, "AD"=>nil, "AE"=>nil, "AF"=>nil, "AG"=>nil, "AH"=>nil, "AI"=>nil, "AJ"=>nil, "AK"=>nil, "AL"=>nil, "AM"=>nil, "AN"=>nil, "AO"=>nil, "AP"=>nil, "AQ"=>nil, "AR"=>nil, "AS"=>nil, "AT"=>nil, "AU"=>nil, "AV"=>nil, "AW"=>nil, "AX"=>nil, "AY"=>nil, "AZ"=>"Content 13"},
|
74
|
+
{"A"=>"1", "B"=>"2", "C"=>"3"},
|
75
|
+
{"A"=>"Content 15", "B"=>"Content 16", "C"=>"Content 18", "D"=>"Content 19"},
|
76
|
+
{"A"=>nil, "B"=>"Content 20", "C"=>nil, "D"=>nil, "E"=>nil, "F"=>"Content 21"},
|
77
|
+
{"A"=>0.15, "B"=>0.15}]
|
68
78
|
end
|
69
79
|
|
70
80
|
after(:all) do
|
@@ -83,6 +93,20 @@ describe 'Creek parsing a sample XLSX file' do
|
|
83
93
|
expect(sheet.rid).to eql 'rId1'
|
84
94
|
end
|
85
95
|
|
96
|
+
it 'Parse simple rows successfully.' do
|
97
|
+
rows = Array.new
|
98
|
+
row_count = 0
|
99
|
+
@creek.sheets[0].simple_rows.each do |row|
|
100
|
+
rows << row
|
101
|
+
row_count += 1
|
102
|
+
end
|
103
|
+
(0..8).each do |number|
|
104
|
+
expect(rows[number]).to eq(@expected_simple_rows[number])
|
105
|
+
end
|
106
|
+
expect(row_count).to eq(9)
|
107
|
+
end
|
108
|
+
|
109
|
+
|
86
110
|
it 'Parse rows with empty cells successfully.' do
|
87
111
|
rows = Array.new
|
88
112
|
row_count = 0
|