openxml-xlsx 0.1.1 → 0.1.2

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
  SHA1:
3
- metadata.gz: a010100989ff2ab9093bfdea05d3535cf8de0eb1
4
- data.tar.gz: 55f156afa2e40ad7a5f73b82a6e366dd39972d18
3
+ metadata.gz: 374ce4f77d6e68c32dcd699a9b7cc71c159c55e1
4
+ data.tar.gz: 99d760a114ddd00435d05e7912e6ff77e8443b8e
5
5
  SHA512:
6
- metadata.gz: b6cbe628be8b61481747178a1cc4e6a9bbac64477412f39c34cb5ebbc9785563d910bf172030330e49e6ae01fd14a96717f719b32d58ae0384d2b9062eaf6469
7
- data.tar.gz: ca54754a84cf214773b0d4aeb61d0ecd78d2c05e5d6660dc2e6d5059b49e8cd7dcff6e86ad899c94b3fa047174410636bfeaf6bd66ef1951bade31cd3a8c8842
6
+ metadata.gz: 9e79d23a902a1a7957e76f58e53f22617eaace826c94a802ed11e24f519622e9788c09488c5be5a6407b5806d4d5a1b013c7a60610126841d1995b735f98b223
7
+ data.tar.gz: c672ecec03e616ce3bf31f170740cbb6227908c1c74198c378d5fd1ce54db98aaef5f7d164221bd5e1293465b84539c835ac1f5b3309fe8c1859c01d082c31fb
data/Gemfile.lock CHANGED
@@ -1,9 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- openxml-xlsx (0.1.1)
4
+ openxml-xlsx (0.1.2)
5
5
  nokogiri
6
- open_xml_package (= 0.1.0)
6
+ open_xml_package (= 0.2.0.beta1)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
@@ -15,9 +15,11 @@ GEM
15
15
  multi_json (1.7.2)
16
16
  nokogiri (1.6.6.2)
17
17
  mini_portile (~> 0.6.0)
18
- open_xml_package (0.1.0)
18
+ open_xml_package (0.2.0.beta1)
19
19
  nokogiri
20
+ ox
20
21
  rubyzip (~> 1.1.0)
22
+ ox (2.2.2)
21
23
  pry (0.9.12)
22
24
  coderay (~> 1.0.5)
23
25
  method_source (~> 0.8)
data/lib/xlsx.rb CHANGED
@@ -6,7 +6,7 @@ module Xlsx
6
6
  REL_CALC_CHAIN = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain".freeze
7
7
  REL_THEME = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme".freeze
8
8
  REL_TABLE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/table".freeze
9
-
9
+
10
10
  TYPE_WORKBOOK = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml".freeze
11
11
  TYPE_WORKSHEET = "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml".freeze
12
12
  TYPE_THEME = "application/vnd.openxmlformats-officedocument.theme+xml".freeze
@@ -16,11 +16,11 @@ module Xlsx
16
16
  TYPE_CORE_PROPS = "application/vnd.openxmlformats-package.core-properties+xml".freeze
17
17
  TYPE_APP_PROPS = "application/vnd.openxmlformats-officedocument.extended-properties+xml".freeze
18
18
  TYPE_TABLE = "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml".freeze
19
-
19
+
20
20
  def self.index!(collection, item)
21
21
  collection.index(item) || collection.push(item).length - 1
22
22
  end
23
-
23
+
24
24
  end
25
25
 
26
26
  require "xlsx/elements"
@@ -1,7 +1,7 @@
1
1
  module Xlsx
2
2
  module Elements
3
3
  class Alignment < Struct.new(:horizontal, :vertical, :indent, :wrapText)
4
-
4
+
5
5
  def attributes
6
6
  {}.tap do |attrs|
7
7
  attrs[:horizontal] = horizontal if horizontal
@@ -10,11 +10,11 @@ module Xlsx
10
10
  attrs[:wrapText] = wrapText if wrapText
