axlsx 1.3.1 → 1.3.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.
Files changed (99) hide show
  1. data/README.md +13 -5
  2. data/examples/colored_links.rb +59 -0
  3. data/examples/example.rb +421 -266
  4. data/examples/example.xlsx +0 -0
  5. data/examples/example_streamed.xlsx +0 -0
  6. data/examples/finance.rb +82 -0
  7. data/examples/finance.xlsx +0 -0
  8. data/examples/financial.xlsx +0 -0
  9. data/examples/no-use_autowidth.xlsx +0 -0
  10. data/examples/shared_strings_example.xlsx +0 -0
  11. data/examples/where_is_my_color.xlsx +0 -0
  12. data/lib/axlsx.rb +11 -4
  13. data/lib/axlsx/content_type/abstract_content_type.rb +32 -0
  14. data/lib/axlsx/content_type/content_type.rb +1 -1
  15. data/lib/axlsx/content_type/default.rb +6 -37
  16. data/lib/axlsx/content_type/override.rb +6 -38
  17. data/lib/axlsx/doc_props/app.rb +7 -4
  18. data/lib/axlsx/drawing/axis.rb +3 -3
  19. data/lib/axlsx/drawing/chart.rb +2 -3
  20. data/lib/axlsx/drawing/d_lbls.rb +21 -31
  21. data/lib/axlsx/drawing/drawing.rb +6 -0
  22. data/lib/axlsx/drawing/hyperlink.rb +40 -32
  23. data/lib/axlsx/drawing/marker.rb +13 -13
  24. data/lib/axlsx/drawing/num_data.rb +6 -6
  25. data/lib/axlsx/drawing/num_data_source.rb +17 -16
  26. data/lib/axlsx/drawing/one_cell_anchor.rb +20 -22
  27. data/lib/axlsx/drawing/pic.rb +25 -27
  28. data/lib/axlsx/drawing/picture_locking.rb +12 -44
  29. data/lib/axlsx/drawing/scaling.rb +13 -13
  30. data/lib/axlsx/drawing/scatter_chart.rb +3 -3
  31. data/lib/axlsx/drawing/series.rb +3 -6
  32. data/lib/axlsx/drawing/str_data.rb +3 -3
  33. data/lib/axlsx/drawing/str_val.rb +7 -8
  34. data/lib/axlsx/drawing/view_3D.rb +51 -37
  35. data/lib/axlsx/drawing/vml_shape.rb +23 -23
  36. data/lib/axlsx/package.rb +14 -16
  37. data/lib/axlsx/stylesheet/border.rb +29 -20
  38. data/lib/axlsx/stylesheet/border_pr.rb +5 -4
  39. data/lib/axlsx/stylesheet/cell_alignment.rb +55 -29
  40. data/lib/axlsx/stylesheet/cell_protection.rb +7 -4
  41. data/lib/axlsx/stylesheet/cell_style.rb +19 -14
  42. data/lib/axlsx/stylesheet/color.rb +19 -16
  43. data/lib/axlsx/stylesheet/dxf.rb +4 -4
  44. data/lib/axlsx/stylesheet/font.rb +22 -22
  45. data/lib/axlsx/stylesheet/gradient_fill.rb +45 -21
  46. data/lib/axlsx/stylesheet/num_fmt.rb +22 -13
  47. data/lib/axlsx/stylesheet/pattern_fill.rb +12 -21
  48. data/lib/axlsx/stylesheet/styles.rb +1 -1
  49. data/lib/axlsx/stylesheet/table_style.rb +17 -16
  50. data/lib/axlsx/stylesheet/table_style_element.rb +15 -11
  51. data/lib/axlsx/stylesheet/table_styles.rb +14 -11
  52. data/lib/axlsx/stylesheet/xf.rb +28 -26
  53. data/lib/axlsx/util/accessors.rb +49 -0
  54. data/lib/axlsx/util/options_parser.rb +15 -0
  55. data/lib/axlsx/util/serialized_attributes.rb +46 -0
  56. data/lib/axlsx/util/simple_typed_list.rb +16 -4
  57. data/lib/axlsx/version.rb +1 -1
  58. data/lib/axlsx/workbook/defined_name.rb +13 -58
  59. data/lib/axlsx/workbook/workbook.rb +27 -1
  60. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +11 -19
  61. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +20 -27
  62. data/lib/axlsx/workbook/worksheet/cell.rb +38 -39
  63. data/lib/axlsx/workbook/worksheet/cfvo.rb +15 -15
  64. data/lib/axlsx/workbook/worksheet/cfvos.rb +18 -0
  65. data/lib/axlsx/workbook/worksheet/col.rb +34 -27
  66. data/lib/axlsx/workbook/worksheet/color_scale.rb +7 -13
  67. data/lib/axlsx/workbook/worksheet/comment.rb +14 -11
  68. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +11 -11
  69. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +27 -25
  70. data/lib/axlsx/workbook/worksheet/data_bar.rb +44 -34
  71. data/lib/axlsx/workbook/worksheet/data_validation.rb +61 -62
  72. data/lib/axlsx/workbook/worksheet/dimension.rb +0 -1
  73. data/lib/axlsx/workbook/worksheet/icon_set.rb +20 -20
  74. data/lib/axlsx/workbook/worksheet/page_margins.rb +21 -19
  75. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +6 -9
  76. data/lib/axlsx/workbook/worksheet/page_setup.rb +20 -19
  77. data/lib/axlsx/workbook/worksheet/pane.rb +48 -51
  78. data/lib/axlsx/workbook/worksheet/print_options.rb +8 -30
  79. data/lib/axlsx/workbook/worksheet/protected_range.rb +16 -13
  80. data/lib/axlsx/workbook/worksheet/selection.rb +30 -38
  81. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +6 -26
  82. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +19 -57
  83. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +51 -155
  84. data/lib/axlsx/workbook/worksheet/sheet_view.rb +68 -234
  85. data/lib/axlsx/workbook/worksheet/table.rb +16 -18
  86. data/lib/axlsx/workbook/worksheet/table_style_info.rb +10 -27
  87. data/lib/axlsx/workbook/worksheet/worksheet.rb +6 -7
  88. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +1 -1
  89. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +11 -33
  90. data/test/content_type/tc_default.rb +0 -11
  91. data/test/content_type/tc_override.rb +0 -13
  92. data/test/drawing/tc_d_lbls.rb +14 -4
  93. data/test/tc_axlsx.rb +20 -2
  94. data/test/workbook/tc_defined_name.rb +2 -2
  95. data/test/workbook/tc_workbook.rb +15 -0
  96. data/test/workbook/worksheet/tc_col.rb +11 -1
  97. data/test/workbook/worksheet/tc_pane.rb +5 -45
  98. data/test/workbook/worksheet/tc_selection.rb +9 -48
  99. metadata +13 -3
