xlsx-DSL 0.2.3 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/xlsx/DSL/version.rb +1 -1
- data/lib/xlsx/DSL.rb +1 -0
- data/lib/xlsx/parser.rb +17 -14
- data/lib/xlsx/parser_helper.rb +7 -0
- data/lib/xlsx/shared_string.rb +9 -1
- data/lib/xlsx/sheet.rb +14 -4
- data/lib/xlsx/sheet_data.rb +2 -2
- data/lib/xlsx/workbook.rb +14 -10
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c314c67097a8eea0664778863993d6bf29b0baf9ac968d2e89de1a3ba2ce01df
|
4
|
+
data.tar.gz: 6a9517d877d3438587ee3531993da82442ecda5d22716f06454659209f750bbc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bc018aad5627bbd53fab5038d1814dad06e195ed6d163b9ad026185018ab2e659de5450aadc9d9e0057873052702029fb0efc235edabf75c355523d7887934f0
|
7
|
+
data.tar.gz: f371514e2388a66519c22ade8ea4f9d92bb6035b044e8751913acb1727d5b48e8408556e39bd4dd8d0d14338c4c2d3aede98c1a76d3e0488e5e1c017ada16fab
|
data/lib/xlsx/DSL/version.rb
CHANGED
data/lib/xlsx/DSL.rb
CHANGED
data/lib/xlsx/parser.rb
CHANGED
@@ -1,10 +1,9 @@
|
|
1
1
|
module OpenXML
|
2
2
|
module SpreadsheetML
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
def open(xlsx_path)
|
3
|
+
class Workbook
|
4
|
+
def initialize xlsx_path
|
5
|
+
@sheets = []
|
6
|
+
@shared_strings = nil
|
8
7
|
Zip::File.open(xlsx_path) do |zf|
|
9
8
|
zf.each do |entry|
|
10
9
|
content = entry.get_input_stream.read
|
@@ -18,23 +17,27 @@ module OpenXML
|
|
18
17
|
end
|
19
18
|
end
|
20
19
|
end
|
21
|
-
|
22
|
-
|
23
|
-
|
20
|
+
merge_sheets(@sheet_names) if @sheet_names
|
21
|
+
merge_shared_strings(@shared_strings) if @shared_strings
|
22
|
+
yield(self) if block_given?
|
23
|
+
end
|
24
|
+
|
25
|
+
class << self
|
26
|
+
alias open new
|
24
27
|
end
|
25
28
|
|
26
29
|
private
|
27
|
-
|
30
|
+
|
28
31
|
def workbook_parser content
|
29
|
-
|
32
|
+
parser content
|
30
33
|
end
|
31
|
-
|
34
|
+
|
32
35
|
def shared_strings_parser content
|
33
|
-
|
36
|
+
@shared_strings = SharedString.parser content || []
|
34
37
|
end
|
35
|
-
|
38
|
+
|
36
39
|
def sheet_parser content
|
37
|
-
|
40
|
+
@sheets << Sheet.parser(content)
|
38
41
|
end
|
39
42
|
end
|
40
43
|
end
|
data/lib/xlsx/shared_string.rb
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
module OpenXML
|
2
2
|
module SpreadsheetML
|
3
3
|
class SharedString
|
4
|
+
def initialize values # values is an array
|
5
|
+
@values = values
|
6
|
+
end
|
7
|
+
|
8
|
+
def [] index
|
9
|
+
@values[index]
|
10
|
+
end
|
11
|
+
|
4
12
|
def self.parser content
|
5
13
|
values = []
|
6
14
|
doc = Nokogiri::XML content
|
@@ -8,7 +16,7 @@ module OpenXML
|
|
8
16
|
t_tags.each do |t|
|
9
17
|
values << t.text
|
10
18
|
end
|
11
|
-
values
|
19
|
+
SharedString.new values
|
12
20
|
end
|
13
21
|
end
|
14
22
|
end
|
data/lib/xlsx/sheet.rb
CHANGED
@@ -1,12 +1,16 @@
|
|
1
1
|
module OpenXML
|
2
2
|
module SpreadsheetML
|
3
|
-
Sheet = Struct.new(
|
4
|
-
:dimension, :sheet_data, :merge_cells, :sheet_views,
|
5
|
-
:name, :sheetId, :rid
|
6
|
-
)
|
7
3
|
MergeCell = Struct.new(:range)
|
8
4
|
|
9
5
|
class Sheet
|
6
|
+
attr_accessor :dimension, :sheet_data, :merge_cells, :sheet_views, :name, :sheetId, :rid
|
7
|
+
|
8
|
+
def initialize dimension = nil, sheet_data = nil, merge_cells = nil
|
9
|
+
@dimension = dimension
|
10
|
+
@sheet_data = sheet_data || {}
|
11
|
+
@merge_cells = merge_cells || {}
|
12
|
+
end
|
13
|
+
|
10
14
|
def + sheet
|
11
15
|
self.dimension = self.dimension || sheet.dimension
|
12
16
|
self.sheet_data = self.sheet_data || sheet.sheet_data
|
@@ -78,6 +82,12 @@ module OpenXML
|
|
78
82
|
/[A-Z]+(\d+)$/.match(dimension)[1]
|
79
83
|
end
|
80
84
|
|
85
|
+
def merge_shared_strings shared_strings_reference
|
86
|
+
self.sheet_data.each do |index, cell|
|
87
|
+
cell.shared_strings_pointer = shared_strings_reference
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
81
91
|
private
|
82
92
|
|
83
93
|
def retrieve_one_cell index
|
data/lib/xlsx/sheet_data.rb
CHANGED
@@ -2,11 +2,11 @@ module OpenXML
|
|
2
2
|
module SpreadsheetML
|
3
3
|
SheetData = Struct.new(:rows)
|
4
4
|
Row = Struct.new(:index, :columns)
|
5
|
-
Cell = Struct.new(:type, :v, :formula)
|
5
|
+
Cell = Struct.new(:type, :v, :formula, :shared_strings_pointer)
|
6
6
|
|
7
7
|
class Cell
|
8
8
|
def value
|
9
|
-
return
|
9
|
+
return shared_strings_pointer[self.v.to_i] if self.type == 's'
|
10
10
|
self.v
|
11
11
|
end
|
12
12
|
end
|
data/lib/xlsx/workbook.rb
CHANGED
@@ -1,11 +1,8 @@
|
|
1
1
|
module OpenXML
|
2
2
|
module SpreadsheetML
|
3
|
-
Workbook = Struct.new(
|
4
|
-
:sheets, :theme, :styles, :calc_chain,
|
5
|
-
:xml_maps
|
6
|
-
)
|
7
|
-
|
8
3
|
class Workbook
|
4
|
+
attr_accessor :sheets, :theme, :styles, :calc_chain, :xml_maps
|
5
|
+
|
9
6
|
def [] index
|
10
7
|
self.sheets.each do |sheet|
|
11
8
|
return sheet if sheet.name == index
|
@@ -18,12 +15,20 @@ module OpenXML
|
|
18
15
|
self.sheets.zip(sheets) do |x, y|
|
19
16
|
new_sheets << x + y
|
20
17
|
end
|
21
|
-
|
18
|
+
sheets = new_sheets
|
22
19
|
self
|
23
20
|
end
|
24
21
|
|
25
|
-
def
|
26
|
-
sheets
|
22
|
+
def merge_shared_strings shared_strings_reference
|
23
|
+
sheets.each do |sheet|
|
24
|
+
sheet.merge_shared_strings shared_strings_reference
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def parser content
|
31
|
+
@sheet_names = []
|
27
32
|
doc = Nokogiri::XML content
|
28
33
|
sheet_tags = doc.css('sheet')
|
29
34
|
sheet_tags.each do |s|
|
@@ -31,9 +36,8 @@ module OpenXML
|
|
31
36
|
sheet.name = s[:name]
|
32
37
|
sheet.sheetId = s[:sheetId]
|
33
38
|
sheet.rid = s['r:id']
|
34
|
-
|
39
|
+
@sheet_names << sheet
|
35
40
|
end
|
36
|
-
Workbook.new(sheets = sheets)
|
37
41
|
end
|
38
42
|
end
|
39
43
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xlsx-DSL
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cyan Yan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-02-
|
11
|
+
date: 2023-02-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -61,6 +61,7 @@ files:
|
|
61
61
|
- lib/xlsx/DSL.rb
|
62
62
|
- lib/xlsx/DSL/version.rb
|
63
63
|
- lib/xlsx/parser.rb
|
64
|
+
- lib/xlsx/parser_helper.rb
|
64
65
|
- lib/xlsx/shared_string.rb
|
65
66
|
- lib/xlsx/sheet.rb
|
66
67
|
- lib/xlsx/sheet_data.rb
|
@@ -77,7 +78,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
77
78
|
requirements:
|
78
79
|
- - ">="
|
79
80
|
- !ruby/object:Gem::Version
|
80
|
-
version:
|
81
|
+
version: 2.7.0
|
81
82
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
83
|
requirements:
|
83
84
|
- - ">="
|