axlsx 1.0.17 → 1.1.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.
Files changed (167) hide show
  1. data/CHANGELOG.md +11 -3
  2. data/README.md +159 -51
  3. data/examples/example.csv +1000 -0
  4. data/examples/example.rb +255 -150
  5. data/examples/example.xlsx +0 -0
  6. data/examples/example_streamed.xlsx +0 -0
  7. data/examples/no-use_autowidth.xlsx +0 -0
  8. data/examples/shared_strings_example.xlsx +0 -0
  9. data/lib/axlsx/content_type/content_type.rb +12 -12
  10. data/lib/axlsx/content_type/default.rb +9 -6
  11. data/lib/axlsx/content_type/override.rb +12 -8
  12. data/lib/axlsx/doc_props/app.rb +37 -40
  13. data/lib/axlsx/doc_props/core.rb +12 -17
  14. data/lib/axlsx/drawing/axis.rb +38 -19
  15. data/lib/axlsx/drawing/bar_3D_chart.rb +33 -32
  16. data/lib/axlsx/drawing/bar_series.rb +13 -14
  17. data/lib/axlsx/drawing/cat_axis.rb +15 -14
  18. data/lib/axlsx/drawing/cat_axis_data.rb +16 -18
  19. data/lib/axlsx/drawing/chart.rb +39 -40
  20. data/lib/axlsx/drawing/drawing.rb +15 -12
  21. data/lib/axlsx/drawing/graphic_frame.rb +21 -21
  22. data/lib/axlsx/drawing/hyperlink.rb +12 -11
  23. data/lib/axlsx/drawing/line_3D_chart.rb +30 -28
  24. data/lib/axlsx/drawing/line_series.rb +11 -11
  25. data/lib/axlsx/drawing/marker.rb +10 -8
  26. data/lib/axlsx/drawing/named_axis_data.rb +36 -0
  27. data/lib/axlsx/drawing/one_cell_anchor.rb +17 -16
  28. data/lib/axlsx/drawing/pic.rb +25 -37
  29. data/lib/axlsx/drawing/picture_locking.rb +21 -18
  30. data/lib/axlsx/drawing/pie_3D_chart.rb +10 -8
  31. data/lib/axlsx/drawing/pie_series.rb +15 -12
  32. data/lib/axlsx/drawing/scaling.rb +10 -10
  33. data/lib/axlsx/drawing/scatter_chart.rb +69 -0
  34. data/lib/axlsx/drawing/scatter_series.rb +39 -0
  35. data/lib/axlsx/drawing/ser_axis.rb +10 -10
  36. data/lib/axlsx/drawing/series.rb +15 -15
  37. data/lib/axlsx/drawing/series_title.rb +14 -14
  38. data/lib/axlsx/drawing/title.rb +26 -26
  39. data/lib/axlsx/drawing/two_cell_anchor.rb +18 -20
  40. data/lib/axlsx/drawing/val_axis.rb +8 -7
  41. data/lib/axlsx/drawing/val_axis_data.rb +17 -17
  42. data/lib/axlsx/drawing/view_3D.rb +22 -20
  43. data/lib/axlsx/package.rb +60 -43
  44. data/lib/axlsx/rels/relationship.rb +11 -8
  45. data/lib/axlsx/rels/relationships.rb +7 -1
  46. data/lib/axlsx/stylesheet/#num_fmt.rb# +69 -0
  47. data/lib/axlsx/stylesheet/border.rb +27 -23
  48. data/lib/axlsx/stylesheet/border_pr.rb +16 -15
  49. data/lib/axlsx/stylesheet/cell_alignment.rb +23 -21
  50. data/lib/axlsx/stylesheet/cell_protection.rb +10 -7
  51. data/lib/axlsx/stylesheet/cell_style.rb +8 -5
  52. data/lib/axlsx/stylesheet/color.rb +20 -14
  53. data/lib/axlsx/stylesheet/fill.rb +7 -5
  54. data/lib/axlsx/stylesheet/font.rb +21 -14
  55. data/lib/axlsx/stylesheet/gradient_fill.rb +19 -16
  56. data/lib/axlsx/stylesheet/gradient_stop.rb +9 -5
  57. data/lib/axlsx/stylesheet/num_fmt.rb +12 -6
  58. data/lib/axlsx/stylesheet/pattern_fill.rb +25 -10
  59. data/lib/axlsx/stylesheet/styles.rb +47 -35
  60. data/lib/axlsx/stylesheet/table_style.rb +9 -4
  61. data/lib/axlsx/stylesheet/table_style_element.rb +10 -7
  62. data/lib/axlsx/stylesheet/table_styles.rb +11 -8
  63. data/lib/axlsx/stylesheet/xf.rb +29 -25
  64. data/lib/axlsx/util/constants.rb +20 -14
  65. data/lib/axlsx/util/simple_typed_list.rb +18 -9
  66. data/lib/axlsx/util/validators.rb +13 -6
  67. data/lib/axlsx/version.rb +1 -1
  68. data/lib/axlsx/workbook/shared_strings_table.rb +19 -21
  69. data/lib/axlsx/workbook/workbook.rb +58 -34
  70. data/lib/axlsx/workbook/worksheet/cell.rb +149 -132
  71. data/lib/axlsx/workbook/worksheet/col.rb +114 -0
  72. data/lib/axlsx/workbook/worksheet/col.rb~ +0 -0
  73. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +29 -0
  74. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -0
  75. data/lib/axlsx/workbook/worksheet/row.rb +40 -23
  76. data/lib/axlsx/workbook/worksheet/table.rb +96 -0
  77. data/lib/axlsx/workbook/worksheet/table.rb~ +97 -0
  78. data/lib/axlsx/workbook/worksheet/worksheet.rb +243 -127
  79. data/lib/axlsx.rb +30 -9
  80. data/lib/schema/dc.xsd +5 -5
  81. data/lib/schema/dcmitype.xsd +5 -3
  82. data/lib/schema/dcterms.xsd +15 -15
  83. data/lib/schema/opc-coreProperties.xsd +6 -2
  84. data/lib/schema/xml.xsd +7 -8
  85. data/test/#benchmark.txt# +7 -0
  86. data/test/#tc_helper.rb# +3 -0
  87. data/test/benchmark.rb +81 -0
  88. data/test/benchmark.rb~ +0 -0
  89. data/test/benchmark.txt +6 -0
  90. data/test/benchmark.txt~ +6 -0
  91. data/test/content_type/tc_content_type.rb +30 -32
  92. data/test/content_type/tc_default.rb +8 -23
  93. data/test/content_type/tc_override.rb +7 -21
  94. data/test/doc_props/tc_app.rb +2 -8
  95. data/test/doc_props/tc_core.rb +6 -7
  96. data/test/drawing/tc_axis.rb +7 -3
  97. data/test/drawing/tc_bar_3D_chart.rb +6 -7
  98. data/test/drawing/tc_bar_series.rb +4 -5
  99. data/test/drawing/tc_cat_axis.rb +2 -3
  100. data/test/drawing/tc_cat_axis_data.rb +2 -3
  101. data/test/drawing/tc_chart.rb +13 -14
  102. data/test/drawing/tc_drawing.rb +7 -8
  103. data/test/drawing/tc_graphic_frame.rb +3 -4
  104. data/test/drawing/tc_hyperlink.rb +2 -3
  105. data/test/drawing/tc_line_3d_chart.rb +5 -6
  106. data/test/drawing/tc_line_series.rb +3 -4
  107. data/test/drawing/tc_marker.rb +3 -4
  108. data/test/drawing/tc_one_cell_anchor.rb +6 -7
  109. data/test/drawing/tc_pic.rb +8 -9
  110. data/test/drawing/tc_picture_locking.rb +2 -3
  111. data/test/drawing/tc_pie_3D_chart.rb +5 -6
  112. data/test/drawing/tc_pie_series.rb +4 -5
  113. data/test/drawing/tc_scaling.rb +3 -4
  114. data/test/drawing/tc_scatter_chart.rb +43 -0
  115. data/test/drawing/tc_scatter_series.rb +20 -0
  116. data/test/drawing/tc_ser_axis.rb +2 -3
  117. data/test/drawing/tc_series.rb +4 -5
  118. data/test/drawing/tc_series_title.rb +4 -5
  119. data/test/drawing/tc_title.rb +4 -5
  120. data/test/drawing/tc_two_cell_anchor.rb +4 -5
  121. data/test/drawing/tc_val_axis.rb +2 -3
  122. data/test/drawing/tc_val_axis_data.rb +2 -3
  123. data/test/drawing/tc_view_3D.rb +6 -7
  124. data/test/example.csv +1000 -0
  125. data/test/example.xlsx +0 -0
  126. data/test/example_streamed.xlsx +0 -0
  127. data/test/profile.rb +33 -0
  128. data/test/rels/tc_relationship.rb +5 -6
  129. data/test/rels/tc_relationships.rb +4 -5
  130. data/test/stylesheet/tc_border.rb +3 -4
  131. data/test/stylesheet/tc_border_pr.rb +3 -4
  132. data/test/stylesheet/tc_cell_alignment.rb +10 -6
  133. data/test/stylesheet/tc_cell_protection.rb +2 -3
  134. data/test/stylesheet/tc_cell_style.rb +2 -3
  135. data/test/stylesheet/tc_color.rb +2 -3
  136. data/test/stylesheet/tc_fill.rb +1 -2
  137. data/test/stylesheet/tc_font.rb +12 -5
  138. data/test/stylesheet/tc_gradient_fill.rb +1 -2
  139. data/test/stylesheet/tc_gradient_stop.rb +1 -2
  140. data/test/stylesheet/tc_num_fmt.rb +1 -2
  141. data/test/stylesheet/tc_pattern_fill.rb +3 -4
  142. data/test/stylesheet/tc_styles.rb +16 -6
  143. data/test/stylesheet/tc_table_style.rb +2 -3
  144. data/test/stylesheet/tc_table_style_element.rb +2 -3
  145. data/test/stylesheet/tc_table_styles.rb +3 -4
  146. data/test/stylesheet/tc_xf.rb +16 -17
  147. data/test/tc_axlsx.rb +39 -0
  148. data/test/tc_axlsx.rb~ +0 -0
  149. data/test/tc_helper.rb +3 -0
  150. data/test/tc_helper.rb~ +3 -0
  151. data/test/tc_package.rb +13 -10
  152. data/test/util/tc_simple_typed_list.rb +8 -9
  153. data/test/util/tc_validators.rb +7 -8
  154. data/test/workbook/tc_shared_strings_table.rb +5 -6
  155. data/test/workbook/tc_workbook.rb +24 -6
  156. data/test/workbook/worksheet/table/tc_table.rb +71 -0
  157. data/test/workbook/worksheet/table/tc_table.rb~ +72 -0
  158. data/test/workbook/worksheet/tc_cell.rb +62 -18
  159. data/test/workbook/worksheet/tc_col.rb +59 -0
  160. data/test/workbook/worksheet/tc_col.rb~ +10 -0
  161. data/test/workbook/worksheet/tc_date_time_converter.rb +126 -0
  162. data/test/workbook/worksheet/tc_page_margins.rb +97 -0
  163. data/test/workbook/worksheet/tc_row.rb +54 -4
  164. data/test/workbook/worksheet/tc_worksheet.rb +177 -34
  165. metadata +69 -41
  166. data/test/drawing/tc_hyperlink.rb~ +0 -71
  167. data/test/workbook/tc_shared_strings_table.rb~ +0 -8