@@ -5,24 +5,50 @@ module Axlsx
5
5
  # @note The recommended way to manage data validations is via Worksheet#add_data_validation
6
6
  # @see Worksheet#add_data_validation
7
7
  class DataValidation
8
-
8
+ include Axlsx::OptionsParser
9
+
10
+ # Creates a new {DataValidation} object
11
+ # @option options [String] formula1
12
+ # @option options [String] formula2
13
+ # @option options [Boolean] allowBlank - A boolean value indicating whether the data validation allows the use of empty or blank entries.
14
+ # @option options [String] error - Message text of error alert.
15
+ # @option options [Symbol] errorStyle - The style of error alert used for this data validation.
16
+ # @option options [String] errorTitle - itle bar text of error alert.
17
+ # @option options [Symbol] operator - The relational operator used with this data validation.
18
+ # @option options [String] prompt - Message text of input prompt.
19
+ # @option options [String] promptTitle - Title bar text of input prompt.
20
+ # @option options [Boolean] showDropDown - A boolean value indicating whether to display a dropdown combo box for a list type data validation
21
+ # @option options [Boolean] showErrorMessage - A boolean value indicating whether to display the error alert message when an invalid value has been entered, according to the criteria specified.
22
+ # @option options [Boolean] showInputMessage - A boolean value indicating whether to display the input prompt message.
23
+ # @option options [String] sqref - Range over which data validation is applied, in "A1:B2" format.
24
+ # @option options [Symbol] type - The type of data validation.
25
+ def initialize(options={})
26
+ # defaults
27
+ @formula1 = @formula2 = @error = @errorTitle = @operator = @prompt = @promptTitle = @sqref = nil
28
+ @allowBlank = @showErrorMessage = true
29
+ @showDropDown = @showInputMessage = false
30
+ @type = :none
31
+ @errorStyle = :stop
32
+ parse_options options
33
+ end
34
+
9
35
  # instance values that must be serialized as their own elements - e.g. not attributes.
