axlsx 1.1.6 → 1.1.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. data/README.md +19 -6
  2. data/examples/axis-titles.xlsx +0 -0
  3. data/examples/basic_charts.rb +46 -0
  4. data/examples/basic_charts.xlsx +0 -0
  5. data/examples/charts.xlsx +0 -0
  6. data/examples/example.rb +17 -1
  7. data/examples/example.xlsx +0 -0
  8. data/examples/example_streamed.xlsx +0 -0
  9. data/examples/extractive.xlsx +0 -0
  10. data/examples/no-use_autowidth.xlsx +0 -0
  11. data/examples/pie_chart_excel.xlsx +0 -0
  12. data/examples/pie_chart_saved.xlsx +0 -0
  13. data/examples/shared_strings_example.xlsx +0 -0
  14. data/examples/sheet_view.rb +34 -0
  15. data/examples/sheet_view.xlsx +0 -0
  16. data/examples/~$example.xlsx +0 -0
  17. data/lib/axlsx.rb +3 -2
  18. data/lib/axlsx/drawing/axis.rb +18 -0
  19. data/lib/axlsx/drawing/cat_axis.rb +3 -3
  20. data/lib/axlsx/drawing/chart.rb +3 -3
  21. data/lib/axlsx/drawing/drawing.rb +0 -1
  22. data/lib/axlsx/drawing/graphic_frame.rb +2 -2
  23. data/lib/axlsx/drawing/num_data.rb +2 -2
  24. data/lib/axlsx/drawing/title.rb +21 -9
  25. data/lib/axlsx/package.rb +9 -5
  26. data/lib/axlsx/util/validators.rb +28 -4
  27. data/lib/axlsx/version.rb +1 -1
  28. data/lib/axlsx/workbook/workbook.rb +7 -3
  29. data/lib/axlsx/workbook/worksheet/cell.rb +4 -0
  30. data/lib/axlsx/workbook/worksheet/page_setup.rb +1 -1
  31. data/lib/axlsx/workbook/worksheet/pane.rb +144 -0
  32. data/lib/axlsx/workbook/worksheet/selection.rb +111 -0
  33. data/lib/axlsx/workbook/worksheet/sheet_view.rb +379 -0
  34. data/lib/axlsx/workbook/worksheet/worksheet.rb +27 -10
  35. data/test/drawing/tc_axis.rb +19 -2
  36. data/test/drawing/tc_cat_axis.rb +3 -3
  37. data/test/drawing/tc_num_data.rb +5 -1
  38. data/test/drawing/tc_title.rb +16 -0
  39. data/test/tc_package.rb +24 -4
  40. data/test/util/tc_validators.rb +68 -11
  41. data/test/workbook/worksheet/tc_pane.rb +94 -0
  42. data/test/workbook/worksheet/tc_selection.rb +94 -0
  43. data/test/workbook/worksheet/tc_sheet_view.rb +214 -0
  44. data/test/workbook/worksheet/tc_worksheet.rb +0 -7
  45. metadata +28 -13
  46. data/examples/pie_chart.rb +0 -16
  47. data/examples/pie_chart.xlsx +0 -0
  48. data/examples/~$pie_chart_saved.xlsx +0 -0
@@ -5,6 +5,6 @@ module Axlsx
5
5
  # When using bunle exec rake and referencing the gem on github or locally
6
6
  # it will use the gemspec, which preloads this constant for the gem's version.
7
7
  # We check to make sure that it has not already been loaded
8
- VERSION="1.1.6" unless defined? Axlsx::VERSION
8
+ VERSION="1.1.7" unless defined? Axlsx::VERSION
9
9
 
10
10
  end
@@ -21,7 +21,9 @@ require 'axlsx/workbook/worksheet/worksheet.rb'
21
21
  require 'axlsx/workbook/shared_strings_table.rb'
22
22
  require 'axlsx/workbook/worksheet/table.rb'
23
23
  require 'axlsx/workbook/worksheet/data_validation.rb'
24
-
24
+ require 'axlsx/workbook/worksheet/sheet_view.rb'
25
+ require 'axlsx/workbook/worksheet/pane.rb'
26
+ require 'axlsx/workbook/worksheet/selection.rb'
25
27
  # The Workbook class is an xlsx workbook that manages worksheets, charts, drawings and styles.