11
11
  end
12
12
  end
13
-
13
+
14
14
  def to_xml(xml)
15
15
  xml.alignment(attributes)
16
16
  end
17
-
17
+
18
18
  end
19
19
  end
20
20
  end
@@ -2,7 +2,7 @@ module Xlsx
2
2
  module Elements
3
3
  class Border
4
4
  attr_reader :left_component, :right_component, :top_component, :bottom_component, :diagonal_component
5
-
5
+
6
6
  def initialize(options={})
7
7
  @left_component = options.fetch(:left, BorderComponent.new)
8
8
  @right_component = options.fetch(:right, BorderComponent.new)
@@ -10,7 +10,7 @@ module Xlsx
10
10
  @bottom_component = options.fetch(:bottom, BorderComponent.new)
11
11
  @diagonal_component = options.fetch(:diagonal, BorderComponent.new)
12
12
  end
13
-
13
+
14
14
  def to_xml(xml)
15
15
  xml.border do
16
16
  left_component.to_xml("left", xml)
@@ -20,7 +20,7 @@ module Xlsx
20
20
  diagonal_component.to_xml("diagonal", xml)
21
21
  end
22
22
  end
23
-
23
+
24
24
  end
25
25
  end
26
26
  end
@@ -1,7 +1,7 @@
1
1
  module Xlsx
2
2
  module Elements
3
3
  class BorderComponent < Struct.new(:style, :color)
4
-
4
+
5
5
  def to_xml(name, xml)
6
6
  if style && color
7
7
  xml.public_send(name, style: style) do
@@ -13,7 +13,7 @@ module Xlsx
13
13
  xml.public_send(name)
14
14
  end
15
15
  end
16
-
16
+
17
17
  end
18
18
  end
19
19
  end
@@ -4,7 +4,7 @@ module Xlsx
4
4
  module Elements
5
5
  class Cell
6
6
  attr_reader :row, :column, :value, :type, :style, :formula
7
-
7
+
8
8
  def initialize(row, options={})
9
9
  @row = row
10
10
  @column = options.fetch(:column)
@@ -25,11 +25,11 @@ module Xlsx
25
25
  @style = package.style_ref(options[:style]) if options.key? :style
26
26
  @formula = options[:formula]
27
27
  end
28
-
28
+
29
29
  def id
30
30
  "#{column_letter}#{row.number}"
31
31
  end
32
-
32
+
33
33
  def column_letter
34
34
  bytes = []
35
35
  remaining = column
@@ -39,41 +39,41 @@ module Xlsx
39
39
  end
40
40
  bytes.pack "c*"
41
41
  end
42
-
42
+
43
43
  def worksheet
44
44
  row.worksheet
45
45
  end
46
-
46
+
47
47
  def workbook
48
48
  worksheet.workbook
49
49
  end
50
-
50
+
51
51
  def package
52
52
  workbook.package
53
53
  end
54
-
54
+
55
55
  def to_xml(xml)
56
56
  attributes = {"r" => id}
57
57
  attributes.merge!("s" => style) if style
58
58
  attributes.merge!("t" => "s") if type == :string
59
-
59
+
60
60
  value = self.value
61
61
  value = string_id if type == :string
62
62
  value = serial_date if type == :date
63
63
  value = serial_time if type == :time
64
-
64
+
65
65
  xml.c(attributes) do
66
66
  xml.f formula if formula
67
67
  xml.v value if value
68
68
  end
69
69
  end
70
-
70
+
71
71
  private
72
72
  attr_reader :string_id, :serial_date, :serial_time
73
-
73
+
74
74
  EXCEL_ANCHOR_DATE = Date.new(1900, 1, 1).freeze
75
75
  SECONDS_PER_DAY = 86400.freeze
76
-
76
+
77
77
  def to_serial_date(date)
78
78
  # Excel stores dates as the number of days since 1900-Jan-0