@@ -1,22 +1,22 @@
1
1
  # encoding: UTF-8
2
2
  module Axlsx
3
- # A border part.
3
+ # A border part.
4
4
  class BorderPr
5
-
5
+
6
6
  # @return [Color] The color of this border part.
7
7
  attr_reader :color
8
8
 
9
- # @return [Symbol] The syle of this border part.
10
- # @note
9
+ # @return [Symbol] The syle of this border part.
10
+ # @note
11
11
  # The following are allowed
12
- # :none
12
+ # :none
13
13
  # :thin
14
14
  # :medium
15
15
  # :dashed
16
16
  # :dotted
17
17
  # :thick
18
18
  # :double
19
- # :hair
19
+ # :hair
20
20
  # :mediumDashed
21
21
  # :dashDot
22
22
  # :mediumDashDot
@@ -26,7 +26,7 @@ module Axlsx
26
26
  attr_reader :style
27
27
 
28
28
  # @return [Symbol] The name of this border part
29
- # @note
29
+ # @note
30
30
  # The following are allowed
31
31
  # :start
32
32
  # :end
@@ -38,7 +38,7 @@ module Axlsx
38
38
  # :vertical
39
39
  # :horizontal
40
40
  attr_reader :name
41
-
41
+
42
42
  # Creates a new Border Part Object
