xlsx-DSL 0.2.3 → 0.3.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/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
|
- - ">="
|