10
36
  CHILD_ELEMENTS = [:formula1, :formula2]
11
-
37
+
12
38
  # Formula1
13
39
  # Available for type whole, decimal, date, time, textLength, list, custom
14
40
  # @see type
15
41
  # @return [String]
16
42
  # default nil
17
43
  attr_reader :formula1
18
-
44
+
19
45
  # Formula2
20
46
  # Available for type whole, decimal, date, time, textLength
21
47
  # @see type
22
48
  # @return [String]
23
49
  # default nil
24
50
  attr_reader :formula2
25
-
51
+
26
52
  # Allow Blank
27
53
  # A boolean value indicating whether the data validation allows the use of empty or blank
28
54
  # entries. 1 means empty entries are OK and do not violate the validation constraints.
@@ -31,7 +57,7 @@ module Axlsx
31
57
  # @return [Boolean]
32
58
  # default true
33
59
  attr_reader :allowBlank
34
-
60
+
35
61
  # Error Message
36
62
  # Message text of error alert.
37
63
  # Available for type whole, decimal, date, time, textLength, list, custom
@@ -39,7 +65,7 @@ module Axlsx
39
65
  # @return [String]
40
66
  # default nil
41
67
  attr_reader :error
42
-
68
+
43
69
  # Error Style (ST_DataValidationErrorStyle)
44
70
  # The style of error alert used for this data validation.
45
71
  # Options are:
@@ -51,7 +77,7 @@ module Axlsx
51
77
  # @return [Symbol]
52
78
  # default :stop
53
79
  attr_reader :errorStyle
54
-
80
+
55
81
  # Error Title
56
82
  # Title bar text of error alert.
57
83
  # Available for type whole, decimal, date, time, textLength, list, custom
@@ -59,7 +85,7 @@ module Axlsx
59
85
  # @return [String]
60
86
  # default nil
61
87
  attr_reader :errorTitle
62
-
88
+
63
89
  # Operator (ST_DataValidationOperator)
64
90
  # The relational operator used with this data validation.
65
91
  # Options are:
@@ -76,7 +102,7 @@ module Axlsx
76
102
  # @return [Symbol]
77
103
  # default nil
78
104
  attr_reader :operator
79
-
105
+
80
106
  # Input prompt
81
107
  # Message text of input prompt.
82
108
  # Available for type whole, decimal, date, time, textLength, list, custom
@@ -84,7 +110,7 @@ module Axlsx
84
110
  # @return [String]
85
111
  # default nil
86
112
  attr_reader :prompt
87
-
113
+
88
114
  # Prompt title
89
115
  # Title bar text of input prompt.
90
116
  # Available for type whole, decimal, date, time, textLength, list, custom
@@ -92,7 +118,7 @@ module Axlsx
92
118
  # @return [String]
93
119
  # default nil
94
120
  attr_reader :promptTitle
95
-
121
+
96
122
  # Show drop down
97
123
  # A boolean value indicating whether to display a dropdown combo box for a list type data
98
124
  # validation. Be careful: false shows the dropdown list!
@@ -101,7 +127,7 @@ module Axlsx
101
127
  # @return [Boolean]
102
128
  # default false
103
129
  attr_reader :showDropDown
104
-
130
+
105
131
  # Show error message
106
132
  # A boolean value indicating whether to display the error alert message when an invalid
107
133
  # value has been entered, according to the criteria specified.
@@ -110,7 +136,7 @@ module Axlsx
110
136
  # @return [Boolean]
111
137
  # default false
112
138
  attr_reader :showErrorMessage
113
-
139
+
114
140
  # Show input message
115
141
  # A boolean value indicating whether to display the input prompt message.