79
79
  # Excel behaves as if 1900 was a leap year, so the number is
@@ -81,14 +81,14 @@ module Xlsx
81
81
  # http://www.cpearson.com/excel/datetime.htm
82
82
  (date - EXCEL_ANCHOR_DATE).to_i + 2
83
83
  end
84
-
84
+
85
85
  def to_serial_time(time)
86
86
  date = to_serial_date(time.to_date)
87
-
87
+
88
88
  seconds_since_midnight = time.hour * 3600 + time.min * 60 + time.sec
89
89
  date + (seconds_since_midnight.to_f / SECONDS_PER_DAY)
90
90
  end
91
-
91
+
92
92
  end
93
93
  end
94
94
  end
@@ -1,11 +1,11 @@
1
1
  module Xlsx
2
2
  module Elements
3
3
  class DefinedName < Struct.new(:name, :formula)
4
-
4
+
5
5
  def to_xml(xml)
6
6
  xml.definedName "#{formula}", name: name
7
7
  end
8
-
8
+
9
9
  end
10
10
  end
11
11
  end
@@ -1,7 +1,7 @@
1
1
  module Xlsx
2
2
  module Elements
3
3
  class Font < Struct.new(:name, :size, :styles)
4
-
4
+
5
5
  def to_xml(xml)
6
6
  xml.font do
7
7
  xml.sz val: size
@@ -14,7 +14,7 @@ module Xlsx
14
14
  end
15
15
  end
16
16
  end
17
-
17
+
18
18
  end
19
19
  end
20
20
  end
@@ -1,11 +1,11 @@
1
1
  module Xlsx
2
2
  module Elements
3
3
  class IndexedColor < Struct.new(:indexed)
4
-
4
+
5
5
  def to_xml(name, xml)
6
6
  xml.public_send(name, indexed: indexed)
7
7
  end
8
-
8
+
9
9
  end
10
10
  end
11
11
  end
@@ -7,7 +7,7 @@ module Xlsx
7
7
  DECIMAL = ImpliedNumberFormat.new(2).freeze # 0.00
8
8
  INTEGER_THOUSANDS = ImpliedNumberFormat.new(3).freeze # #,##0
9
9
  DECIMAL_THOUSANDS = ImpliedNumberFormat.new(4).freeze # #,##0.00
10
-
10
+
11
11
  INTEGER_PERCENT = ImpliedNumberFormat.new(9).freeze # 0%
12
12
  DECIMAL_PERCENT = ImpliedNumberFormat.new(10).freeze # 0.00%
13
13
  SCIENTIFIC = ImpliedNumberFormat.new(11).freeze # 0.00E+00
@@ -22,24 +22,24 @@ module Xlsx
22
22
  TIME_ALT = ImpliedNumberFormat.new(20).freeze # h:mm
23
23
  TIME_SECONDS_ALT = ImpliedNumberFormat.new(21).freeze # h:mm:ss
24
24
  DATETIME = ImpliedNumberFormat.new(22).freeze # m/d/yy h:mm
25
-
25
+
26
26
  FINANCIAL_INTEGER = ImpliedNumberFormat.new(37).freeze # #,##0 ;(#,##0)
27
27
  FINANCIAL_INTEGER_RED = ImpliedNumberFormat.new(38).freeze # #,##0 ;[Red](#,##0)
28
28
  FINANCIAL_DECIMAL = ImpliedNumberFormat.new(39).freeze # #,##0.00 ;(#,##0.00)
29
29
  FINANCIAL_DECIMAL_RED = ImpliedNumberFormat.new(40).freeze # #,##0.00 ;[Red](#,##0.00)
30
-
30
+
31
31
  INTERVAL = ImpliedNumberFormat.new(45).freeze # mm:ss
32
32
  INTERVAL_HOURS = ImpliedNumberFormat.new(46).freeze # [h]:mm:ss
33
33
  TIMESTAMP = ImpliedNumberFormat.new(47).freeze # mmss.0
