axlsx 1.0.18 → 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 +93 -18
  3. data/examples/example.csv +1000 -0
  4. data/examples/example.rb +97 -5
  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.rb +30 -9
  10. data/lib/axlsx/content_type/content_type.rb +9 -9
  11. data/lib/axlsx/content_type/default.rb +9 -6
  12. data/lib/axlsx/content_type/override.rb +12 -8
  13. data/lib/axlsx/doc_props/app.rb +37 -40
  14. data/lib/axlsx/doc_props/core.rb +12 -17
  15. data/lib/axlsx/drawing/axis.rb +38 -19
  16. data/lib/axlsx/drawing/bar_3D_chart.rb +33 -32
  17. data/lib/axlsx/drawing/bar_series.rb +13 -14
  18. data/lib/axlsx/drawing/cat_axis.rb +15 -14
  19. data/lib/axlsx/drawing/cat_axis_data.rb +16 -18
  20. data/lib/axlsx/drawing/chart.rb +37 -38
  21. data/lib/axlsx/drawing/drawing.rb +15 -12
  22. data/lib/axlsx/drawing/graphic_frame.rb +21 -21
  23. data/lib/axlsx/drawing/hyperlink.rb +12 -11
  24. data/lib/axlsx/drawing/line_3D_chart.rb +30 -28
  25. data/lib/axlsx/drawing/line_series.rb +11 -11
  26. data/lib/axlsx/drawing/marker.rb +10 -8
  27. data/lib/axlsx/drawing/named_axis_data.rb +36 -0
  28. data/lib/axlsx/drawing/one_cell_anchor.rb +17 -16
  29. data/lib/axlsx/drawing/pic.rb +24 -37
  30. data/lib/axlsx/drawing/picture_locking.rb +21 -18
  31. data/lib/axlsx/drawing/pie_3D_chart.rb +10 -8
  32. data/lib/axlsx/drawing/pie_series.rb +15 -12
  33. data/lib/axlsx/drawing/scaling.rb +10 -10
  34. data/lib/axlsx/drawing/scatter_chart.rb +69 -0
  35. data/lib/axlsx/drawing/scatter_series.rb +39 -0
  36. data/lib/axlsx/drawing/ser_axis.rb +10 -10
  37. data/lib/axlsx/drawing/series.rb +15 -15
  38. data/lib/axlsx/drawing/series_title.rb +14 -14
  39. data/lib/axlsx/drawing/title.rb +26 -26
  40. data/lib/axlsx/drawing/two_cell_anchor.rb +18 -20
  41. data/lib/axlsx/drawing/val_axis.rb +8 -7
  42. data/lib/axlsx/drawing/val_axis_data.rb +17 -17
  43. data/lib/axlsx/drawing/view_3D.rb +22 -20
  44. data/lib/axlsx/package.rb +32 -15
  45. data/lib/axlsx/rels/relationship.rb +9 -6
  46. data/lib/axlsx/rels/relationships.rb +7 -1
  47. data/lib/axlsx/stylesheet/#num_fmt.rb# +69 -0
  48. data/lib/axlsx/stylesheet/border.rb +27 -23
  49. data/lib/axlsx/stylesheet/border_pr.rb +16 -15
  50. data/lib/axlsx/stylesheet/cell_alignment.rb +23 -21
  51. data/lib/axlsx/stylesheet/cell_protection.rb +10 -7
  52. data/lib/axlsx/stylesheet/cell_style.rb +8 -5
  53. data/lib/axlsx/stylesheet/color.rb +20 -14
  54. data/lib/axlsx/stylesheet/fill.rb +7 -5
  55. data/lib/axlsx/stylesheet/font.rb +14 -14
  56. data/lib/axlsx/stylesheet/gradient_fill.rb +19 -16
  57. data/lib/axlsx/stylesheet/gradient_stop.rb +9 -5
  58. data/lib/axlsx/stylesheet/num_fmt.rb +12 -6
  59. data/lib/axlsx/stylesheet/pattern_fill.rb +25 -10
  60. data/lib/axlsx/stylesheet/styles.rb +41 -32
  61. data/lib/axlsx/stylesheet/table_style.rb +9 -4
  62. data/lib/axlsx/stylesheet/table_style_element.rb +10 -7
  63. data/lib/axlsx/stylesheet/table_styles.rb +11 -8
  64. data/lib/axlsx/stylesheet/xf.rb +29 -25
  65. data/lib/axlsx/util/constants.rb +4 -0
  66. data/lib/axlsx/util/simple_typed_list.rb +18 -9
  67. data/lib/axlsx/util/validators.rb +13 -6
  68. data/lib/axlsx/version.rb +1 -1
  69. data/lib/axlsx/workbook/shared_strings_table.rb +19 -21
  70. data/lib/axlsx/workbook/workbook.rb +43 -19
  71. data/lib/axlsx/workbook/worksheet/cell.rb +93 -91
  72. data/lib/axlsx/workbook/worksheet/col.rb +114 -0
  73. data/lib/axlsx/workbook/worksheet/col.rb~ +0 -0
  74. data/lib/axlsx/workbook/worksheet/page_margins.rb +16 -13
  75. data/lib/axlsx/workbook/worksheet/row.rb +13 -13
  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 +152 -118
  79. data/lib/schema/dc.xsd +5 -5
  80. data/lib/schema/dcmitype.xsd +5 -3
  81. data/lib/schema/dcterms.xsd +15 -15
  82. data/lib/schema/opc-coreProperties.xsd +6 -2
  83. data/lib/schema/xml.xsd +7 -8
  84. data/test/#benchmark.txt# +7 -0
  85. data/test/#tc_helper.rb# +3 -0
  86. data/test/benchmark.rb +81 -0
  87. data/test/benchmark.rb~ +0 -0
  88. data/test/benchmark.txt +6 -0
  89. data/test/benchmark.txt~ +6 -0
  90. data/test/content_type/tc_content_type.rb +30 -32
  91. data/test/content_type/tc_default.rb +8 -23
  92. data/test/content_type/tc_override.rb +7 -21
  93. data/test/doc_props/tc_app.rb +2 -8
  94. data/test/doc_props/tc_core.rb +6 -7
  95. data/test/drawing/tc_axis.rb +7 -3
  96. data/test/drawing/tc_bar_3D_chart.rb +6 -7
  97. data/test/drawing/tc_bar_series.rb +4 -5
  98. data/test/drawing/tc_cat_axis.rb +2 -3
  99. data/test/drawing/tc_cat_axis_data.rb +2 -3
  100. data/test/drawing/tc_chart.rb +11 -12
  101. data/test/drawing/tc_drawing.rb +7 -8
  102. data/test/drawing/tc_graphic_frame.rb +3 -4
  103. data/test/drawing/tc_hyperlink.rb +2 -3
  104. data/test/drawing/tc_line_3d_chart.rb +5 -6
  105. data/test/drawing/tc_line_series.rb +3 -4
  106. data/test/drawing/tc_marker.rb +3 -4
  107. data/test/drawing/tc_one_cell_anchor.rb +6 -7
  108. data/test/drawing/tc_pic.rb +8 -9
  109. data/test/drawing/tc_picture_locking.rb +2 -3
  110. data/test/drawing/tc_pie_3D_chart.rb +5 -6
  111. data/test/drawing/tc_pie_series.rb +4 -5
  112. data/test/drawing/tc_scaling.rb +3 -4
  113. data/test/drawing/tc_scatter_chart.rb +43 -0
  114. data/test/drawing/tc_scatter_series.rb +20 -0
  115. data/test/drawing/tc_ser_axis.rb +2 -3
  116. data/test/drawing/tc_series.rb +4 -5
  117. data/test/drawing/tc_series_title.rb +4 -5
  118. data/test/drawing/tc_title.rb +4 -5
  119. data/test/drawing/tc_two_cell_anchor.rb +4 -5
  120. data/test/drawing/tc_val_axis.rb +2 -3
  121. data/test/drawing/tc_val_axis_data.rb +2 -3
  122. data/test/drawing/tc_view_3D.rb +6 -7
  123. data/test/example.csv +1000 -0
  124. data/test/example.xlsx +0 -0
  125. data/test/example_streamed.xlsx +0 -0
  126. data/test/profile.rb +33 -0
  127. data/test/rels/tc_relationship.rb +5 -6
  128. data/test/rels/tc_relationships.rb +4 -5
  129. data/test/stylesheet/tc_border.rb +3 -4
  130. data/test/stylesheet/tc_border_pr.rb +3 -4
  131. data/test/stylesheet/tc_cell_alignment.rb +4 -5
  132. data/test/stylesheet/tc_cell_protection.rb +2 -3
  133. data/test/stylesheet/tc_cell_style.rb +2 -3
  134. data/test/stylesheet/tc_color.rb +2 -3
  135. data/test/stylesheet/tc_fill.rb +1 -2
  136. data/test/stylesheet/tc_font.rb +5 -6
  137. data/test/stylesheet/tc_gradient_fill.rb +1 -2
  138. data/test/stylesheet/tc_gradient_stop.rb +1 -2
  139. data/test/stylesheet/tc_num_fmt.rb +1 -2
  140. data/test/stylesheet/tc_pattern_fill.rb +3 -4
  141. data/test/stylesheet/tc_styles.rb +15 -9
  142. data/test/stylesheet/tc_table_style.rb +2 -3
  143. data/test/stylesheet/tc_table_style_element.rb +2 -3
  144. data/test/stylesheet/tc_table_styles.rb +3 -4
  145. data/test/stylesheet/tc_xf.rb +16 -17
  146. data/test/tc_axlsx.rb +39 -0
  147. data/test/tc_axlsx.rb~ +0 -0
  148. data/test/tc_helper.rb +3 -0
  149. data/test/tc_helper.rb~ +3 -0
  150. data/test/tc_package.rb +13 -10
  151. data/test/util/tc_simple_typed_list.rb +8 -9
  152. data/test/util/tc_validators.rb +7 -8
  153. data/test/workbook/tc_shared_strings_table.rb +5 -6
  154. data/test/workbook/tc_workbook.rb +24 -6
  155. data/test/workbook/worksheet/table/tc_table.rb +71 -0
  156. data/test/workbook/worksheet/table/tc_table.rb~ +72 -0
  157. data/test/workbook/worksheet/tc_cell.rb +24 -10
  158. data/test/workbook/worksheet/tc_col.rb +59 -0
  159. data/test/workbook/worksheet/tc_col.rb~ +10 -0
  160. data/test/workbook/worksheet/tc_date_time_converter.rb +1 -2
  161. data/test/workbook/worksheet/tc_page_margins.rb +6 -9
  162. data/test/workbook/worksheet/tc_row.rb +26 -12
  163. data/test/workbook/worksheet/tc_worksheet.rb +134 -68
  164. metadata +150 -90
  165. data/test/drawing/tc_hyperlink.rb~ +0 -71
  166. data/test/workbook/tc_shared_strings_table.rb~ +0 -8
  167. data/test/workbook/worksheet/tc_date_time_converter.rb~ +0 -69
