xsv 0.2.2 → 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 +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +5 -0
- data/lib/xsv/helpers.rb +14 -0
- data/lib/xsv/sheet.rb +6 -15
- data/lib/xsv/version.rb +1 -1
- data/lib/xsv/workbook.rb +9 -3
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9493c51a049db036f7fcfacbdf911d69255008cb15fd4853eafd12a6d9eeaaf1
|
|
4
|
+
data.tar.gz: '008dfbfa456e9a07e7e301290388a23bb18e3e61f79ce480e5cff5f8b050253f'
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 154e166f904d5c964d44ad7886d8b5dbc350073d8c01b22f6490c1bf65ec376e06474b249f781314deb3541ee14bbb103e3acd096938bd1b7d8bb118b94b1ab1
|
|
7
|
+
data.tar.gz: ac24357f40b3aba550668a4d2ba4be75625751868f180a07b981dc931fcf28c2a714eac72443d123dd0a22ac28e1e6c67e56ca3423eb89a716b4e78b7ce8de59
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
|
@@ -68,6 +68,11 @@ sheet[1] # => {"header1" => "value1", "header2" => "value2"}
|
|
|
68
68
|
Be aware that hash mode will lead to unpredictable results if you have multiple
|
|
69
69
|
columns with the same name!
|
|
70
70
|
|
|
71
|
+
`Xsv::Workbook.open` accepts a filename, or a IO or String containing a workbook.
|
|
72
|
+
|
|
73
|
+
`Xsv::Sheet` implements `Enumerable` so you can call methods like `#first`,
|
|
74
|
+
`#filter` and `#map` on it.
|
|
75
|
+
|
|
71
76
|
### Assumptions
|
|
72
77
|
|
|
73
78
|
Since Xsv treats worksheets like csv files it makes certain assumptions about your
|
data/lib/xsv/helpers.rb
CHANGED
|
@@ -96,6 +96,20 @@ module Xsv
|
|
|
96
96
|
end
|
|
97
97
|
end
|
|
98
98
|
|
|
99
|
+
def parse_number_format(number, format)
|
|
100
|
+
number = parse_number(number) if number.is_a?(String)
|
|
101
|
+
|
|
102
|
+
if is_datetime_format?(format)
|
|
103
|
+
parse_datetime(number)
|
|
104
|
+
elsif is_date_format?(format)
|
|
105
|
+
parse_date(number)
|
|
106
|
+
elsif is_time_format?(format)
|
|
107
|
+
parse_time(number)
|
|
108
|
+
else
|
|
109
|
+
number
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
99
113
|
# Tests if the given format string includes both date and time
|
|
100
114
|
def is_datetime_format?(format)
|
|
101
115
|
is_date_format?(format) && is_time_format?(format)
|
data/lib/xsv/sheet.rb
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
module Xsv
|
|
2
2
|
class Sheet
|
|
3
|
+
include Enumerable
|
|
3
4
|
include Xsv::Helpers
|
|
4
5
|
|
|
5
6
|
attr_reader :xml, :mode
|
|
@@ -57,6 +58,8 @@ module Xsv
|
|
|
57
58
|
true
|
|
58
59
|
end
|
|
59
60
|
|
|
61
|
+
alias each each_row
|
|
62
|
+
|
|
60
63
|
# Get row by number, starting at 0
|
|
61
64
|
def [](number)
|
|
62
65
|
row_xml = xml.at_css("sheetData row[r=#{number + @row_skip + 1}]")
|
|
@@ -118,22 +121,10 @@ module Xsv
|
|
|
118
121
|
if v.nil?
|
|
119
122
|
nil
|
|
120
123
|
elsif c_xml["s"]
|
|
121
|
-
value = parse_number(v.inner_text)
|
|
122
|
-
|
|
123
124
|
style = @workbook.xfs[c_xml["s"].to_i]
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
value
|
|
128
|
-
elsif is_datetime_format?(numFmt)
|
|
129
|
-
parse_datetime(value)
|
|
130
|
-
elsif is_date_format?(numFmt)
|
|
131
|
-
parse_date(value)
|
|
132
|
-
elsif is_time_format?(numFmt)
|
|
133
|
-
parse_time(value)
|
|
134
|
-
else
|
|
135
|
-
value
|
|
136
|
-
end
|
|
125
|
+
numFmt = @workbook.numFmts[style[:numFmtId].to_i]
|
|
126
|
+
|
|
127
|
+
parse_number_format(v.inner_text, numFmt)
|
|
137
128
|
else
|
|
138
129
|
parse_number(v.inner_text)
|
|
139
130
|
end
|
data/lib/xsv/version.rb
CHANGED
data/lib/xsv/workbook.rb
CHANGED
|
@@ -6,9 +6,15 @@ module Xsv
|
|
|
6
6
|
|
|
7
7
|
attr_reader :sheets, :shared_strings, :xfs, :numFmts
|
|
8
8
|
|
|
9
|
-
# Open the workbook of the given filename
|
|
10
|
-
def self.open(
|
|
11
|
-
|
|
9
|
+
# Open the workbook of the given filename, string or buffer
|
|
10
|
+
def self.open(data)
|
|
11
|
+
if data.is_a?(IO)
|
|
12
|
+
@workbook = self.new(Zip::File.open_buffer(data))
|
|
13
|
+
elsif data.start_with?("PK\x03\x04")
|
|
14
|
+
@workbook = self.new(Zip::File.open_buffer(data))
|
|
15
|
+
else
|
|
16
|
+
@workbook = self.new(Zip::File.open(data))
|
|
17
|
+
end
|
|
12
18
|
end
|
|
13
19
|
|
|
14
20
|
# Open a workbook from an instance of Zip::File
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: xsv
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Martijn Storck
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2020-02-
|
|
11
|
+
date: 2020-02-22 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rubyzip
|