43
43
  # @option options [Color] color
44
44
  # @option options [Symbol] name
@@ -53,17 +53,18 @@ module Axlsx
53
53
  # @see name
54
54
  def name=(v) RestrictionValidator.validate "BorderPr.name", [:start, :end, :left, :right, :top, :bottom, :diagonal, :vertical, :horizontal], v; @name = v end
55
55
  # @see color
56
- def color=(v) DataTypeValidator.validate(:color, Color, v); @color = v end
56
+ def color=(v) DataTypeValidator.validate(:color, Color, v); @color = v end
57
57
  # @see style
58
58
  def style=(v) RestrictionValidator.validate "BorderPr.style", [:none, :thin, :medium, :dashed, :dotted, :thick, :double, :hair, :mediumDashed, :dashDot, :mediumDashDot, :dashDotDot, :mediumDashDotDot, :slantDashDot], v; @style = v end
59
59
 
60
- # Serializes the border part
61
- # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
60
+ # Serializes the object
61
+ # @param [String] str
62
62
  # @return [String]
63
- def to_xml(xml)
64
- xml.send(@name, :style => @style) {
65
- @color.to_xml(xml) if @color.is_a? Color
66
- }
63
+ def to_xml_string(str = '')
64
+ str << '<' << @name.to_s << ' style="' << @style.to_s << '">'
65
+ @color.to_xml_string(str) if @color.is_a?(Color)
66
+ str << '</' << @name.to_s << '>'
67
67
  end