@@ -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
@@ -120,7 +120,7 @@ module Axlsx
120
120
  end
121
121
 
122
122
  # Drastically simplifies style creation and management.
123
- # @return [Integer]
123
+ # @return [Integer]
124
124
  # @option options [String] fg_color The text color
125
125
  # @option options [Integer] sz The text size
126
126
  # @option options [Boolean] b Indicates if the text should be bold
@@ -133,13 +133,13 @@ module Axlsx
133
133
  # @option options [String] font_name The name of the font to use
134
134
  # @option options [Integer] num_fmt The number format to apply
135
135
  # @option options [String] format_code The formatting to apply. If this is specified, num_fmt is ignored.
136
- # @option options [Integer] border The border style to use.
136
+ # @option options [Integer] border The border style to use.
137
137
  # @option options [String] bg_color The background color to apply to the cell
138
138
  # @option options [Boolean] hidden Indicates if the cell should be hidden
139
139
  # @option options [Boolean] locked Indicates if the cell should be locked
140
140
  # @option options [Hash] alignment A hash defining any of the attributes used in CellAlignment
141
141
  # @see CellAlignment
142
- #
142
+ #
143
143
  # @example You Got Style
144
144
  # require "rubygems" # if that is your preferred way to manage gems!
145
145
  # require "axlsx"