34
34
  # SCIENTIFIC_ALT = ImpliedNumberFormat.new(48).freeze # ##0.0E+0
35
35
  # UNKONWN = ImpliedNumberFormat.new(49).freeze # @
36
-
37
-
38
-
36
+
37
+
38
+
39
39
  def to_xml(id, xml)
40
40
  xml.numFmt(numFmtId: id, formatCode: format)
41
41
  end
42
-
42
+
43
43
  end
44
44
  end
45
45
  end
@@ -1,7 +1,7 @@
1
1
  module Xlsx
2
2
  module Elements
3
3
  class PatternFill < Struct.new(:type, :foreground_color, :background_color)
4
-
4
+
5
5
  def to_xml(xml)
6
6
  xml.fill do
7
7
  xml.patternFill(patternType: type) do
@@ -12,7 +12,7 @@ module Xlsx
12
12
  end
13
13
  end
14
14
  end
15
-
15
+
16
16
  end
17
17
  end
18
18
  end
@@ -3,16 +3,16 @@ require "securerandom"
3
3
  module Xlsx
4
4
  module Elements
5
5
  class Relationship < Struct.new(:type, :target, :id)
6
-
6
+
7
7
  def initialize(type, target, id=nil)
8
8
  id ||= "R#{SecureRandom.hex}"
9
9
  super type, target, id
10
10
  end
11
-
11
+
12
12
  def to_xml(xml)
13
13
  xml.Relationship("Id" => id, "Type" => type, "Target" => target)
14
14
  end
15
-
15
+
16
16
  end
17
17
  end
18
18
  end
@@ -2,23 +2,23 @@ module Xlsx
2
2
  module Elements
3
3
  class Row
4
4
  attr_reader :worksheet, :number, :height, :hidden, :cells
5
-
5
+
6
6
  def initialize(worksheet, options={})
7
7
  @worksheet = worksheet
8
8
  @number = options.fetch(:number)
9
9
  @height = options[:height]
10
10
  @hidden = options[:hidden]
11
11
  @cells = []
12
-
12
+
13
13
  Array(options[:cells]).each do |attributes|
14
14
  add_cell attributes
15
15
  end
16
16
  end
17
-
17
+
18
18
  def add_cell(attributes)
19
19
  cells.push Xlsx::Elements::Cell.new(self, attributes)
20
20
  end
21
-
21
+
22
22
  def to_xml(xml)
23
23
  attributes = {"r" => number}
24
24
  attributes.merge!("ht" => height, "customHeight" => 1) if height
@@ -29,7 +29,7 @@ module Xlsx
29
29
  end
30
30
  end
31
31
  end
32
-
32
+
33
33
  end
34
34
  end
35
35
  end
@@ -1,11 +1,11 @@
1
1
  module Xlsx
2
2
  module Elements
3
3
  class ThemeColor < Struct.new(:theme, :tint)
4
-
4
+
5
5
  def to_xml(name, xml)
6
6
  xml.public_send(name, theme: theme, tint: tint)
7
7
  end
8
-
8
+
9
9
  end
10
10
  end
11
11
  end
data/lib/xlsx/package.rb CHANGED
@@ -19,7 +19,7 @@ module Xlsx
19
19
  def initialize
20
20
  super
21
21
  rels.add_relationship REL_DOCUMENT, "xl/workbook.xml"