26
28
  # The following parts of the Office Open XML spreadsheet specification are not implimented in this version.
27
29
  #
@@ -169,12 +171,14 @@ require 'axlsx/workbook/worksheet/data_validation.rb'
169
171
  def self.date1904() @@date1904; end
170
172
 
171
173
  # Indicates if the workbook should use autowidths or not.
172
- # this must be set before instantiating a worksheet to avoid Rmagix inclusion
174
+ # @note This gem no longer depends on RMagick for autowidth
175
+ # calculation. Thus the performance benefits of turning this off are
176
+ # marginal unless you are creating a very large sheet.
173
177
  # @return [Boolean]
174
178
  def use_autowidth() @use_autowidth; end
175
179
 
176
180
  # see @use_autowidth
177
- def use_autowidth=(v) Axlsx::validate_boolean v; @use_autowidth = v; end
181
+ def use_autowidth=(v=true) Axlsx::validate_boolean v; @use_autowidth = v; end
178
182
 
179
183
  # Adds a worksheet to this workbook
180
184
  # @return [Worksheet]
@@ -317,6 +317,10 @@ module Axlsx
317
317
  str << '</c>'
318
318
  end
319
319
 
320
+ def is_formula?
321
+ @type == :string && @value.start_with?('=')
322
+ end
323
+
320
324
  private
321
325
 
322
326
  # Utility method for setting inline style attributes
@@ -79,7 +79,7 @@ module Axlsx
79
79
  # @see paper_width
80
80
  def paper_width=(v); Axlsx::validate_number_with_unit(v); @paper_width = v; end
81
81
  # @see scale
82
- def scale=(v); Axlsx::validate_page_scale(v); @scale = v; end
82
+ def scale=(v); Axlsx::validate_scale_10_400(v); @scale = v; end
83
83
 
84
84
  # convenience method to achieve sanity when setting fit_to_width and fit_to_height
85
85
  # as they both default to 1 if only their counterpart is specified.