116
142
  # Available for type whole, decimal, date, time, textLength, list, custom
@@ -118,14 +144,14 @@ module Axlsx
118
144
  # @return [Boolean]
119
145
  # default false
120
146
  attr_reader :showInputMessage
121
-
147
+
122
148
  # Range over which data validation is applied, in "A1:B2" format
123
149
  # Available for type whole, decimal, date, time, textLength, list, custom
124
150
  # @see type
125
151
  # @return [String]
126
152
  # default nil
127
153
  attr_reader :sqref
128
-
154
+
129
155
  # The type (ST_DataValidationType) of data validation.
130
156
  # Options are:
131
157
  # * custom: Data validation which uses a custom formula to check the cell value.
@@ -139,83 +165,56 @@ module Axlsx
139
165
  # @return [Symbol]
140
166
  # default none
141
167
  attr_reader :type
142
-
143
- # Creates a new {DataValidation} object
144
- # @option options [String] formula1
145
- # @option options [String] formula2
146
- # @option options [Boolean] allowBlank - A boolean value indicating whether the data validation allows the use of empty or blank entries.
147
- # @option options [String] error - Message text of error alert.
148
- # @option options [Symbol] errorStyle - The style of error alert used for this data validation.
149
- # @option options [String] errorTitle - itle bar text of error alert.
150
- # @option options [Symbol] operator - The relational operator used with this data validation.
151
- # @option options [String] prompt - Message text of input prompt.
152
- # @option options [String] promptTitle - Title bar text of input prompt.
153
- # @option options [Boolean] showDropDown - A boolean value indicating whether to display a dropdown combo box for a list type data validation
154
- # @option options [Boolean] showErrorMessage - A boolean value indicating whether to display the error alert message when an invalid value has been entered, according to the criteria specified.
155
- # @option options [Boolean] showInputMessage - A boolean value indicating whether to display the input prompt message.
156
- # @option options [String] sqref - Range over which data validation is applied, in "A1:B2" format.
157
- # @option options [Symbol] type - The type of data validation.
158
- def initialize(options={})
159
- # defaults
160
- @formula1 = @formula2 = @error = @errorTitle = @operator = @prompt = @promptTitle = @sqref = nil
161
- @allowBlank = @showErrorMessage = true
162
- @showDropDown = @showInputMessage = false
163
- @type = :none
164
- @errorStyle = :stop
165
-
166
- options.each do |o|
167
- self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
168
- end
169
- end
170
-
168
+
169
+
171
170
  # @see formula1
172
171
  def formula1=(v); Axlsx::validate_string(v); @formula1 = v end
173
-
172
+
174
173
  # @see formula2
175
174
  def formula2=(v); Axlsx::validate_string(v); @formula2 = v end
176
-
175
+
177
176
  # @see allowBlank
178
177
  def allowBlank=(v); Axlsx::validate_boolean(v); @allowBlank = v end
179
-
178
+
180
179
  # @see error
181
180
  def error=(v); Axlsx::validate_string(v); @error = v end
182
-
181
+
183
182
  # @see errorStyle
184
183
  def errorStyle=(v); Axlsx::validate_data_validation_error_style(v); @errorStyle = v end
185
-
184
+
186
185
  # @see errorTitle
187
186
  def errorTitle=(v); Axlsx::validate_string(v); @errorTitle = v end
188
-
187
+
189
188
  # @see operator
190
189
  def operator=(v); Axlsx::validate_data_validation_operator(v); @operator = v end
191
-
190
+
192
191
  # @see prompt
193
192
  def prompt=(v); Axlsx::validate_string(v); @prompt = v end
194
-
193
+
195
194
  # @see promptTitle
196
195
  def promptTitle=(v); Axlsx::validate_string(v); @promptTitle = v end
197
-
196
+
198
197
  # @see showDropDown
199
198
  def showDropDown=(v); Axlsx::validate_boolean(v); @showDropDown = v end
200
-
199
+
201
200
  # @see showErrorMessage
202
201
  def showErrorMessage=(v); Axlsx::validate_boolean(v); @showErrorMessage = v end
203
-
202
+
204
203
  # @see showInputMessage