22
-
22
+
23
23
  @xl_rels = OpenXml::Parts::Rels.new([
24
24
  { "Type" => REL_SHARED_STRINGS, "Target" => "sharedStrings.xml" },
25
25
  { "Type" => REL_STYLES, "Target" => "styles.xml" }
@@ -27,7 +27,7 @@ module Xlsx
27
27
  @shared_strings = Xlsx::Parts::SharedStrings.new
28
28
  @stylesheet = Xlsx::Parts::Stylesheet.new
29
29
  @workbook = Xlsx::Parts::Workbook.new(self)
30
-
30
+
31
31
  # docProps/app.xml
32
32
  # docProps/core.xml
33
33
  add_part "xl/_rels/workbook.xml.rels", xl_rels
@@ -4,17 +4,17 @@ module Xlsx
4
4
  attr_reader :strings
5
5
 
6
6
  def initialize
7
- @strings = []
7
+ @strings = Hash.new { |hash, key| hash[key] = hash.length }
8
8
  end
9
9
 
10
10
  def reference_of(string)
11
- Xlsx.index!(strings, string)
11
+ strings[string]
12
12
  end
13
13
 
14
14
  def to_xml
15
15
  build_standalone_xml do |xml|
16
16
  xml.sst(xmlns: "http://schemas.openxmlformats.org/spreadsheetml/2006/main", uniqueCount: strings.length) do
17
- strings.each do |string|
17
+ strings.each do |string, i|
18
18
  xml.si { xml.t(string) }
19
19
  end
20
20
  end
@@ -23,14 +23,14 @@ module Xlsx
23
23
  options[:font_id] = Xlsx.index!(fonts, options[:font]) if options.key? :font
24
24
  options[:fill_id] = Xlsx.index!(fills, options[:fill]) if options.key? :fill
25
25
  options[:border_id] = Xlsx.index!(borders, options[:border]) if options.key? :border
26
-
26
+
27
27
  style = Style.new(
28
28
  options.fetch(:format_id, 0),
29
29
  options.fetch(:font_id, 0),
30
30
  options.fetch(:fill_id, 0),
31
31
  options.fetch(:border_id, 0),
32
32
  options.fetch(:alignment, nil))
33
-
33
+
34
34
  Xlsx.index!(styles, style)
35
35
  end
36
36
 
@@ -27,13 +27,13 @@ module Xlsx
27
27
  package.add_part "xl/tables/#{table.filename}", table
28
28
  tables.push table
29
29
  end
30
-
30
+
31
31
  def add_defined_names(*defined_names)
32
32
  defined_names.flatten.each do |attributes|
33
33
  add_defined_name attributes
34
34
  end
35
35
  end
36
-
36
+
37
37
  def add_defined_name(attributes)
38
38
  defined_names.push Xlsx::Elements::DefinedName.new(attributes[:name], attributes[:formula])
39
39
  end
@@ -27,11 +27,11 @@ module Xlsx
27
27
  def add_row(attributes)
28
28
  rows.push Xlsx::Elements::Row.new(self, attributes)
29
29
  end
30
-
30
+
31
31
  def merge_cells(*ranges)
32
32
  ranges.each { |range| cell_ranges.push range }
33
33
  end
34
-
34
+
35
35
  def add_table(id, name, ref, columns)
36
36
  table = Xlsx::Parts::Table.new(id, name, ref, columns)
37
37
  rels.add_relationship(REL_TABLE, "../tables/#{table.filename}")
data/lib/xlsx/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Xlsx
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
data/xlsx.gemspec CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.required_ruby_version = "~> 2.0"
23
23
  spec.add_dependency "nokogiri"
24
- spec.add_dependency "open_xml_package", "0.1.0"
24
+ spec.add_dependency "open_xml_package", "0.2.0.beta1"
25
25
 
26
26
  spec.add_development_dependency "pry"
27
27
  spec.add_development_dependency "rspec"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openxml-xlsx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bob Lail
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-09-07 00:00:00.000000000 Z
11
+ date: 2015-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 0.1.0
33
+ version: 0.2.0.beta1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 0.1.0
40
+ version: 0.2.0.beta1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: pry
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -184,7 +184,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
184
184
  version: '0'
185
185
  requirements: []
186
186
  rubyforge_project:
187
- rubygems_version: 2.2.2
187
+ rubygems_version: 2.4.8
188
188
  signing_key:
189
189
  specification_version: 4
190
190
  summary: Using a simple API, create xlsx files programmatically