axlsx 1.1.6 → 1.1.7

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 (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