205
204
  def showInputMessage=(v); Axlsx::validate_boolean(v); @showInputMessage = v end
206
-
205
+
207
206
  # @see sqref
208
207
  def sqref=(v); Axlsx::validate_string(v); @sqref = v end
209
-
208
+
210
209
  # @see type
211
210
  def type=(v); Axlsx::validate_data_validation_type(v); @type = v end
212
-
211
+
213
212
  # Serializes the data validation
214
213
  # @param [String] str
215
214
  # @return [String]
216
215
  def to_xml_string(str = '')
217
216
  valid_attributes = get_valid_attributes
218
-
217
+
219
218
  str << '<dataValidation '
220
219
  str << instance_values.map { |key, value| '' << key << '="' << value.to_s << '"' if (valid_attributes.include?(key.to_sym) and not CHILD_ELEMENTS.include?(key.to_sym)) }.join(' ')
221
220
  str << '>'
@@ -223,11 +222,11 @@ module Axlsx
223
222
  str << '<formula2>' << self.formula2 << '</formula2>' if @formula2 and valid_attributes.include?(:formula2)
224
223
  str << '</dataValidation>'
225
224
  end
226
-
225
+
227
226
  private
228
227
  def get_valid_attributes
229
228
  attributes = [:allowBlank, :error, :errorStyle, :errorTitle, :prompt, :promptTitle, :showErrorMessage, :showInputMessage, :sqref, :type ]
230
-
229
+
231
230
  if [:whole, :decimal, :data, :time, :textLength].include?(@type)
232
231
  attributes << [:operator, :formula1]
233
232
  attributes << [:formula2] if [:between, :notBetween].include?(@operator)
@@ -238,7 +237,7 @@ module Axlsx
238
237
  else
239
238
  attributes = []
240
239
  end
241
-
240
+
242
241
  attributes.flatten!
243
242
  end
244
243
  end
@@ -17,7 +17,6 @@ module Axlsx
17
17
  @@default_last ||= 'AA200'
18
18
  end
19
19
 
20
-
21
20
  # Creates a new dimension object
22
21
  # @param[Worksheet] worksheet - the worksheet this dimension applies
23
22
  # to.
@@ -7,8 +7,24 @@ module Axlsx
7
7
  # @see ConditionalFormattingRule#initialize
8
8
  class IconSet
9
9
 
10
- # instance values that must be serialized as their own elements - e.g. not attributes.
11
- CHILD_ELEMENTS = [:value_objects]
10
+ include Axlsx::OptionsParser
11
+ include Axlsx::SerializedAttributes
12
+
13
+ # Creates a new icon set object
14
+ # @option options [String] iconSet
15
+ # @option options [Boolean] reverse
16
+ # @option options [Boolean] percent
17
+ # @option options [Boolean] showValue
18
+ def initialize(options = {})
19
+ @percent = @showValue = true
20
+ @reverse = false
21
+ @iconSet = "3TrafficLights1"
22
+ initialize_value_objects
23
+ parse_options options
24
+ yield self if block_given?
25
+ end
26
+
27
+ serializable_attributes :iconSet, :percent, :reverse, :showValue
12
28
 
13
29
  # The icon set to display.
14
30
  # Allowed values are: 3Arrows, 3ArrowsGray, 3Flags, 3TrafficLights1, 3TrafficLights2, 3Signs, 3Symbols, 3Symbols2, 4Arrows, 4ArrowsGray, 4RedToBlack, 4Rating, 4TrafficLights, 5Arrows, 5ArrowsGray, 5Rating, 5Quarters
@@ -31,23 +47,7 @@ module Axlsx
31
47
  # @return [Boolean]
32
48
  attr_reader :showValue
33
49
 
34
- # Creates a new icon set object
35
- # @option options [String] iconSet
36
- # @option options [Boolean] reverse
37
- # @option options [Boolean] percent
38
- # @option options [Boolean] showValue
39
- def initialize(options = {})
40
- @percent = @showValue = true
41
- @reverse = false
42
- @iconSet = "3TrafficLights1"
43
- initialize_value_objects
44
- options.each do |o|
45
- self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
46
- end
47
- yield self if block_given?
48
- end
49
-
50
- # @see iconSet
50
+ # @see iconSet
51
51
  def iconSet=(v); Axlsx::validate_icon_set(v); @iconSet = v end
