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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cc3eb8adbfbca8a31fb1adff9126a38fdadf3d4dd73aabc4874c05c2de1f5d97
4
- data.tar.gz: e61fab9f1c1ce62af7e2ef6db0346be7e82159990a40bea4b4e907f465cd9cdd
3
+ metadata.gz: c314c67097a8eea0664778863993d6bf29b0baf9ac968d2e89de1a3ba2ce01df
4
+ data.tar.gz: 6a9517d877d3438587ee3531993da82442ecda5d22716f06454659209f750bbc
5
5
  SHA512:
6
- metadata.gz: 584bb010504350658722f97236d7770a732981061b74e15f9670dff46d03711d1bbf27ad6cae4ddfd2e1560bc17dc9e0b817240fd05625c324ecad3627e78639
7
- data.tar.gz: 6723d75aa93814a01dff665eccfd293bd7b963e00d82dce794a70016e550e216b97ef601844f339373733f9088ef00aa9a689c5292d990b350b82006c2198d6a
6
+ metadata.gz: bc018aad5627bbd53fab5038d1814dad06e195ed6d163b9ad026185018ab2e659de5450aadc9d9e0057873052702029fb0efc235edabf75c355523d7887934f0
7
+ data.tar.gz: f371514e2388a66519c22ade8ea4f9d92bb6035b044e8751913acb1727d5b48e8408556e39bd4dd8d0d14338c4c2d3aede98c1a76d3e0488e5e1c017ada16fab
@@ -1,7 +1,7 @@
1
1
  module OpenXML
2
2
  module SpreadsheetML
3
3
  module DSL
4
- VERSION = '0.2.3'
4
+ VERSION = '0.3.0'
5
5
  end
6
6
  end
7
7
  end
data/lib/xlsx/DSL.rb CHANGED
@@ -3,6 +3,7 @@
3
3
  nokogiri
4
4
 
5
5
  xlsx/parser
6
+ xlsx/parser_helper
6
7
  xlsx/shared_string
7
8
  xlsx/sheet
8
9
  xlsx/sheet_data
data/lib/xlsx/parser.rb CHANGED
@@ -1,10 +1,9 @@
1
1
  module OpenXML
2
2
  module SpreadsheetML
3
- @@sheets = []
4
- @@shared_strings = nil
5
-
6
- class << self
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
- @@workbook.merge_sheets(@@sheets) if @@sheets
22
- yield(@@workbook) if block_given?
23
- @@workbook
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
- @@workbook = Workbook.parser content
32
+ parser content
30
33
  end
31
-
34
+
32
35
  def shared_strings_parser content
33
- $shared_strings = SharedString.parser content || []
36
+ @shared_strings = SharedString.parser content || []
34
37
  end
35
-
38
+
36
39
  def sheet_parser content
37
- @@sheets << Sheet.parser(content)
40
+ @sheets << Sheet.parser(content)
38
41
  end
39
42
  end
40
43
  end
@@ -0,0 +1,7 @@
1
+ module OpenXML
2
+ module SpreadsheetML
3
+ def self.open xlsx_path
4
+ Workbook.new xlsx_path
5
+ end
6
+ end
7
+ end
@@ -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
@@ -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 $shared_strings[self.v.to_i] if self.type == 's'
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
- self.sheets = new_sheets
18
+ sheets = new_sheets
22
19
  self
23
20
  end
24
21
 
25
- def self.parser content
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
- sheets << sheet
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.2.3
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-13 00:00:00.000000000 Z
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: '0'
81
+ version: 2.7.0
81
82
  required_rubygems_version: !ruby/object:Gem::Requirement
82
83
  requirements:
83
84
  - - ">="