68
+
68
69
  end
69
70
  end
@@ -1,11 +1,11 @@
1
1
  # encoding: UTF-8
2
2
  module Axlsx
3
3
  # CellAlignment stores information about the cell alignment of a style Xf Object.
4
- # @note Using Styles#add_style is the recommended way to manage cell alignment.
4
+ # @note Using Styles#add_style is the recommended way to manage cell alignment.
5
5
  # @see Styles#add_style
6
6
  class CellAlignment
7
7
  # The horizontal alignment of the cell.
8
- # @note
8
+ # @note
9
9
  # The horizontal cell alignement style must be one of
10
10
  # :general
11
11
  # :left
@@ -36,7 +36,7 @@ module Axlsx
36
36
  # Indicate if the text of the cell should wrap
37
37
  # @return [Boolean]
38
38
  attr_reader :wrapText
39
-
39
+
40
40
  # The amount of indent
41
41
  # @return [Integer]
42
42
  attr_reader :indent
@@ -54,12 +54,12 @@ module Axlsx
54
54
  attr_reader :shrinkToFit
55
55
 
56
56
  # The reading order of the text
57
- # 0 Context Dependent
57
+ # 0 Context Dependent
58
58
  # 1 Left-to-Right
59
59
  # 2 Right-to-Left
60
60
  # @return [Integer]
61
61
  attr_reader :readingOrder
62
-
62
+
63
63
  # Create a new cell_alignment object
64
64
  # @option options [Symbol] horizontal
65
65
  # @option options [Symbol] vertical
@@ -74,33 +74,35 @@ module Axlsx
74
74
  options.each do |o|
75
75
  self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
76
76
  end
77
- end
78
-
77
+ end
78
+
79
79
  # @see horizontal
80
- def horizontal=(v) Axlsx::validate_horizontal_alignment v; @horizontal = v end
80
+ def horizontal=(v) Axlsx::validate_horizontal_alignment v; @horizontal = v end
81
81
  # @see vertical
82
- def vertical=(v) Axlsx::validate_vertical_alignment v; @vertical = v end
82
+ def vertical=(v) Axlsx::validate_vertical_alignment v; @vertical = v end
83
83
  # @see textRotation
84
- def textRotation=(v) Axlsx::validate_unsigned_int v; @textRotation = v end
84
+ def textRotation=(v) Axlsx::validate_unsigned_int v; @textRotation = v end
85
85
  # @see wrapText
86
- def wrapText=(v) Axlsx::validate_boolean v; @wrapText = v end
86
+ def wrapText=(v) Axlsx::validate_boolean v; @wrapText = v end
87
87
  # @see indent
88
- def indent=(v) Axlsx::validate_unsigned_int v; @indent = v end
88
+ def indent=(v) Axlsx::validate_unsigned_int v; @indent = v end
89
89
  # @see relativeIndent
90
- def relativeIndent=(v) Axlsx::validate_int v; @relativeIndent = v end
90
+ def relativeIndent=(v) Axlsx::validate_int v; @relativeIndent = v end
91
91
  # @see justifyLastLine
92
- def justifyLastLine=(v) Axlsx::validate_boolean v; @justifyLastLine = v end
92
+ def justifyLastLine=(v) Axlsx::validate_boolean v; @justifyLastLine = v end
93
93
  # @see shrinkToFit
94
- def shrinkToFit=(v) Axlsx::validate_boolean v; @shrinkToFit = v end
94
+ def shrinkToFit=(v) Axlsx::validate_boolean v; @shrinkToFit = v end
95
95
  # @see readingOrder
96
- def readingOrder=(v) Axlsx::validate_unsigned_int v; @readingOrder = v end
96
+ def readingOrder=(v) Axlsx::validate_unsigned_int v; @readingOrder = v end
97
97
 
98
- # Serializes the cell alignment
99
- # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
98
+ # Serializes the object
99
+ # @param [String] str
100
100
  # @return [String]
101
- def to_xml(xml)
102
- xml.alignment(self.instance_values)
101
+ def to_xml_string(str = '')
102
+ str << '<alignment '
103
+ str << instance_values.map { |key, value| '' << key.to_s << '="' << value.to_s << '"' }.join(' ')
104
+ str << '/>'
103
105
  end
104
-
106
+
105
107
  end
106
108
  end
@@ -4,7 +4,7 @@ module Axlsx
4
4
  # @note Using Styles#add_style is the recommended way to manage cell protection.
5
5
  # @see Styles#add_style
6
6
  class CellProtection
7
-
7
+
8
8
  # specifies locking for cells that have the style containing this protection
9
9
  # @return [Boolean]
10
10
  attr_reader :hidden
@@ -23,15 +23,18 @@ module Axlsx
23
23
  end
24
24
 
25
25
  # @see hidden