@@ -148,7 +148,7 @@ module Axlsx
148
148
  # ws = p.workbook.add_worksheet
149
149
  #
150
150
  # # black text on a white background at 14pt with thin borders!
151
- # title = ws.style.add_style(:bg_color => "FFFF0000", :fg_color=>"#FF000000", :sz=>14, :border=>Axlsx::STYLE_THIN_BORDER
151
+ # title = ws.style.add_style(:bg_color => "FFFF0000", :fg_color=>"#FF000000", :sz=>14, :border=> {:style => :thin, :color => "FFFF0000"}
152
152
  #
153
153
  # ws.add_row :values => ["Least Popular Pets"]
154
154
  # ws.add_row :values => ["", "Dry Skinned Reptiles", "Bald Cats", "Violent Parrots"], :style=>title
@@ -165,15 +165,15 @@ module Axlsx
165
165
  # ws = p.workbook.add_worksheet
166
166
  #
167
167
  # # define your styles
168
- # title = ws.style.add_style(:bg_color => "FFFF0000",
168
+ # title = ws.style.add_style(:bg_color => "FFFF0000",
169
169
  # :fg_color=>"#FF000000",
170
- # :border=>Axlsx::STYLE_THIN_BORDER,
170
+ # :border=>Axlsx::STYLE_THIN_BORDER,
171
171
  # :alignment=>{:horizontal => :center})