@@ -0,0 +1,144 @@
1
+ # encoding: UTF-8
2
+ module Axlsx
3
+ # Pane options for a worksheet.
4
+ #
5
+ # @note The recommended way to manage the pane options is via SheetView#pane
6
+ # @see SheetView#pane
7
+ class Pane
8
+
9
+ # Active Pane
10
+ # The pane that is active.
11
+ # Options are
12
+ # * bottom_left: Bottom left pane, when both vertical and horizontal
13
+ # splits are applied. This value is also used when only
14
+ # a horizontal split has been applied, dividing the pane
15
+ # into upper and lower regions. In that case, this value
16
+ # specifies the bottom pane.
17
+ # * bottom_right: Bottom right pane, when both vertical and horizontal
18
+ # splits are applied.
19
+ # * top_left: Top left pane, when both vertical and horizontal splits
20
+ # are applied. This value is also used when only a horizontal
21
+ # split has been applied, dividing the pane into upper and lower
22
+ # regions. In that case, this value specifies the top pane.
23
+ # This value is also used when only a vertical split has
24
+ # been applied, dividing the pane into right and left
25
+ # regions. In that case, this value specifies the left pane
26
+ # * top_right: Top right pane, when both vertical and horizontal
27
+ # splits are applied. This value is also used when only
28
+ # a vertical split has been applied, dividing the pane
29
+ # into right and left regions. In that case, this value
30
+ # specifies the right pane.
31
+ # @see type
32
+ # @return [Symbol]
33
+ # default nil
34
+ attr_reader :active_pane
35
+
36
+
37
+ # Split State
38
+ # Indicates whether the pane has horizontal / vertical
39
+ # splits, and whether those splits are frozen.
40
+ # Options are
41
+ # * frozen: Panes are frozen, but were not split being frozen. In
42
+ # this state, when the panes are unfrozen again, a single
43
+ # pane results, with no split. In this state, the split
44
+ # bars are not adjustable.
45
+ # * frozen_split: Panes are frozen and were split before being frozen. In
46
+ # this state, when the panes are unfrozen again, the split
47
+ # remains, but is adjustable.
48
+ # * split: Panes are split, but not frozen. In this state, the split
49
+ # bars are adjustable by the user.
50
+ # @see type
51
+ # @return [Symbol]
52
+ # default nil
53
+ attr_reader :state
54
+
55
+
56
+ # Top Left Visible Cell
57
+ # Location of the top left visible cell in the bottom
58
+ # right pane (when in Left-To-Right mode).
59
+ # @see type
60
+ # @return [String]
61
+ # default nil
62
+ attr_reader :top_left_cell
63
+
64
+
65
+ # Horizontal Split Position
66
+ # Horizontal position of the split, in 1/20th of a point; 0 (zero)
67
+ # if none. If the pane is frozen, this value indicates the number
68
+ # of columns visible in the top pane.
69
+ # @see type
70
+ # @return [Integer]
71
+ # default 0
72
+ attr_reader :x_split
73
+
74
+
75
+ # Vertical Split Position
76
+ # Vertical position of the split, in 1/20th of a point; 0 (zero)
77
+ # if none. If the pane is frozen, this value indicates the number
78
+ # of rows visible in the left pane.
79
+ # @see type
80
+ # @return [Integer]
81
+ # default 0
82
+ attr_reader :y_split
83
+
84
+
85
+ # Creates a new {Pane} object
86
+ # @option options [Symbol] active_pane Active Pane
87
+ # @option options [Symbol] state Split State
88
+ # @option options [Cell, String] top_left_cell Top Left Visible Cell
89
+ # @option options [Integer] x_split Horizontal Split Position
90
+ # @option options [Integer] y_split Vertical Split Position
91
+ def initialize(options={})
92
+ #defaults
93
+ @active_pane = @state = @top_left_cell = nil
94
+ @x_split = @y_split = 0
95
+
96
+ # write options to instance variables
97
+ options.each do |o|
98
+ self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
99
+ end
100
+ end
101
+
102
+
103
+ # @see active_pane
104
+ def active_pane=(v); Axlsx::validate_pane_type(v); @active_pane = v end
105
+
106
+
107
+ # @see state
108
+ def state=(v); Axlsx::validate_split_state_type(v); @state = v end
109
+
110
+
111
+ # @see top_left_cell
112
+ def top_left_cell=(v)
113
+ cell = (v.class == Axlsx::Cell ? v.r_abs : v)
114
+ Axlsx::validate_string(cell)
115
+ @top_left_cell = cell
116
+ end
117
+
118
+
119
+ # @see x_split
120
+ def x_split=(v); Axlsx::validate_unsigned_int(v); @x_split = v end
121
+
122
+
123
+ # @see y_split
124
+ def y_split=(v); Axlsx::validate_unsigned_int(v); @y_split = v end
125
+
126
+
127
+ # Serializes the data validation
128
+ # @param [String] str
129
+ # @return [String]
130
+ def to_xml_string(str = '')
131
+ if @state == :frozen && @top_left_cell.nil?
132
+ row = @y_split || 0
133
+ column = @x_split || 0
134
+
135
+ @top_left_cell = "#{('A'..'ZZ').to_a[column]}#{row+1}"
136
+ end
137
+
138
+ str << '<pane '
139
+ str << instance_values.map { |key, value| '' << key.gsub(/_(.)/){ $1.upcase } <<
140
+ %{="#{[:active_pane, :state].include?(key.to_sym) ? value.to_s.gsub(/_(.)/){ $1.upcase } : value}"} unless value.nil? }.join(' ')
141
+ str << '/>'
142
+ end
143
+ end
144
+ end
@@ -0,0 +1,111 @@
1
+ # encoding: UTF-8
2
+ module Axlsx
3
+ # Selection options for worksheet panes.
4
+ #
5
+ # @note The recommended way to manage the selection pane options is via SheetView#add_selection
6
+ # @see SheetView#add_selection
7
+ class Selection
8
+
9
+ # Active Cell Location
10
+ # Location of the active cell.
11
+ # @see type
12
+ # @return [String]
13
+ # default nil
14
+ attr_reader :active_cell
15
+
16
+
17
+ # Active Cell Index
18
+ # 0-based index of the range reference (in the array of references listed in sqref)
19
+ # containing the active cell. Only used when the selection in sqref is not contiguous.
20
+ # Therefore, this value needs to be aware of the order in which the range references are
21
+ # written in sqref.
22
+ # When this value is out of range then activeCell can be used.
23
+ # @see type
24
+ # @return [Integer]
25
+ # default nil
26
+ attr_reader :active_cell_id
27
+
28
+
29
+ # Pane
30
+ # The pane to which this selection belongs.
31
+ # Options are
32
+ # * bottom_left: Bottom left pane, when both vertical and horizontal
33
+ # splits are applied. This value is also used when only
34
+ # a horizontal split has been applied, dividing the pane
35
+ # into upper and lower regions. In that case, this value
36
+ # specifies the bottom pane.
37
+ # * bottom_right: Bottom right pane, when both vertical and horizontal
38
+ # splits are applied.
39
+ # * top_left: Top left pane, when both vertical and horizontal splits
40
+ # are applied. This value is also used when only a horizontal
41
+ # split has been applied, dividing the pane into upper and lower
42
+ # regions. In that case, this value specifies the top pane.
43
+ # This value is also used when only a vertical split has
44
+ # been applied, dividing the pane into right and left
45
+ # regions. In that case, this value specifies the left pane
46
+ # * top_right: Top right pane, when both vertical and horizontal
47
+ # splits are applied. This value is also used when only
48
+ # a vertical split has been applied, dividing the pane
49
+ # into right and left regions. In that case, this value
50
+ # specifies the right pane.
51
+ # @see type
52
+ # @return [Symbol]
53
+ # default nil
54
+ attr_reader :pane
55
+
56
+
57
+ # Sequence of References
58
+ # Range of the selection. Can be non-contiguous set of ranges.
59
+ # @see type
60
+ # @return [String]
61
+ # default nil
62
+ attr_reader :sqref
63
+
64
+
65
+ # Creates a new {Selection} object
66
+ # @option options [Cell, String] active_cell Active Cell Location
67
+ # @option options [Integer] active_cell_id Active Cell Index
68
+ # @option options [Symbol] pane Pane
69
+ # @option options [String] sqref Sequence of References
70
+ def initialize(options={})
71
+ #defaults
72
+ @active_cell = @active_cell_id = @pane = @sqref = nil
73
+
74
+ # write options to instance variables
75
+ options.each do |o|
76
+ self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
77
+ end
78
+ end
79
+
80
+
81
+ # @see active_cell
82
+ def active_cell=(v)
83
+ cell = (v.class == Axlsx::Cell ? v.r_abs : v)
84
+ Axlsx::validate_string(cell)
85
+ @active_cell = cell
86
+ end
87
+
88
+
89
+ # @see active_cell_id
90
+ def active_cell_id=(v); Axlsx::validate_unsigned_int(v); @active_cell_id = v end
91
+
92
+
93
+ # @see pane
94
+ def pane=(v); Axlsx::validate_pane_type(v); @pane = v end
95
+
96
+
97
+ # @see sqref
98
+ def sqref=(v); Axlsx::validate_string(v); @sqref = v end
99
+
100
+
101
+ # Serializes the data validation
102
+ # @param [String] str
103
+ # @return [String]
104
+ def to_xml_string(str = '')
105
+ str << '<selection '
106
+ str << instance_values.map { |key, value| '' << key.gsub(/_(.)/){ $1.upcase } <<
107
+ %{="#{[:pane].include?(key.to_sym) ? value.to_s.gsub(/_(.)/){ $1.upcase } : value}"} unless value.nil? }.join(' ')
108
+ str << '/>'
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,379 @@
1
+ # encoding: UTF-8
2
+ module Axlsx
3
+ # View options for a worksheet.
4
+ #
5
+ # @note The recommended way to manage the sheet view is via Worksheet#sheet_view
6
+ # @see Worksheet#sheet_view
7
+ class SheetView
8
+
9
+ # instance values that must be serialized as their own elements - e.g. not attributes.
10
+ CHILD_ELEMENTS = [ :pane, :selections ]
11
+
12
+ # The pane object for the sheet view
13
+ # @return [Pane]
14
+ # @see [Pane]
15
+ def pane
16
+ @pane ||= Pane.new
17
+ yield @pane if block_given?
18
+ @pane
19
+ end
20
+
21
+ # A hash of selection objects keyed by pane type associated with this sheet view.
22
+ # @return [Hash]
23
+ attr_reader :selections
24
+
25
+ #
26
+ # Color Id
27
+ # Index to the color value for row/column
28
+ # text headings and gridlines. This is an
29
+ # 'index color value' (ICV) rather than
30
+ # rgb value.
31
+ # @see type
32
+ # @return [Integer]
33
+ # default nil
34
+ attr_reader :color_id
35
+
36
+
37
+ # Default Grid Color
38
+ # Flag indicating that the consuming application
39
+ # should use the default grid lines color
40
+ # (system dependent). Overrides any color
41
+ # specified in colorId.
42
+ # @see type
43
+ # @return [Boolean]
44
+ # default true
45
+ attr_reader :default_grid_color
46
+
47
+
48
+ # Right To Left
49
+ # Flag indicating whether the sheet is in
50
+ # 'right to left' display mode. When in this
51
+ # mode, Column A is on the far right, Column B ;
52
+ # is one column left of Column A, and so on. Also,
53
+ # information in cells is displayed in the Right
54
+ # to Left format.
55
+ # @see type
56
+ # @return [Boolean]
57
+ # default false
58
+ attr_reader :right_to_left
59
+
60
+
61
+ # Show Formulas
62
+ # Flag indicating whether this sheet should
63
+ # display formulas.
64
+ # @see type
65
+ # @return [Boolean]
66
+ # default false
67
+ attr_reader :show_formulas
68
+
69
+
70
+ # Show Grid Lines
71
+ # Flag indicating whether this sheet
72
+ # should display gridlines.
73
+ # @see type
74
+ # @return [Boolean]
75
+ # default true
76
+ attr_reader :show_grid_lines
77
+
78
+
79
+ # Show Outline Symbols
80
+ # Flag indicating whether the sheet has outline
81
+ # symbols visible. This flag shall always override
82
+ # SheetPr element's outlinePr child element
83
+ # whose attribute is named showOutlineSymbols
84
+ # when there is a conflict.
85
+ # @see type
86
+ # @return [Boolean]
87
+ # default false
88
+ attr_reader :show_outline_symbols
89
+
90
+
91
+ # Show Headers
92
+ # Flag indicating whether the sheet should
93
+ # display row and column headings.
94
+ # @see type
95
+ # @return [Boolean]
96
+ # default true
97
+ attr_reader :show_row_col_headers
98
+
99
+
100
+ # Show Ruler
101
+ # Show the ruler in Page Layout View.
102
+ # @see type
103
+ # @return [Boolean]
104
+ # default true
105
+ attr_reader :show_ruler
106
+
107
+
108
+ # Show White Space
109
+ # Flag indicating whether page layout
110
+ # view shall display margins. False means
111
+ # do not display left, right, top (header),
112
+ # and bottom (footer) margins (even when
113
+ # there is data in the header or footer).
114
+ # @see type
115
+ # @return [Boolean]
116
+ # default false
117
+ attr_reader :show_white_space
118
+
119
+
120
+ # Show Zero Values
121
+ # Flag indicating whether the window should
122
+ # show 0 (zero) in cells containing zero value.
123
+ # When false, cells with zero value appear
124
+ # blank instead of showing the number zero.
125
+ # @see type
126
+ # @return [Boolean]
127
+ # default true
128
+ attr_reader :show_zeros
129
+
130
+
131
+ # Sheet Tab Selected
132
+ # Flag indicating whether this sheet is selected.
133
+ # When only 1 sheet is selected and active, this
134
+ # value should be in synch with the activeTab value.
135
+ # In case of a conflict, the Start Part setting
136
+ # wins and sets the active sheet tab. Multiple
137
+ # sheets can be selected, but only one sheet shall
138
+ # be active at one time.
139
+ # @see type
140
+ # @return [Boolean]
141
+ # default false
142
+ attr_reader :tab_selected
143
+
144
+
145
+ # Top Left Visible Cell
146
+ # Location of the top left visible cell Location
147
+ # of the top left visible cell in the bottom right
148
+ # pane (when in Left-to-Right mode).
149
+ # @see type
150
+ # @return [String]
151
+ # default nil
152
+ attr_reader :top_left_cell
153
+
154
+
155
+ # View Type
156
+ # Indicates the view type.
157
+ # Options are
158
+ # * normal: Normal view
159
+ # * page_break_preview: Page break preview
160
+ # * page_layout: Page Layout View
161
+ # @see type
162
+ # @return [Symbol]
163
+ # default :normal
164
+ attr_reader :view
165
+
166
+
167
+ # Window Protection
168
+ # Flag indicating whether the panes in the window
169
+ # are locked due to workbook protection.
170
+ # This is an option when the workbook structure is
171
+ # protected.
172
+ # @see type
173
+ # @return [Boolean]
174
+ # default true
175
+ attr_reader :window_protection
176
+
177
+
178
+ # Workbook View Index
179
+ # Zero-based index of this workbook view, pointing
180
+ # to a workbookView element in the bookViews collection.
181
+ # @see type
182
+ # @return [Integer]
183
+ # default 0
184
+ attr_reader :workbook_view_id
185
+
186
+
187
+ # Zoom Scale
188
+ # Window zoom magnification for current view
189
+ # representing percent values. This attribute
190
+ # is restricted to values ranging from 10 to 400.
191
+ # Horizontal & Vertical scale together.
192
+ # Current view can be Normal, Page Layout, or
193
+ # Page Break Preview.
194
+ # @see type
195
+ # @return [Integer]
196
+ # default 100
197
+ attr_reader :zoom_scale
198
+
199
+
200
+ # Zoom Scale Normal View
201
+ # Zoom magnification to use when in normal view,
202
+ # representing percent values. This attribute is
203
+ # restricted to values ranging from 10 to 400.
204
+ # Horizontal & Vertical scale together.
205
+ # Applies for worksheets only; zero implies the
206
+ # automatic setting.
207
+ # @see type
208
+ # @return [Integer]
209
+ # default 0
210
+ attr_reader :zoom_scale_normal
211
+
212
+
213
+ # Zoom Scale Page Layout View
214
+ # Zoom magnification to use when in page layout
215
+ # view, representing percent values. This attribute
216
+ # is restricted to values ranging from 10 to 400.
217
+ # Horizontal & Vertical scale together.
218
+ # Applies for worksheets only; zero implies
219
+ # the automatic setting.
220
+ # @see type
221
+ # @return [Integer]
222
+ # default 0
223
+ attr_reader :zoom_scale_page_layout_view
224
+
225
+
226
+ # Zoom Scale Page Break Preview
227
+ # Zoom magnification to use when in page break
228
+ # preview, representing percent values. This
229
+ # attribute is restricted to values ranging
230
+ # from 10 to 400. Horizontal & Vertical scale
231
+ # together.
232
+ # Applies for worksheet only; zero implies
233
+ # the automatic setting.
234
+ # @see type
235
+ # @return [Integer]
236
+ # default 0
237
+ attr_reader :zoom_scale_sheet_layout_view
238
+
239
+
240
+ # Creates a new {SheetView} object
241
+ # @option options [Integer] color_id Color Id
242
+ # @option options [Boolean] default_grid_color Default Grid Color
243
+ # @option options [Boolean] right_to_left Right To Left
244
+ # @option options [Boolean] show_formulas Show Formulas
245
+ # @option options [Boolean] show_grid_lines Show Grid Lines
246
+ # @option options [Boolean] show_outline_symbols Show Outline Symbols
247
+ # @option options [Boolean] show_row_col_headers Show Headers
248
+ # @option options [Boolean] show_ruler Show Ruler
249
+ # @option options [Boolean] show_white_space Show White Space
250
+ # @option options [Boolean] show_zeros Show Zero Values
251
+ # @option options [Boolean] tab_selected Sheet Tab Selected
252
+ # @option options [String, Cell] top_left_cell Top Left Visible Cell
253
+ # @option options [Symbol] view View Type
254
+ # @option options [Boolean] window_protection Window Protection
255
+ # @option options [Integer] workbook_view_id Workbook View Index
256
+ # @option options [Integer] zoom_scale_normal Zoom Scale Normal View
257
+ # @option options [Integer] zoom_scale_page_layout_view Zoom Scale Page Layout View
258
+ # @option options [Integer] zoom_scale_sheet_layout_view Zoom Scale Page Break Preview
259
+ def initialize(options={})
260
+ #defaults
261
+ @color_id = @top_left_cell = @pane = nil
262
+ @right_to_left = @show_formulas = @show_outline_symbols = @show_white_space = @tab_selected = @window_protection = false
263
+ @default_grid_color = @show_grid_lines = @show_row_col_headers = @show_ruler = @show_zeros = true
264
+ @zoom_scale = 100
265
+ @zoom_scale_normal = @zoom_scale_page_layout_view = @zoom_scale_sheet_layout_view = @workbook_view_id = 0
266
+ @selections = {}
267
+
268
+ # write options to instance variables
269
+ options.each do |o|
270
+ self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
271
+ end
272
+ end
273
+
274
+
275
+ # Adds a new selection
276
+ # param [Symbol] pane
277
+ # param [Hash] options
278
+ # return [Selection]
279
+ def add_selection(pane, options = {})
280
+ @selections[pane] = Selection.new(options.merge(:pane => pane))
281
+ end
282
+
283
+ # @see color_id
284
+ def color_id=(v); Axlsx::validate_unsigned_int(v); @color_id = v end
285
+
286
+
287
+ # @see default_grid_color
288
+ def default_grid_color=(v); Axlsx::validate_boolean(v); @default_grid_color = v end
289
+
290
+
291
+ # @see right_to_left
292
+ def right_to_left=(v); Axlsx::validate_boolean(v); @right_to_left = v end
293
+
294
+
295
+ # @see show_formulas
296
+ def show_formulas=(v); Axlsx::validate_boolean(v); @show_formulas = v end
297
+
298
+
299
+ # @see show_grid_lines
300
+ def show_grid_lines=(v); Axlsx::validate_boolean(v); @show_grid_lines = v end
301
+
302
+
303
+ # @see show_outline_symbols
304
+ def show_outline_symbols=(v); Axlsx::validate_boolean(v); @show_outline_symbols = v end
305
+
306
+
307
+ # @see show_row_col_headers
308
+ def show_row_col_headers=(v); Axlsx::validate_boolean(v); @show_row_col_headers = v end
309
+
310
+
311
+ # @see show_ruler
312
+ def show_ruler=(v); Axlsx::validate_boolean(v); @show_ruler = v end
313
+
314
+
315
+ # @see show_white_space
316
+ def show_white_space=(v); Axlsx::validate_boolean(v); @show_white_space = v end
317
+
318
+
319
+ # @see show_zeros
320
+ def show_zeros=(v); Axlsx::validate_boolean(v); @show_zeros = v end
321
+
322
+
323
+ # @see tab_selected
324
+ def tab_selected=(v); Axlsx::validate_boolean(v); @tab_selected = v end
325
+
326
+
327
+ # @see top_left_cell
328
+ def top_left_cell=(v)
329
+ cell = (v.class == Axlsx::Cell ? v.r_abs : v)
330
+ Axlsx::validate_string(cell)
331
+ @top_left_cell = cell
332
+ end
333
+
334
+
335
+ # @see view
336
+ def view=(v); Axlsx::validate_sheet_view_type(v); @view = v end
337
+
338
+
339
+ # @see window_protection
340
+ def window_protection=(v); Axlsx::validate_boolean(v); @window_protection = v end
341
+
342
+
343
+ # @see workbook_view_id
344
+ def workbook_view_id=(v); Axlsx::validate_unsigned_int(v); @workbook_view_id = v end
345
+
346
+
347
+ # @see zoom_scale
348
+ def zoom_scale=(v); Axlsx::validate_scale_0_10_400(v); @zoom_scale = v end
349
+
350
+
351
+ # @see zoom_scale_normal
352
+ def zoom_scale_normal=(v); Axlsx::validate_scale_0_10_400(v); @zoom_scale_normal = v end
353
+
354
+
355
+ # @see zoom_scale_page_layout_view
356
+ def zoom_scale_page_layout_view=(v); Axlsx::validate_scale_0_10_400(v); @zoom_scale_page_layout_view = v end
357
+
358
+
359
+ # @see zoom_scale_sheet_layout_view
360
+ def zoom_scale_sheet_layout_view=(v); Axlsx::validate_scale_0_10_400(v); @zoom_scale_sheet_layout_view = v end
361
+
362
+
363
+ # Serializes the data validation
364
+ # @param [String] str
365
+ # @return [String]
366
+ def to_xml_string(str = '')
367
+ str << '<sheetViews>'
368
+ str << '<sheetView '
369
+ str << instance_values.map { |key, value| (Axlsx::camel(key.to_s, false) << '="' << value.to_s << '"') unless CHILD_ELEMENTS.include?(key.to_sym) || value == nil }.join(' ')
370
+ str << '>'
371
+ @pane.to_xml_string(str) if @pane
372
+ @selections.each do |key, selection|
373
+ selection.to_xml_string(str)
374
+ end
375
+ str << '</sheetView>'
376
+ str << '</sheetViews>'
377
+ end
378
+ end
379
+ end