26
- def hidden=(v) Axlsx::validate_boolean v; @hidden = v end
26
+ def hidden=(v) Axlsx::validate_boolean v; @hidden = v end
27
27
  # @see locked
28
- def locked=(v) Axlsx::validate_boolean v; @locked = v end
28
+ def locked=(v) Axlsx::validate_boolean v; @locked = v end
29
29
 
30
- # Serializes the cell protection
31
- # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
30
+ # Serializes the object
31
+ # @param [String] str
32
32
  # @return [String]
33
- def to_xml(xml)
34
- xml.protection(self.instance_values)
33
+ def to_xml_string(str = '')
34
+ str << '<protection '
35
+ str << instance_values.map { |key, value| '' << key.to_s << '="' << value.to_s << '"' }.join(' ')
36
+ str << '/>'
35
37
  end
38
+
36
39
  end
37
40
  end
@@ -7,7 +7,7 @@ module Axlsx
7
7
  # The name of this cell style
8
8
  # @return [String]
9
9
  attr_reader :name
10
-
10
+
11
11
  # The formatting record id this named style utilizes
12
12
  # @return [Integer]
13
13
  # @see Axlsx::Xf
@@ -55,12 +55,15 @@ module Axlsx
55
55
  # @see customBuiltin
56
56
  def customBuiltin=(v) Axlsx::validate_boolean v; @customBuiltin = v end
57
57
 
58
- # Serializes the cell style
59
- # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
58
+ # Serializes the object
59
+ # @param [String] str
60
60
  # @return [String]
61
- def to_xml(xml)
62
- xml.cellStyle(self.instance_values)
61
+ def to_xml_string(str = '')
62
+ str << '<cellStyle '
63
+ str << instance_values.map { |key, value| '' << key.to_s << '="' << value.to_s << '"' }.join(' ')
64
+ str << '/>'
63
65
  end
66
+
64
67
  end
65
68
 
66
69
  end
@@ -5,9 +5,9 @@ module Axlsx
5
5
  # Determines if the color is system color dependant
6
6
  # @return [Boolean]
7
7
  attr_reader :auto
8
-
9
- # The color as defined in rgb terms.
10
- # @note
8
+
9
+ # The color as defined in rgb terms.
10
+ # @note
11
11
  # rgb colors need to conform to ST_UnsignedIntHex. That basically means put 'FF' before you color
12
12
  # When assigning the rgb value the behavior is much like CSS selectors and can use shorthand versions as follows:
13
13
  # If you provide a two character value it will be repeated for each r, g, b assignment
@@ -25,16 +25,16 @@ module Axlsx
25
25
  # no support for theme just yet
26
26
  # @return [Integer]
27
27
  #attr_reader :theme
28
-
28
+
29
29
  # The tint value.
30
30
  # @note valid values are between -1.0 and 1.0
31
31
  # @return [Float]
32
32
  attr_reader :tint
33
-
33
+
34
34
  # Creates a new Color object
35
35
  # @option options [Boolean] auto
36
36
  # @option options [String] rgb
37
- # @option options [Float] tint
37
+ # @option options [Float] tint
38
38
  def initialize(options={})
39
39
  @rgb = "FF000000"
40
40
  options.each do |o|
@@ -42,7 +42,7 @@ module Axlsx
42
42
  end
43
43
  end
44
44
  # @see auto
45
- def auto=(v) Axlsx::validate_boolean v; @auto = v end
45
+ def auto=(v) Axlsx::validate_boolean v; @auto = v end
46
46
  # @see color
47
47
  def rgb=(v)
48
48
  Axlsx::validate_string(v)
@@ -56,15 +56,21 @@ module Axlsx
56
56
  def tint=(v) Axlsx::validate_float v; @tint = v end
57
57
 
58
58
  # This version does not support themes
59
- # def theme=(v) Axlsx::validate_unsigned_integer v; @theme = v end
60
-
61
- # Indexed colors are for backward compatability which I am choosing not to support
62
- # def indexed=(v) Axlsx::validate_unsigned_integer v; @indexed = v end
59
+ # def theme=(v) Axlsx::validate_unsigned_integer v; @theme = v end
63
60
 
61
+ # Indexed colors are for backward compatability which I am choosing not to support
62
+ # def indexed=(v) Axlsx::validate_unsigned_integer v; @indexed = v end
64
63
 
65
- # Serializes the color
66
- # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
64
+ # Serializes the object
65
+ # @param [String] str
67
66
  # @return [String]
68
- def to_xml(xml) xml.color(self.instance_values) end
67
+ def to_xml_string(str = '')
68
+ str << "<color "
69
+ self.instance_values.each do |key, value|
70
+ str << key.to_s << '="' << value.to_s << '" '
71
+ end
72
+ str << "/>"
73
+ end
74
+
69
75
  end
70
76
  end