172
172
  #
173
173
  # date_time = ws.style.add_style(:num_fmt => Axlsx::NUM_FMT_YYYYMMDDHHMMSS,
174
174
  # :border=>Axlsx::STYLE_THIN_BORDER)
175
175
  #
176
- # percent = ws.style.add_style(:num_fmt => Axlsx::NUM_FMT_PERCENT,
176
+ # percent = ws.style.add_style(:num_fmt => Axlsx::NUM_FMT_PERCENT,
177
177
  # :border=>Axlsx::STYLE_THIN_BORDER)
178
178
  #
179
179
  # currency = ws.style.add_style(:format_code=>"¥#,##0;[Red]¥-#,##0",
@@ -190,7 +190,7 @@ module Axlsx
190
190
  # f = File.open('example_you_got_style.xlsx', 'w')
191
191
  # p.serialize(f)
192
192
  def add_style(options={})
193
-
193
+
194
194
  numFmtId = if options[:format_code]
195
195
  n = @numFmts.map{ |f| f.numFmtId }.max + 1
196
196
  numFmts << NumFmt.new(:numFmtId => n, :formatCode=> options[:format_code])
@@ -198,19 +198,29 @@ module Axlsx
198
198
  else
199
199
  options[:num_fmt] || 0
200
200
  end
201
-
201
+
202
202
  borderId = options[:border] || 0
203
203
 
204
+ if borderId.is_a?(Hash)
205
+ raise ArgumentError, "border hash definitions must include both style and color" unless borderId.keys.include?(:style) && borderId.keys.include?(:color)
206
+
207
+ s = borderId.delete :style
208
+ c = borderId.delete :color
209
+ border = Border.new
210
+ [:left, :right, :top, :bottom].each {|pr| border.prs << BorderPr.new(:name => pr, :style=>s, :color => Color.new(:rgb => c))}
211
+ borderId = self.borders << border
212
+ end
213
+
204
214
  raise ArgumentError, "Invalid borderId" unless borderId < borders.size
205
-
215
+
206
216
  fill = if options[:bg_color]
207
217
  color = Color.new(:rgb=>options[:bg_color])
208
218
  pattern = PatternFill.new(:patternType =>:solid, :fgColor=>color)
209
- fills << Fill.new(pattern)
219
+ fills << Fill.new(pattern)
210
220
  else
211
221
  0
212
222
  end
213
-
223
+
214
224
  fontId = if (options.values_at(:fg_color, :sz, :b, :i, :u, :strike, :outline, :shadow, :charset, :family, :font_name).length)
215
225
  font = Font.new()
216
226
  [:b, :i, :u, :strike, :outline, :shadow, :charset, :family, :sz].each { |k| font.send("#{k}=", options[k]) unless options[k].nil? }
@@ -218,42 +228,41 @@ module Axlsx
218
228
  font.name = options[:font_name] unless options[:font_name].nil?
219
229
  fonts << font
220
230
  else
221
- 0
231
+ 0
222
232
  end
223
-
233
+
224
234
  applyProtection = (options[:hidden] || options[:locked]) ? 1 : 0
225
-
235
+
226
236
  xf = Xf.new(:fillId => fill, :fontId=>fontId, :applyFill=>1, :applyFont=>1, :numFmtId=>numFmtId, :borderId=>borderId, :applyProtection=>applyProtection)