52
52
 
53
53
  # @see showValue
@@ -64,7 +64,7 @@ module Axlsx
64
64
  # @return [String]
65
65
  def to_xml_string(str="")
66
66
  str << '<iconSet '
67
- str << instance_values.map { |key, value| '' << key << '="' << value.to_s << '"' unless CHILD_ELEMENTS.include?(key.to_sym) }.join(' ')
67
+ serialized_attributes str
68
68
  str << '>'
69
69
  @value_objects.each { |cfvo| cfvo.to_xml_string(str) }
70
70
  str << '</iconSet>'
@@ -10,6 +10,26 @@ module Axlsx
10
10
  # @see Worksheet#initialize
11
11
  class PageMargins
12
12
 
13
+ include Axlsx::OptionsParser
14
+ include Axlsx::SerializedAttributes
15
+
16
+ # Creates a new PageMargins object
17
+ # @option options [Numeric] left The left margin in inches
18
+ # @option options [Numeric] right The right margin in inches
19
+ # @option options [Numeric] bottom The bottom margin in inches
20
+ # @option options [Numeric] top The top margin in inches
21
+ # @option options [Numeric] header The header margin in inches
22
+ # @option options [Numeric] footer The footer margin in inches
23
+ def initialize(options={})
24
+ # Default values taken from MS Excel for Mac 2011
25
+ @left = @right = DEFAULT_LEFT_RIGHT
26
+ @top = @bottom = DEFAULT_TOP_BOTTOM
27
+ @header = @footer = DEFAULT_HEADER_FOOTER
28
+ parse_options options
29
+ end
30
+
31
+ serializable_attributes :left, :right, :bottom, :top, :header, :footer
32
+
13
33
  # Default left and right margin (in inches)
14
34
  DEFAULT_LEFT_RIGHT = 0.75
15
35
 
@@ -43,24 +63,6 @@ module Axlsx
43
63
  # @return [Float]
44
64
  attr_reader :footer
45
65
 
46
- # Creates a new PageMargins object
47
- # @option options [Numeric] left The left margin in inches
48
- # @option options [Numeric] right The right margin in inches
49
- # @option options [Numeric] bottom The bottom margin in inches
50
- # @option options [Numeric] top The top margin in inches
51
- # @option options [Numeric] header The header margin in inches
52
- # @option options [Numeric] footer The footer margin in inches
53
- def initialize(options={})
54
- # Default values taken from MS Excel for Mac 2011
55
- @left = @right = DEFAULT_LEFT_RIGHT
56
- @top = @bottom = DEFAULT_TOP_BOTTOM
57
- @header = @footer = DEFAULT_HEADER_FOOTER
58
-
59
- options.each do |o|
60
- self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
61
- end
62
- end
63
-
64
66
  # Set some or all margins at once.
65
67
  # @param [Hash] margins the margins to set (possible keys are :left, :right, :top, :bottom, :header and :footer).
66
68
  def set(margins)
@@ -90,7 +92,7 @@ module Axlsx
90
92
  # @see #custom_margins_specified?
91
93
  def to_xml_string(str = '')
92
94
  str << '<pageMargins '
93
- str << instance_values.map { |key, value| '' << key << '="' << value.to_s << '"' }.join(' ')
95
+ serialized_attributes str
94
96
  str << '/>'
95
97
  end
96
98
  end
@@ -4,16 +4,19 @@ module Axlsx
4
4
  # This class name is not a typo, its spec.
5
5
  class PageSetUpPr
6
6
 
7
+ include Axlsx::OptionsParser
8
+ include Axlsx::SerializedAttributes
9
+
7
10
  # creates a new page setup properties object
8
11
  # @param [Hash] options
9
12
  # @option [Boolean] auto_page_breaks Flag indicating whether the sheet displays Automatic Page Breaks.
10
13
  # @option [Boolean] fit_to_page Flag indicating whether the Fit to Page print option is enabled.
11
14
  def initialize(options = {})
12
- options.each do |key, value|
13
- self.send("#{key}=",value) if self.respond_to?("#{key}=")
14
- end
15
+ parse_options options
15
16
  end