@@ -12,17 +12,19 @@ module Axlsx
12
12
  attr_reader :fill_type
13
13
 
14
14
  # Creates a new Fill object
15
- # @param [PatternFill, GradientFill] fill_type
15
+ # @param [PatternFill, GradientFill] fill_type
16
16
  # @raise [ArgumentError] if the fill_type parameter is not a PatternFill or a GradientFill instance
17
17
  def initialize(fill_type)
18
18
  self.fill_type = fill_type
19
19
  end
20
20
 
21
- # Serializes the fill
22
- # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
21
+ # Serializes the object
22
+ # @param [String] str
23
23
  # @return [String]
24
- def to_xml(xml)
25
- xml.fill { @fill_type.to_xml(xml) }
24
+ def to_xml_string(str = '')
25
+ str << '<fill>'
26
+ @fill_type.to_xml_string(str)
27
+ str << '</fill>'
26
28
  end
27
29
 
28
30
  # @see fill_type
@@ -7,7 +7,7 @@ module Axlsx
7
7
  # The name of the font
8
8
  # @return [String]
9
9
  attr_reader :name
10
-
10
+
11
11
  # The charset of the font
12
12
  # @return [Integer]
13
13
  # @note
@@ -32,9 +32,9 @@ module Axlsx
32
32
  # 238 EASTEUROPE_CHARSET
33
33
  # 255 OEM_CHARSET
34
34
  attr_reader :charset
35
-
35
+
36
36
  # The font's family
37
- # @note
37
+ # @note
38
38
  # The following are defined OOXML specification
39
39
  # 0 Not applicable.
40
40
  # 1 Roman
@@ -54,6 +54,10 @@ module Axlsx
54
54
  # @return [Boolean]
55
55
  attr_reader :i
56
56
 
57
+ # Indicates if the font should be rendered underlined
58
+ # @return [Boolean]
59
+ attr_reader :u
60
+
57
61
  # Indicates if the font should be rendered with a strikthrough
58
62
  # @return [Boolean]
59
63
  attr_reader :strike
@@ -89,6 +93,7 @@ module Axlsx
89
93
  # @option options [Integer] family
90
94
  # @option options [Boolean] b
91
95
  # @option options [Boolean] i
96
+ # @option options [Boolean] u
92
97
  # @option options [Boolean] strike
93
98
  # @option options [Boolean] outline
94
99
  # @option options [Boolean] shadow
@@ -102,21 +107,23 @@ module Axlsx
102
107
  end
103
108
  end
104
109
  # @see name
105
- def name=(v) Axlsx::validate_string v; @name = v end
110
+ def name=(v) Axlsx::validate_string v; @name = v end
106
111
  # @see charset
107
112
  def charset=(v) Axlsx::validate_unsigned_int v; @charset = v end
108
113
  # @see family
109
114
  def family=(v) Axlsx::validate_unsigned_int v; @family = v end
110
115
  # @see b
111
- def b=(v) Axlsx::validate_boolean v; @b = v end
116
+ def b=(v) Axlsx::validate_boolean v; @b = v end
112
117
  # @see i
113
118
  def i=(v) Axlsx::validate_boolean v; @i = v end
119
+ # @see u
120
+ def u=(v) Axlsx::validate_boolean v; @u = v end
114
121
  # @see strike
115
122
  def strike=(v) Axlsx::validate_boolean v; @strike = v end
116
123
  # @see outline
117
124
  def outline=(v) Axlsx::validate_boolean v; @outline = v end
118
125
  # @see shadow
119
- def shadow=(v) Axlsx::validate_boolean v; @shadow = v end
126
+ def shadow=(v) Axlsx::validate_boolean v; @shadow = v end
120
127
  # @see condense
121
128
  def condense=(v) Axlsx::validate_boolean v; @condense = v end
122
129
  # @see extend
@@ -126,15 +133,15 @@ module Axlsx
126
133
  # @see sz
127
134
  def sz=(v) Axlsx::validate_unsigned_int v; @sz=v end
128
135
 
129
- # Serializes the fill
130
- # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
136
+ # Serializes the object
137
+ # @param [String] str
131
138
  # @return [String]
132
- def to_xml(xml)
133
- xml.font {
134
- self.instance_values.each do |k, v|
135
- v.is_a?(Color) ? v.to_xml(xml) : xml.send(k, {:val => v})
136
- end
137
- }
139
+ def to_xml_string(str = '')
140
+ str << '<font>'
141
+ instance_values.each do |k, v|
142
+ v.is_a?(Color) ? v.to_xml_string(str) : (str << '<' << k.to_s << ' val="' << v.to_s << '"/>')
143
+ end
144
+ str << '</font>'
138
145
  end
139
146
  end
140
147
  end
@@ -1,11 +1,11 @@
1
1
  # encoding: UTF-8
2
2
  module Axlsx
