simple_xlsx_reader 0.9.0 → 0.9.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/CHANGELOG.md +8 -0
- data/README.md +4 -0
- data/lib/simple_xlsx_reader.rb +19 -5
- data/lib/simple_xlsx_reader/version.rb +1 -1
- data/test/simple_xlsx_reader_test.rb +43 -1
- metadata +3 -2
data/CHANGELOG.md
ADDED
data/README.md
CHANGED
data/lib/simple_xlsx_reader.rb
CHANGED
@@ -109,23 +109,35 @@ module SimpleXlsxReader
|
|
109
109
|
def parse_sheet(sheet_name, xsheet)
|
110
110
|
sheet = Sheet.new(sheet_name)
|
111
111
|
|
112
|
+
last_column = xsheet.xpath('/xmlns:worksheet/xmlns:dimension').first.
|
113
|
+
attributes['ref'].value.match(/:([A-Z]*)[1-9]*/).captures.first
|
114
|
+
|
112
115
|
rownum = -1
|
113
116
|
sheet.rows =
|
114
117
|
xsheet.xpath("/xmlns:worksheet/xmlns:sheetData/xmlns:row").map do |xrow|
|
115
118
|
rownum += 1
|
116
119
|
|
117
|
-
|
118
|
-
|
120
|
+
colname = nil
|
121
|
+
colnum = -1
|
122
|
+
cells = []
|
123
|
+
while(colname != last_column) do
|
124
|
+
colname ? colname.next! : colname = 'A'
|
119
125
|
colnum += 1
|
120
126
|
|
127
|
+
xcell = xrow.xpath(
|
128
|
+
%(xmlns:c[@r="#{colname + (rownum + 1).to_s}"])).first
|
129
|
+
|
130
|
+
# empty 'General' columns might not be in the xml
|
131
|
+
next cells << nil if xcell.nil?
|
132
|
+
|
121
133
|
type = xcell.attributes['t'] &&
|
122
134
|
xcell.attributes['t'].value
|
123
135
|
# If not the above, attempt to determine from a custom style
|
124
136
|
type ||= xcell.attributes['s'] &&
|
125
137
|
style_types[xcell.attributes['s'].value.to_i]
|
126
138
|
|
127
|
-
begin
|
128
|
-
self.class.cast(xcell.text, type, shared_strings: shared_strings)
|
139
|
+
cells << begin
|
140
|
+
self.class.cast(xcell.text.strip, type, shared_strings: shared_strings)
|
129
141
|
rescue => e
|
130
142
|
if !SimpleXlsxReader.configuration.catch_cell_load_errors
|
131
143
|
error = CellLoadError.new(
|
@@ -135,10 +147,12 @@ module SimpleXlsxReader
|
|
135
147
|
else
|
136
148
|
sheet.load_errors[[rownum, colnum]] = e.message
|
137
149
|
|
138
|
-
xcell.text
|
150
|
+
xcell.text.strip
|
139
151
|
end
|
140
152
|
end
|
141
153
|
end
|
154
|
+
|
155
|
+
cells
|
142
156
|
end
|
143
157
|
|
144
158
|
sheet
|
@@ -66,9 +66,10 @@ describe SimpleXlsxReader do
|
|
66
66
|
xml.sheets = [Nokogiri::XML(
|
67
67
|
<<-XML
|
68
68
|
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
|
69
|
+
<dimension ref="A1:A1" />
|
69
70
|
<sheetData>
|
70
71
|
<row>
|
71
|
-
<c s='0'>
|
72
|
+
<c r='A1' s='0'>
|
72
73
|
<v>14 is a date style; this is not a date</v>
|
73
74
|
</c>
|
74
75
|
</row>
|
@@ -104,5 +105,46 @@ describe SimpleXlsxReader do
|
|
104
105
|
sheet.load_errors[[0,0]].must_include 'invalid value for Integer'
|
105
106
|
end
|
106
107
|
end
|
108
|
+
|
109
|
+
describe 'empty "Generic" cells' do
|
110
|
+
let(:xml) do
|
111
|
+
SimpleXlsxReader::Document::Xml.new.tap do |xml|
|
112
|
+
xml.sheets = [Nokogiri::XML(
|
113
|
+
<<-XML
|
114
|
+
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
|
115
|
+
<dimension ref="A1:C1" />
|
116
|
+
<sheetData>
|
117
|
+
<row>
|
118
|
+
<c r='A1' s='0'>
|
119
|
+
<v>Cell A</v>
|
120
|
+
</c>
|
121
|
+
<c r='C1' s='0'>
|
122
|
+
<v>Cell C</v>
|
123
|
+
</c>
|
124
|
+
</row>
|
125
|
+
</sheetData>
|
126
|
+
</worksheet>
|
127
|
+
XML
|
128
|
+
)]
|
129
|
+
|
130
|
+
# s='0' above refers to the value of numFmtId at cellXfs index 0,
|
131
|
+
# which is in this case 'General' type
|
132
|
+
xml.styles = Nokogiri::XML(
|
133
|
+
<<-XML
|
134
|
+
<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
|
135
|
+
<cellXfs count="1">
|
136
|
+
<xf numFmtId="0" />
|
137
|
+
</cellXfs>
|
138
|
+
</styleSheet>
|
139
|
+
XML
|
140
|
+
)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
it 'get parsed as nil' do
|
145
|
+
described_class.new(xml).parse_sheet('test', xml.sheets.first).
|
146
|
+
rows.must_equal [['Cell A', nil, 'Cell C']]
|
147
|
+
end
|
148
|
+
end
|
107
149
|
end
|
108
150
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_xlsx_reader
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-01-
|
12
|
+
date: 2013-01-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
@@ -67,6 +67,7 @@ extensions: []
|
|
67
67
|
extra_rdoc_files: []
|
68
68
|
files:
|
69
69
|
- .gitignore
|
70
|
+
- CHANGELOG.md
|
70
71
|
- Gemfile
|
71
72
|
- LICENSE.txt
|
72
73
|
- README.md
|