excel-esv 2.0.0 → 3.0.0
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/CHANGELOG.md +5 -0
- data/README.md +4 -2
- data/lib/esv.rb +9 -1
- data/lib/esv/version.rb +1 -1
- data/spec/esv_spec.rb +55 -11
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '091fb26ba128c0aa7edfb4626b5352932f5cd687'
|
4
|
+
data.tar.gz: 19a2ce71dff87da35950c2565c4e3f14356ccf7e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f5d61d2edd87c497fe58009ee373becca121ba5bbba4da5af46dbc2974bfede3a8f54c7d2cb25c60511c9557e12dfdb1d8912c2fb305e600c1951b4982154b19
|
7
|
+
data.tar.gz: d16b94bce839a3962cde843c50af7047c142a4c4f8f23d991a657ed6cd603dbfb799a162fe6c095048ded07c10ac0a6675f378f83f584f3a82b64d02e10731b9
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
# 3.0.0
|
2
|
+
|
3
|
+
* Returns the last value of any formula cells instead of returning a `Spreadsheet::Formula`.
|
4
|
+
* Returns the URL of any link cells instead of returning a `Spreadsheet::Link`.
|
5
|
+
|
1
6
|
# 2.0.0
|
2
7
|
|
3
8
|
* `parse` now returns an actual nested `Array`, not array-like `Spreadsheet::Row` records.
|
data/README.md
CHANGED
@@ -2,9 +2,11 @@
|
|
2
2
|
|
3
3
|
Ruby library/gem for Excel parsing and generation with the ease of CSV.
|
4
4
|
|
5
|
-
Exporting CSVs because Excel generation is too complex? No more!
|
5
|
+
Exporting CSVs because Excel generation is too complex? No more! CSVs can also be difficult to open correctly, e.g. in Excel on Mac.
|
6
6
|
|
7
|
-
|
7
|
+
ESV will read and generate XLS files. There is currently no XLSX support, but Pull Requests are welcome.
|
8
|
+
|
9
|
+
By design, ESV only reads and writes simple values like integers, floats, strings and dates/datetimes. When parsing a spreadsheet with formulas, you will get their last value, if known.
|
8
10
|
|
9
11
|
|
10
12
|
## Usage
|
data/lib/esv.rb
CHANGED
@@ -25,7 +25,15 @@ module ESV
|
|
25
25
|
worksheet_count = book.worksheets.length
|
26
26
|
raise "Expected 1 worksheet, found #{worksheet_count}." if worksheet_count > 1
|
27
27
|
|
28
|
-
book.worksheet(0).to_a.map(&:to_a)
|
28
|
+
book.worksheet(0).to_a.map(&:to_a).map { |row|
|
29
|
+
row.map { |cell|
|
30
|
+
case cell
|
31
|
+
when Spreadsheet::Formula then cell.value
|
32
|
+
when Spreadsheet::Link then cell.href
|
33
|
+
else cell
|
34
|
+
end
|
35
|
+
}
|
36
|
+
}
|
29
37
|
end
|
30
38
|
|
31
39
|
def self.parse_file(path)
|
data/lib/esv/version.rb
CHANGED
data/spec/esv_spec.rb
CHANGED
@@ -23,7 +23,7 @@ describe ESV, ".parse" do
|
|
23
23
|
}.to raise_error(/Expected 1 worksheet, found 2/)
|
24
24
|
end
|
25
25
|
|
26
|
-
it "ignores formatting" do
|
26
|
+
it "ignores formatting, always returning a plain array of data" do
|
27
27
|
output = ESV.parse(excel_file_with_formatting([1, 2]))
|
28
28
|
expect(output).to eq [
|
29
29
|
[ 1, 2 ],
|
@@ -32,24 +32,68 @@ describe ESV, ".parse" do
|
|
32
32
|
expect(output[0].class).to eq Array
|
33
33
|
end
|
34
34
|
|
35
|
+
it "returns the last value of a formula cell" do
|
36
|
+
output = ESV.parse(excel_file_with_formula)
|
37
|
+
expect(output).to eq [
|
38
|
+
[ "one", "two" ],
|
39
|
+
]
|
40
|
+
|
41
|
+
expect(output[0].class).to eq Array
|
42
|
+
end
|
43
|
+
|
44
|
+
it "returns the last value of a formula cell" do
|
45
|
+
output = ESV.parse(excel_file_with_formula)
|
46
|
+
expect(output).to eq [
|
47
|
+
[ "one", "two" ],
|
48
|
+
]
|
49
|
+
|
50
|
+
expect(output[0].class).to eq Array
|
51
|
+
end
|
52
|
+
|
53
|
+
it "returns the URL of a link cell" do
|
54
|
+
output = ESV.parse(excel_file_with_link("https://example.com"))
|
55
|
+
expect(output).to eq [
|
56
|
+
[ "one", "https://example.com" ],
|
57
|
+
]
|
58
|
+
|
59
|
+
expect(output[0][1].class).to eq String
|
60
|
+
end
|
61
|
+
|
35
62
|
private
|
36
63
|
|
37
64
|
def excel_file_with_two_worksheets
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
data = ""
|
43
|
-
fake_file = StringIO.new(data)
|
44
|
-
book.write(fake_file)
|
45
|
-
data
|
65
|
+
excel_file do |sheet, book|
|
66
|
+
book.create_worksheet
|
67
|
+
end
|
46
68
|
end
|
47
69
|
|
48
70
|
def excel_file_with_formatting(data)
|
71
|
+
excel_file do |sheet|
|
72
|
+
sheet.row(0).replace(data)
|
73
|
+
sheet.row(0).default_format = Spreadsheet::Format.new(color: :blue)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def excel_file_with_formula
|
78
|
+
excel_file do |sheet|
|
79
|
+
formula = Spreadsheet::Formula.new
|
80
|
+
formula.value = "two"
|
81
|
+
sheet.row(0).replace([ "one", formula ])
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def excel_file_with_link(url)
|
86
|
+
excel_file do |sheet|
|
87
|
+
link = Spreadsheet::Link.new(url)
|
88
|
+
sheet.row(0).replace([ "one", link ])
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def excel_file(&block)
|
49
93
|
book = Spreadsheet::Workbook.new
|
50
94
|
sheet = book.create_worksheet
|
51
|
-
|
52
|
-
|
95
|
+
|
96
|
+
block.call(sheet, book)
|
53
97
|
|
54
98
|
data = ""
|
55
99
|
fake_file = StringIO.new(data)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: excel-esv
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Henrik Nyh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-11-
|
11
|
+
date: 2018-11-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: spreadsheet
|