227
237
 
228
238
  xf.applyNumberFormat = true if xf.numFmtId > 0
229
239
  xf.applyBorder = true if borderId > 0
230
-
240
+
231
241
  if options[:alignment]
232
242
  xf.alignment = CellAlignment.new(options[:alignment])
243
+ xf.applyAlignment = true
233
244
  end
234
-
245
+
235
246
  if applyProtection
236
247
  xf.protection = CellProtection.new(options)
237
248
  end
238
-
249
+
239
250
  cellXfs << xf
240
251
  end
241
-
242
- # Serializes the styles document
252
+
253
+ # Serializes the object
254
+ # @param [String] str
243
255
  # @return [String]
244
- def to_xml()
245
- builder = Nokogiri::XML::Builder.new(:encoding => ENCODING) do |xml|
246
- xml.styleSheet(:xmlns => XML_NS) {
247
- [:numFmts, :fonts, :fills, :borders, :cellStyleXfs, :cellXfs, :cellStyles, :dxfs, :tableStyles].each do |key|
248
- self.instance_values[key.to_s].to_xml(xml) unless self.instance_values[key.to_s].nil?
249
- end
250
- }
256
+ def to_xml_string(str = '')
257
+ str << '<styleSheet xmlns="' << XML_NS << '">'
258
+ [:numFmts, :fonts, :fills, :borders, :cellStyleXfs, :cellXfs, :cellStyles, :dxfs, :tableStyles].each do |key|
259
+ self.instance_values[key.to_s].to_xml_string(str) unless self.instance_values[key.to_s].nil?
251
260
  end
252
- builder.to_xml(:save_with => 0)
261
+ str << '</styleSheet>'
253
262
  end
254
263
 
255
264
  private
256
- # Creates the default set of styles the exel requires to be valid as well as setting up the
265
+ # Creates the default set of styles the exel requires to be valid as well as setting up the
257
266
  # Axlsx::STYLE_THIN_BORDER
258
267
  def load_default_styles
259
268
  @numFmts = SimpleTypedList.new NumFmt, 'numFmts'
@@ -274,8 +283,8 @@ module Axlsx
274
283
  @borders = SimpleTypedList.new Border, 'borders'
275
284
  @borders << Border.new
276
285
  black_border = Border.new
277
- [:left, :right, :top, :bottom].each do |item|
278
- black_border.prs << BorderPr.new(:name=>item, :style=>:thin, :color=>Color.new(:rgb=>"FF000000"))
286
+ [:left, :right, :top, :bottom].each do |item|
287
+ black_border.prs << BorderPr.new(:name=>item, :style=>:thin, :color=>Color.new(:rgb=>"FF000000"))
279
288
  end
280
289
  @borders << black_border
281
290
  @borders.lock
@@ -300,4 +309,4 @@ module Axlsx
300
309
  end
301
310
  end
302
311
  end
303
-
312
+
@@ -36,13 +36,18 @@ module Axlsx
36
36
  # @see table
37
37
  def table=(v) Axlsx::validate_boolean v; @table=v end
38
38
 
39
- # Serializes the table style
40
- # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
39
+ # Serializes the object
40
+ # @param [String] str
41
41
  # @return [String]
42
- def to_xml(xml)
42
+ def to_xml_string(str = '')
43
43
  attr = self.instance_values.select { |k, v| [:name, :pivot, :table].include? k }
44
44
  attr[:count] = self.size
45
- xml.tableStyle(attr) { self.each { |table_style_el| table_style_el.to_xml(xml) } }
45
+ str << '<tableStyle '
46
+ str << attr.map { |key, value| '' << key.to_s << '="' << value.to_s << '"' }.join(' ')
47
+ str << '>'
48
+ each { |table_style_el| table_style_el.to_xml_string(str) }
49
+ str << '</tableStyle>'
46
50
  end
51
+
47
52
  end
48
53
  end
@@ -1,7 +1,7 @@
1
1
  # encoding: UTF-8
2
2
  module Axlsx
3
- # an element of style that belongs to a table style.
4
- # @note tables and table styles are not supported in this version. This class exists in preparation for that support.
3
+ # an element of style that belongs to a table style.
4
+ # @note tables and table styles are not supported in this version. This class exists in preparation for that support.
5
5
  class TableStyleElement
