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 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
  - - ">="