3
3
  # A GradientFill defines the color and positioning for gradiant cell fill.
4
- # @see Open Office XML Part 1 §18.8.24
4
+ # @see Open Office XML Part 1 §18.8.24
5
5
  class GradientFill
6
6
 
7
7
  # The type of gradient.
8
- # @note
8
+ # @note
9
9
  # valid options are
10
10
  # :linear
11
11
  # :path
@@ -26,7 +26,7 @@ module Axlsx
26
26
 
27
27
  # Percentage format top
28
28
  # @return [Float]
29
- attr_reader :top
29
+ attr_reader :top
30
30
 
31
31
  # Percentage format bottom
32
32
  # @return [Float]
@@ -35,7 +35,7 @@ module Axlsx
35
35
  # Collection of stop objects
36
36
  # @return [SimpleTypedList]
37
37
  attr_reader :stop
38
-
38
+
39
39
  # Creates a new GradientFill object
40
40
  # @option options [Symbol] type
41
41
  # @option options [Float] degree
@@ -52,25 +52,28 @@ module Axlsx
52
52
  end
53
53
 
54
54
  # @see type
55
- def type=(v) Axlsx::validate_gradient_type v; @type = v end
55
+ def type=(v) Axlsx::validate_gradient_type v; @type = v end
56
56
  # @see degree
57
- def degree=(v) Axlsx::validate_float v; @degree = v end
57
+ def degree=(v) Axlsx::validate_float v; @degree = v end
58
58
  # @see left
59
- def left=(v) DataTypeValidator.validate "GradientFill.left", Float, v, lambda { |arg| arg >= 0.0 && arg <= 1.0}; @left = v end
59
+ def left=(v) DataTypeValidator.validate "GradientFill.left", Float, v, lambda { |arg| arg >= 0.0 && arg <= 1.0}; @left = v end
60
60
  # @see right
61
- def right=(v) DataTypeValidator.validate "GradientFill.right", Float, v, lambda { |arg| arg >= 0.0 && arg <= 1.0}; @right = v end
61
+ def right=(v) DataTypeValidator.validate "GradientFill.right", Float, v, lambda { |arg| arg >= 0.0 && arg <= 1.0}; @right = v end
62
62
  # @see top
63
- def top=(v) DataTypeValidator.validate "GradientFill.top", Float, v, lambda { |arg| arg >= 0.0 && arg <= 1.0}; @top = v end
63
+ def top=(v) DataTypeValidator.validate "GradientFill.top", Float, v, lambda { |arg| arg >= 0.0 && arg <= 1.0}; @top = v end
64
64
  # @see bottom
65
- def bottom=(v) DataTypeValidator.validate "GradientFill.bottom", Float, v, lambda { |arg| arg >= 0.0 && arg <= 1.0}; @bottom= v end
65
+ def bottom=(v) DataTypeValidator.validate "GradientFill.bottom", Float, v, lambda { |arg| arg >= 0.0 && arg <= 1.0}; @bottom= v end
66
66
 
67
- # Serializes the gradientFill
68
- # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
67
+ # Serializes the object
68
+ # @param [String] str
69
69
  # @return [String]
70
- def to_xml(xml)
71
- xml.gradientFill(self.instance_values.reject { |k,v| k.to_sym == :stop }) {
72
- @stop.each { |s| s.to_xml(xml) }
73
- }
70
+ def to_xml_string(str = '')
71
+ str << '<gradientFill'
72
+ h = self.instance_values.reject { |k,v| k.to_sym == :stop }
73
+ str << h.map { |key, value| '' << key.to_s << '="' << value.to_s << '"' }.join(' ')
74
+ str << '>'
75
+ @stop.each { |s| s.to_xml_string(str) }
76
+ str << '</gradientFill>'
74
77
  end
75
78
  end
76
79
  end
@@ -1,7 +1,7 @@
1
1
  # encoding: UTF-8
2
2
  module Axlsx
3
3
  # The GradientStop object represents a color point in a gradient.
4
- # @see Open Office XML Part 1 §18.8.24
4
+ # @see Open Office XML Part 1 §18.8.24
5
5
  class GradientStop
6
6
  # The color for this gradient stop
7
7
  # @return [Color]
@@ -23,11 +23,15 @@ module Axlsx
23
23
  # @see color
24
24
  def color=(v) DataTypeValidator.validate "GradientStop.color", Color, v; @color=v end
25
25
  # @see position
26
- def position=(v) DataTypeValidator.validate "GradientStop.position", Float, v, lambda { |arg| arg >= 0 && arg <= 1}; @position = v end
26
+ def position=(v) DataTypeValidator.validate "GradientStop.position", Float, v, lambda { |arg| arg >= 0 && arg <= 1}; @position = v end
27
27
 
28
- # Serializes the gradientStop
29
- # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
28
+ # Serializes the object
29
+ # @param [String] str
30
30
  # @return [String]