6
6
  # The type of style element. The following type are allowed
7
7
  # :wholeTable
@@ -39,7 +39,7 @@ module Axlsx
39
39
  # @return [Integer]
40
40
  attr_reader :size
41
41
 
42
- # The dxfId this style element points to
42
+ # The dxfId this style element points to
43
43
  # @return [Integer]
44
44
  attr_reader :dxfId
45
45
 
@@ -62,11 +62,14 @@ module Axlsx
62
62
  # @see dxfId
63
63
  def dxfId=(v) Axlsx::validate_unsigned_int v; @dxfId = v end
64
64
 
65
- # Serializes the table style element
66
- # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
65
+ # Serializes the object
66
+ # @param [String] str
67
67
  # @return [String]
68
- def to_xml(xml)
69
- xml.tableStyleElement self.instance_values
68
+ def to_xml_string(str = '')
69
+ str << '<tableStyleElement '
70
+ str << instance_values.map { |key, value| '' << key.to_s << '="' << value.to_s << '"' }.join(' ')
71
+ str << '/>'
70
72
  end
73
+
71
74
  end
72
75
  end
@@ -11,13 +11,13 @@ module Axlsx
11
11
  # The default pivot table style. The default value is 'PivotStyleLight6'
12
12
  # @return [String]
13
13
  attr_reader :defaultPivotStyle
14
-
14
+
15
15
  # Creates a new TableStyles object that is a container for TableStyle objects
16
16
  # @option options [String] defaultTableStyle
17
17
  # @option options [String] defaultPivotStyle
18
18
  def initialize(options={})
19
19
  @defaultTableStyle = options[:defaultTableStyle] || "TableStyleMedium9"
20
- @defaultPivotStyle = options[:defaultPivotStyle] || "PivotStyleLight16"
20
+ @defaultPivotStyle = options[:defaultPivotStyle] || "PivotStyleLight16"
21
21
  super TableStyle
22
22
  end
23
23
  # @see defaultTableStyle
@@ -25,16 +25,19 @@ module Axlsx
25
25
  # @see defaultPivotStyle
26
26
  def defaultPivotStyle=(v) Axlsx::validate_string(v); @defaultPivotStyle = v; end
27
27
 
28
- # Serializes the table styles element
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)
31
+ def to_xml_string(str = '')
32
32
  attr = self.instance_values.reject {|k, v| ![:defaultTableStyle, :defaultPivotStyle].include?(k.to_sym) }
33
33
  attr[:count] = self.size
34
- xml.tableStyles(attr) {
35
- self.each { |table_style| table_style.to_xml(xml) }
36
- }
34
+ str << '<tableStyles '
35
+ str << attr.map { |key, value| '' << key.to_s << '="' << value.to_s << '"' }.join(' ')
36
+ str << '>'
37
+ each { |table_style| table_style.to_xml_string(str) }
38
+ str << '</tableStyles>'
37
39
  end
40
+
38
41
  end
39
42
 
40
43
  end
@@ -22,7 +22,7 @@ module Axlsx
22
22
  # index (0 based) of the font to be used in this style
23
23
  # @return [Integer]
24
24
  attr_reader :fontId
25
-
25
+
26
26
  # index (0 based) of the fill to be used in this style
27
27
  # @return [Integer]
28
28
  attr_reader :fillId
@@ -50,7 +50,7 @@ module Axlsx
50
50
  # indicates if the fontId should be applied
51
51
  # @return [Boolean]
52
52
  attr_reader :applyFont
53
-
53
+
54
54
  # indicates if the fillId should be applied
55
55
  # @return [Boolean]
56
56
  attr_reader :applyFill
@@ -75,7 +75,7 @@ module Axlsx
75
75
  # @option options [Integer] xfId
76
76
  # @option options [Boolean] quotePrefix
77
77
  # @option options [Boolean] pivotButton
78
- # @option options [Boolean] applyNumberFormat
78
+ # @option options [Boolean] applyNumberFormat
79
79
  # @option options [Boolean] applyFont
80
80
  # @option options [Boolean] applyFill
81
81
  # @option options [Boolean] applyBorder
@@ -87,8 +87,8 @@ module Axlsx
87
87
  options.each do |o|
88
88
  self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
89
89
  end
90
- end
91
-
90
+ end
91
+
92
92
  # @see Xf#alignment
