creek 2.3 → 2.4
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 +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
|