16
17
 
18
+ serializable_attributes :auto_page_breaks, :fit_to_page
19
+
17
20
  attr_reader :auto_page_breaks
18
21
  attr_reader :fit_to_page
19
22
 
@@ -37,11 +40,5 @@ module Axlsx
37
40
  def to_xml_string(str='')
38
41
  str << '<pageSetUpPr ' << serialized_attributes << '/>'
39
42
  end
40
-
41
- private
42
-
43
- def serialized_attributes
44
- instance_values.map { |key, value| "#{Axlsx.camel(key, false)}='#{value}'" }.join(' ')
45
- end
46
43
  end
47
44
  end
@@ -6,8 +6,24 @@ module Axlsx
6
6
  # @see Worksheet#initialize
7
7
  class PageSetup
8
8
 
9
+ include Axlsx::OptionsParser
10
+ include Axlsx::SerializedAttributes
11
+
12
+ # Creates a new PageSetup object
13
+ # @option options [Integer] fit_to_height Number of vertical pages to fit on
14
+ # @option options [Integer] fit_to_width Number of horizontal pages to fit on
15
+ # @option options [Symbol] orientation Orientation of the page (:default, :landscape, :portrait)
16
+ # @option options [String] paper_height Height of paper (number followed by unit identifier: "297mm", "11in")
17
+ # @option options [String] paper_width Width of paper (number followed by unit identifier: "210mm", "8.5in")
18
+ # @option options [Integer] scale Print scaling (percent value, integer ranging from 10 to 400)
19
+ # @option options [Integer] paper_size - the size of paper to use
20
+ def initialize(options = {})
21
+ parse_options options
22
+ end
23
+
24
+ serializable_attributes :fit_to_height, :fit_to_width, :orientation, :paper_height, :paper_width, :scale, :paper_size
25
+
9
26
  # TODO: Attributes defined by Open XML spec that are not implemented yet:
10
- #
11
27
  # * blackAndWhite
12
28
  # * cellComments
13
29
  # * copies
@@ -16,7 +32,6 @@ module Axlsx
16
32
  # * firstPageNumber
17
33
  # * horizontalDpi
18
34
  # * pageOrder
19
- # * paperSize
20
35
  # * useFirstPageNumber
21
36
  # * usePrinterDefaults
22
37
  # * verticalDpi
@@ -176,24 +191,10 @@ module Axlsx
176
191
  @paper_size = size
177
192
  end
178
193
 
179
- # Creates a new PageSetup object
180
- # @option options [Integer] fit_to_height Number of vertical pages to fit on
181
- # @option options [Integer] fit_to_width Number of horizontal pages to fit on
182
- # @option options [Symbol] orientation Orientation of the page (:default, :landscape, :portrait)
183
- # @option options [String] paper_height Height of paper (number followed by unit identifier: "297mm", "11in")
184
- # @option options [String] paper_width Width of paper (number followed by unit identifier: "210mm", "8.5in")
185
- # @option options [Integer] scale Print scaling (percent value, integer ranging from 10 to 400)
186
- # @option options [Integer] paper_size - the size of paper to use
187
- def initialize(options = {})
188
- set(options)
189
- end
190
-
191
- # Set some or all page settings at once.
194
+ # Set some or all page settings at once.
192
195
  # @param [Hash] options The page settings to set (possible keys are :fit_to_height, :fit_to_width, :orientation, :paper_height, :paper_width, and :scale).
193
196
  def set(options)
194
- options.each do |k, v|
195
- send("#{k}=", v) if respond_to? "#{k}="
196
- end
197
+ parse_options options
197
198
  end
198
199
 
199
200
  # @see fit_to_height
@@ -234,7 +235,7 @@ module Axlsx
234
235
  # @return [String]
235
236
  def to_xml_string(str = '')
236
237
  str << '<pageSetup '
237
- str << instance_values.reject{ |k, v| k == 'worksheet' }.map{ |k,v| k.gsub(/_(.)/){ $1.upcase } << %{="#{v}"} }.join(' ')
238
+ serialized_attributes str
238
239
  str << '/>'
239
240
  end
240
241
  end