93
93
  def alignment=(v) DataTypeValidator.validate "Xf.alignment", CellAlignment, v; @alignment = v end
94
94
 
@@ -96,44 +96,48 @@ module Axlsx
96
96
  def protection=(v) DataTypeValidator.validate "Xf.protection", CellProtection, v; @protection = v end
97
97
 
98
98
  # @see numFmtId
99
- def numFmtId=(v) Axlsx::validate_unsigned_int v; @numFmtId = v end
99
+ def numFmtId=(v) Axlsx::validate_unsigned_int v; @numFmtId = v end
100
100
 
101
101
  # @see fontId
102
- def fontId=(v) Axlsx::validate_unsigned_int v; @fontId = v end
102
+ def fontId=(v) Axlsx::validate_unsigned_int v; @fontId = v end
103
103
  # @see fillId
104
- def fillId=(v) Axlsx::validate_unsigned_int v; @fillId = v end
104
+ def fillId=(v) Axlsx::validate_unsigned_int v; @fillId = v end
105
105
  # @see borderId
106
- def borderId=(v) Axlsx::validate_unsigned_int v; @borderId = v end
106
+ def borderId=(v) Axlsx::validate_unsigned_int v; @borderId = v end
107
107
  # @see xfId
108
- def xfId=(v) Axlsx::validate_unsigned_int v; @xfId = v end
108
+ def xfId=(v) Axlsx::validate_unsigned_int v; @xfId = v end
109
109
  # @see quotePrefix
110
- def quotePrefix=(v) Axlsx::validate_boolean v; @quotePrefix = v end
110
+ def quotePrefix=(v) Axlsx::validate_boolean v; @quotePrefix = v end
111
111
  # @see pivotButton
112
- def pivotButton=(v) Axlsx::validate_boolean v; @pivotButton = v end
112
+ def pivotButton=(v) Axlsx::validate_boolean v; @pivotButton = v end
113
113
  # @see applyNumberFormat
114
- def applyNumberFormat=(v) Axlsx::validate_boolean v; @applyNumberFormat = v end
114
+ def applyNumberFormat=(v) Axlsx::validate_boolean v; @applyNumberFormat = v end
115
115
  # @see applyFont
116
- def applyFont=(v) Axlsx::validate_boolean v; @applyFont = v end
116
+ def applyFont=(v) Axlsx::validate_boolean v; @applyFont = v end
117
117
  # @see applyFill
118
- def applyFill=(v) Axlsx::validate_boolean v; @applyFill = v end
118
+ def applyFill=(v) Axlsx::validate_boolean v; @applyFill = v end
119
119
 
120
120
  # @see applyBorder
121
- def applyBorder=(v) Axlsx::validate_boolean v; @applyBorder = v end
121
+ def applyBorder=(v) Axlsx::validate_boolean v; @applyBorder = v end
122
122
 
123
123
  # @see applyAlignment
124
- def applyAlignment=(v) Axlsx::validate_boolean v; @applyAlignment = v end
124
+ def applyAlignment=(v) Axlsx::validate_boolean v; @applyAlignment = v end
125
125
 
126
126
  # @see applyProtection
127
- def applyProtection=(v) Axlsx::validate_boolean v; @applyProtection = v end
127
+ def applyProtection=(v) Axlsx::validate_boolean v; @applyProtection = v end
128
128
 
129
- # Serializes the xf elemen
130
- # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
129
+ # Serializes the object
130
+ # @param [String] str
131
131
  # @return [String]
132
- def to_xml(xml)
133
- xml.xf(self.instance_values.reject { |k, v| [:alignment, :protection, :extList, :name].include? k.to_sym}) {
134
- alignment.to_xml(xml) if self.alignment
135
- protection.to_xml(xml) if self.protection
136
- }
132
+ def to_xml_string(str = '')
133
+ str << '<xf '
134
+ h = instance_values.reject { |k, v| [:alignment, :protection, :extList, :name].include? k.to_sym}
135
+ str << h.map { |key, value| '' << key.to_s << '="' << value.to_s << '"' }.join(' ')
136
+ str << '>'
137
+ alignment.to_xml_string(str) if self.alignment
138
+ protection.to_xml_string(str) if self.protection
139
+ str << '</xf>'
137
140
  end
141
+
138
142
  end
139
143
  end