31
- def to_xml(xml) xml.stop(:position => self.position) {self.color.to_xml(xml)} end
31
+ def to_xml_string(str = '')
32
+ str << '<stop position="' << position.to_s << '">'
33
+ self.color.to_xml_string(str)
34
+ str << '</stop>'
35
+ end
32
36
  end
33
37
  end
@@ -1,11 +1,11 @@
1
1
  # encoding: UTF-8
2
2
  module Axlsx
3
- # A NumFmt object defines an identifier and formatting code for data in cells.
3
+ # A NumFmt object defines an identifier and formatting code for data in cells.
4
4
  # @note The recommended way to manage styles is Styles#add_style
5
5
  class NumFmt
6
6
  # @return [Integer] An unsinged integer referencing a standard or custom number format.
7
7
  # @note
8
- # These are the known formats I can dig up. The constant NUM_FMT_PERCENT is 9, and uses the default % formatting. Axlsx also defines a few formats for date and time that are commonly used in asia as NUM_FMT_YYYYMMDD and NUM_FRM_YYYYMMDDHHMMSS.
8
+ # These are the known formats I can dig up. The constant NUM_FMT_PERCENT is 9, and uses the default % formatting. Axlsx also defines a few formats for date and time that are commonly used in asia as NUM_FMT_YYYYMMDD and NUM_FRM_YYYYMMDDHHMMSS.
9
9
  # 1 0
10
10
  # 2 0.00
11
11
  # 3 #,##0
@@ -40,7 +40,7 @@ module Axlsx
40
40
  # @see Axlsx
41
41
  attr_reader :numFmtId
42
42
 
43
- # @return [String] The formatting to use for this number format.
43
+ # @return [String] The formatting to use for this number format.
44
44
  # @see http://support.microsoft.com/kb/264372
45
45
  attr_reader :formatCode
46
46
  def initialize(options={})
@@ -56,9 +56,15 @@ module Axlsx
56
56
  # @see formatCode
57
57
  def formatCode=(v) Axlsx::validate_string v; @formatCode = v end
58
58
 
59
- # Creates a numFmt element applying the instance values of this object as attributes.
60
- # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
61
- def to_xml(xml) xml.numFmt(self.instance_values) end
59
+
60
+ # Serializes the object
61
+ # @param [String] str
62
+ # @return [String]
63
+ def to_xml_string(str = '')
64
+ str << '<numFmt '
65
+ str << instance_values.map { |key, value| '' << key.to_s << '="' << value.to_s << '"' }.join(' ')
66
+ str << '/>'
67
+ end
62
68
 
63
69
  end
64
70
  end
@@ -7,15 +7,15 @@ module Axlsx
7
7
 
8
8
  # The color to use for the the background in solid fills.
9
9
  # @return [Color]
10
- attr_reader :fgColor
10
+ attr_reader :fgColor
11
11
 
12
12
  # The color to use for the background of the fill when the type is not solid.
13
13
  # @return [Color]
14
14
  attr_reader :bgColor
15
15
 
16
16
  # The pattern type to use
17
- # @note
18
- # patternType must be one of
17
+ # @note
18
+ # patternType must be one of
19
19
  # :none
20
20
  # :solid
21
21
  # :mediumGray
@@ -53,15 +53,30 @@ module Axlsx
53
53
  # @see bgColor
54
54
  def bgColor=(v) DataTypeValidator.validate "PatternFill.bgColor", Color, v; @bgColor=v end
55
55
  # @see patternType
56
- def patternType=(v) Axlsx::validate_pattern_type v; @patternType = v end
56
+ def patternType=(v) Axlsx::validate_pattern_type v; @patternType = v end
57
57
 
58
- # Serializes the pattern fill
59
- # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
58
+ # Serializes the object
59
+ # @param [String] str
60
60
  # @return [String]
61
- def to_xml(xml)
62
- xml.patternFill(:patternType => self.patternType) {
63
- self.instance_values.reject { |k,v| k.to_sym == :patternType }.each { |k,v| xml.send(k, v.instance_values) }
64
- }
61
+ def to_xml_string(str = '')
62
+ str << '<patternFill patternType="' << patternType.to_s << '">'
63
+ if fgColor.is_a?(Color)
64
+ str << "<fgColor "
65
+ fgColor.instance_values.each do |key, value|
66
+ str << key.to_s << '="' << value.to_s << '" '
67
+ end
68
+ str << "/>"
69
+ end
70
+
71
+ if bgColor.is_a?(Color)
72
+ str << "<bgColor "
73
+ bgColor.instance_values.each do |key, value|
74
+ str << key.to_s << '="' << value.to_s << '" '
75
+ end
76
+ str << "/>"
77
+ end
78
+ str << '</patternFill>'
65
79
  end
80
+
66
81
  end
67
82
  end