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
data/README.md CHANGED
@@ -16,7 +16,7 @@ Axlsx: Office Open XML Spreadsheet Generation
16
16
 
17
17
  **License**: MIT License
18
18
 
19
- **Latest Version**: 1.1.6
19
+ **Latest Version**: 1.1.7
20
20
 
21
21
  **Ruby Version**: 1.8.7, 1.9.2, 1.9.3
22
22
 
@@ -24,7 +24,7 @@ Axlsx: Office Open XML Spreadsheet Generation
24
24
 
25
25
  **Rubinius Version**: rubinius 2.0.0dev * lower versions may run, this gem always tests against head.
26
26
 
27
- **Release Date**: May 30th 2012
27
+ **Release Date**: June 11th 2012
28
28
 
29
29
  If you are working in rails, or with active record see:
30
30
  http://github.com/randym/acts_as_xlsx
@@ -113,7 +113,16 @@ This gem has 100% test coverage using test/unit. To execute tests for this gem,
113
113
 
114
114
  #Change log
115
115
  ---------
116
- - ** May.30.12**: 1.1.6 release
116
+ - **June.11.12**: 1.1.7 release
117
+ - fix chart rendering issue when label offset is specified as a
118
+ percentage in serialization and ensure that formula are not stored
119
+ in value caches
120
+ - fix bug that causes repair warnings when using a text only title reference.
121
+ - Add title property to axis so you can lable the x/y/series axis for
122
+ charts.
123
+ - Add sheet views with panes
124
+
125
+ - **May.30.12**: 1.1.6 release
117
126
  - data protection with passwords for sheets
118
127
  - cell level input validators
119
128
  - added support for two cell anchors for images
@@ -124,14 +133,14 @@ This gem has 100% test coverage using test/unit. To execute tests for this gem,
124
133
  - resolved all warnings generating from this gem.
125
134
  - improved comment relationship management for multiple comments
126
135
 
127
- - ** May.13.12**: 1.1.5 release
136
+ - **May.13.12**: 1.1.5 release
128
137
  - MOAR print options! You can now specify paper size, orientation,
129
138
  fit to width, page margings and gridlines for printing.
130
139
  - Support for adding comments to your worksheets
131
140
  - bugfix for applying style to empty cells
132
141
  - bugfix for parsing formula with multiple '='
133
142
 
134
- - ** May.3.12:**: 1.1.4 release
143
+ - **May.3.12:**: 1.1.4 release
135
144
  - MOAR examples
136
145
  - added outline level for rows and columns
137
146
  - rebuild of numeric and axis data sources for charts
@@ -155,6 +164,10 @@ This gem has 100% test coverage using test/unit. To execute tests for this gem,
155
164
  Please see the {file:CHANGELOG.md} document for past release information.
156
165
 
157
166
  #Thanks!
167
+
168
+ Open source software is a community effort. None of this could have been
169
+ done without the help of the people below.
170
+
158
171
  --------
159
172
  [ochko](https://github.com/ochko) - for performance fixes, kicking the crap out of axlsx and helping to maintain my general sanity.
160
173
 
@@ -176,7 +189,7 @@ Please see the {file:CHANGELOG.md} document for past release information.
176
189
 
177
190
  [scpike](https://github.com/scpike) - for keeping numbers fixed even when they are rational and a super clean implementation of conditional formatting.
178
191
 
179
- [janhuehne](https://github.com/janhuehne) - for working out the decoder ring and adding in cell level validation.
192
+ [janhuehne](https://github.com/janhuehne) - for working out the decoder ring and adding in cell level validation, and providing a support for window panes.
180
193
 
181
194
  #Copyright and License
182
195
  ----------
Binary file
@@ -0,0 +1,46 @@
1
+ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
2
+ require 'axlsx'
3
+ p = Axlsx::Package.new
4
+ wb = p.workbook
5
+
6
+ # Pie Chart
7
+ wb.add_worksheet(:name => "Pie Chart") do |sheet|
8
+ sheet.add_row ["First", "Second", "Third", "Fourth"]
9
+ sheet.add_row [1, 2, 3, 4]
10
+ sheet.add_chart(Axlsx::Pie3DChart, :start_at => [0,2], :end_at => [5, 15], :title=> 'dark corner here') do |chart|
11
+ chart.add_series :data => sheet["A2:D2"], :labels => sheet["A1:D1"]
12
+ end
13
+ end
14
+
15
+ # line chart
16
+ wb.add_worksheet(:name => "Line Chart") do |sheet|
17
+ sheet.add_row ['1', '2', '3', '4']
18
+ sheet.add_row [1, 2, 3, '=sum(A2:C2)']
19
+ sheet.add_chart(Axlsx::Line3DChart, :start_at => [0,2], :end_at => [5, 15], :title => "Chart") do |chart|
20
+ chart.add_series :data => sheet["A2:D2"], :labels => sheet["A1:D1"], :title => 'bob'
21
+ end
22
+ end
23
+
24
+ # bar chart
25
+ wb.add_worksheet(:name => "Bar Chart") do |sheet|
26
+ sheet.add_row ["A Simple Bar Chart"]
27
+ sheet.add_row ["First", "Second", "Third"]
28
+ sheet.add_row [1, 2, 3]
29
+ sheet.add_chart(Axlsx::Bar3DChart, :start_at => "A4", :end_at => "F17") do |chart|
30
+ chart.add_series :data => sheet["A3:C3"], :labels => sheet["A2:C2"], :title => sheet["A1"]
31
+ chart.valAxis.label_rotation = -45
32
+ chart.catAxis.label_rotation = 45
33
+ end
34
+ end
35
+
36
+ # specifying colors and title
37
+ wb.add_worksheet(:name => "Colored Pie Chart") do |sheet|
38
+ sheet.add_row ["First", "Second", "Third", "Fourth"]
39
+ sheet.add_row [1, 2, 3, "=PRODUCT(A2:C2)"]
40
+ sheet.add_chart(Axlsx::Pie3DChart, :start_at => [0,2], :end_at => [5, 15], :title => "example 3: Pie Chart") do |chart|
41
+ chart.add_series :data => sheet["A2:D2"], :labels => ["A1:D1"], :colors => ['FF0000', '00FF00', '0000FF']
42
+ end
43
+ end
44
+
45
+ p.serialize('basic_charts.xlsx')
46
+
Binary file
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby -w -s
2
2
  # -*- coding: utf-8 -*-
3
- # $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
3
+ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
4
4
 
5
5
  #```ruby
6
6
  require 'axlsx'
@@ -276,6 +276,8 @@ wb.add_worksheet(:name => "Line Chart") do |sheet|
276
276
  chart.end_at 10, 15
277
277
  chart.add_series :data => sheet["B1:E1"], :title => sheet["A1"]
278
278
  chart.add_series :data => sheet["B2:E2"], :title => sheet["A2"]
279
+ chart.catAxis.title = 'Y Axis'
280
+ chart.valAxis.title = 'X Axis'
279
281
  end
280
282
  end
281
283
  #```
@@ -350,6 +352,20 @@ wb.add_worksheet(:name => 'comments') do |sheet|
350
352
  sheet.add_comment :ref => 'A1', :author => 'Bob', :text => 'Yes We Can!'
351
353
  end
352
354
 
355
+ ## Frozen/Split panes
356
+ ## ``` ruby
357
+ wb.add_worksheet(:name => 'fixed headers') do |sheet|
358
+ sheet.add_row(['', (0..99).map { |i| "column header #{i}" }].flatten )
359
+ 100.times.with_index { |index| sheet << ["row header", (0..index).to_a].flatten }
360
+ sheet.sheet_view.pane do |pane|
361
+ pane.top_left_cell = "B2"
362
+ pane.state = :frozen_split
363
+ pane.y_split = 1
364
+ pane.x_split = 1
365
+ pane.active_pane = :bottom_right
366
+ end
367
+ end
368
+
353
369
  ##Validate and Serialize
354
370
 
355
371
  #```ruby
Binary file
Binary file
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env ruby -w -s
2
+ # -*- coding: utf-8 -*-
3
+ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
4
+ require 'axlsx'
5
+
6
+ p = Axlsx::Package.new
7
+ ws = p.workbook.add_worksheet :name => "Sheetview - Split"
8
+ ws.sheet_view do |vs|
9
+ vs.pane do |p|
10
+ p.active_pane = :top_right
11
+ p.state = :split
12
+ p.x_split = 11080
13
+ p.y_split = 5000
14
+ p.top_left_cell = 'C44'
15
+ end
16
+
17
+ vs.add_selection(:top_left, { :active_cell => 'A2', :sqref => 'A2' })
18
+ vs.add_selection(:top_right, { :active_cell => 'I10', :sqref => 'I10' })
19
+ vs.add_selection(:bottom_left, { :active_cell => 'E55', :sqref => 'E55' })
20
+ vs.add_selection(:bottom_right, { :active_cell => 'I57', :sqref => 'I57' })
21
+ end
22
+
23
+
24
+ ws = p.workbook.add_worksheet :name => "Sheetview - Frozen"
25
+ ws.sheet_view do |vs|
26
+ vs.pane do |p|
27
+ p.state = :frozen
28
+ p.x_split = 3
29
+ p.y_split = 4
30
+ end
31
+ end
32
+
33
+
34
+ p.serialize 'sheet_view.xlsx'
Binary file
Binary file
@@ -87,8 +87,9 @@ module Axlsx
87
87
  # performs the increadible feat of changing snake_case to CamelCase
88
88
  # @param [String] s The snake case string to camelize
89
89
  # @return [String]
90
- def self.camel(s="")
91
- s = s.capitalize.gsub(/_(.)/){ $1.upcase }
90
+ def self.camel(s="", all_caps = true)
91
+ s = s.capitalize if all_caps
92
+ s.gsub(/_(.)/){ $1.upcase }
92
93
  end
93
94
 
94
95
  end
@@ -52,6 +52,9 @@ module Axlsx
52
52
  # @return [Boolean]
53
53
  attr_reader :delete
54
54
 
55
+ # the title for the axis. This can be a cell or a fixed string.
56
+ attr_reader :title
57
+
55
58
  # Creates an Axis object
56
59
  # @param [Integer] ax_id the id of this axis
57
60
  # @param [Integer] cross_ax the id of the perpendicular axis
@@ -67,6 +70,7 @@ module Axlsx
67
70
  @format_code = "General"
68
71
  @delete = @label_rotation = 0
69
72
  @scaling = Scaling.new(:orientation=>:minMax)
73
+ @title = nil
70
74
  self.ax_pos = :b
71
75
  self.tick_lbl_pos = :nextTo
72
76
  self.format_code = "General"
@@ -113,6 +117,19 @@ module Axlsx
113
117
  @label_rotation = adjusted
114
118
  end
115
119
 
120
+
121
+ # The title object for the chart.
122
+ # @param [String, Cell] v
123
+ # @return [Title]
124
+ def title=(v)
125
+ DataTypeValidator.validate "#{self.class}.title", [String, Cell], v
126
+ @title ||= Title.new
127
+ if v.is_a?(String)
128
+ @title.text = v
129
+ elsif v.is_a?(Cell)
130
+ @title.cell = v
131
+ end
132
+ end
116
133
 
117
134
  # Serializes the object
118
135
  # @param [String] str
@@ -131,6 +148,7 @@ module Axlsx
131
148
  str << '</c:spPr>'
132
149
  end
133
150
  str << '</c:majorGridlines>'
151
+ @title.to_xml_string(str) unless @title == nil
134
152
  str << '<c:numFmt formatCode="' << @format_code << '" sourceLinked="1"/>'
135
153
  str << '<c:majorTickMark val="none"/>'
136
154
  str << '<c:minorTickMark val="none"/>'
@@ -28,7 +28,7 @@ module Axlsx
28
28
 
29
29
 
30
30
  # regex for validating label offset
31
- LBL_OFFSET_REGEX = /0*(([0-9])|([1-9][0-9])|([1-9][0-9][0-9])|1000)%/
31
+ LBL_OFFSET_REGEX = /0*(([0-9])|([1-9][0-9])|([1-9][0-9][0-9])|1000)/
32
32
 
33
33
  # Creates a new CatAxis object
34
34
  # @param [Integer] axId the id of this axis. Inherited
@@ -46,7 +46,7 @@ module Axlsx
46
46
  @tickMarkSkip = 1
47
47
  self.auto = 1
48
48
  self.lblAlgn = :ctr
49
- self.lblOffset = "100%"
49
+ self.lblOffset = "100"
50
50
  super(axId, crossAx, options)
51
51
  end
52
52
 
@@ -77,7 +77,7 @@ module Axlsx
77
77
  super(str)
78
78
  str << '<c:auto val="' << @auto.to_s << '"/>'
79
79
  str << '<c:lblAlgn val="' << @lblAlgn.to_s << '"/>'
80
- str << '<c:lblOffset val="' << @lblOffset.to_s << '"/>'
80
+ str << '<c:lblOffset val="' << @lblOffset.to_i.to_s << '"/>'
81
81
  str << '<c:tickLblSkip val="' << @tickLblSkip.to_s << '"/>'
82
82
  str << '<c:tickMarkSkip val="' << @tickMarkSkip.to_s << '"/>'
83
83
  str << '</c:catAx>'
@@ -44,7 +44,7 @@ module Axlsx
44
44
  # @option options [Array|String|Cell] start_at The X, Y coordinates defining the top left corner of the chart.
45
45
  # @option options [Array|String|Cell] end_at The X, Y coordinates defining the bottom right corner of the chart.
46
46
  def initialize(frame, options={})
47
- @style = 2
47
+ @style = 18
48
48
  @view3D = nil
49
49
  @graphic_frame=frame
50
50
  @graphic_frame.anchor.drawing.worksheet.workbook.charts << self
@@ -120,13 +120,13 @@ module Axlsx
120
120
  # @return [String]
121
121
  def to_xml_string(str = '')
122
122
  str << '<?xml version="1.0" encoding="UTF-8"?>'
123
- str << '<c:chartSpace xmlns:c="' << XML_NS_C << '" xmlns:a="' << XML_NS_A << '">'
123
+ str << '<c:chartSpace xmlns:c="' << XML_NS_C << '" xmlns:a="' << XML_NS_A << '" xmlns:r="' << XML_NS_R << '">'
124
124
  str << '<c:date1904 val="' << Axlsx::Workbook.date1904.to_s << '"/>'
125
125
  str << '<c:style val="' << style.to_s << '"/>'
126
126
  str << '<c:chart>'
127
127
  @title.to_xml_string str
128
128
  # do these need the c: namespace as well???
129
- str << '<c:autoTitleDeleted val="0"/>'
129
+ str << '<c:autoTitleDeleted val="' << (@title == nil).to_s << '"/>'
130
130
  @view3D.to_xml_string(str) if @view3D
131
131
  str << '<c:floor><c:thickness val="0"/></c:floor>'
132
132
  str << '<c:sideWall><c:thickness val="0"/></c:sideWall>'
@@ -155,7 +155,6 @@ module Axlsx
155
155
  # @return [String]
156
156
  def to_xml_string(str = '')
157
157
  str << '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'
158
- # str << '<xdr:wsDr xmlns:xdr="' << XML_NS_XDR << '" xmlns:a="' << XML_NS_A << '" xmlns:c="' << XML_NS_C << '">'
159
158
  str << '<xdr:wsDr xmlns:xdr="' << XML_NS_XDR << '" xmlns:a="' << XML_NS_A << '">'
160
159
 
161
160
  anchors.each { |anchor| anchor.to_xml_string(str) }
@@ -33,9 +33,9 @@ module Axlsx
33
33
  # @return [String]
34
34
  def to_xml_string(str = '')
35
35
  # macro attribute should be optional!
36
- str << '<xdr:graphicFrame macro="">'
36
+ str << '<xdr:graphicFrame>'
37
37
  str << '<xdr:nvGraphicFramePr>'
38
- str << '<xdr:cNvPr id="2" name="' << chart.title.text << '"/>'
38
+ str << '<xdr:cNvPr id="' << @anchor.drawing.index.to_s << '" name="' << 'item_' << @anchor.drawing.index.to_s << '"/>'
39
39
  str << '<xdr:cNvGraphicFramePr/>'
40
40
  str << '</xdr:nvGraphicFramePr>'
41
41
  str << '<xdr:xfrm>'
@@ -25,8 +25,8 @@ module Axlsx
25
25
  def data=(values=[])
26
26
  @tag_name = values.first.is_a?(Cell) ? :numCache : :numLit
27
27
  values.each do |value|
28
- v = value.is_a?(Cell) ? value.value : value
29
- @pt << NumVal.new(:v => v)
28
+ value = value.is_formula? ? 0 : value.value if value.is_a?(Cell)
29
+ @pt << NumVal.new(:v => value)
30
30
  end
31
31
  end
32
32
 
@@ -46,15 +46,27 @@ module Axlsx
46
46
  str << '<c:title>'
47
47
  unless @text.empty?
48
48
  str << '<c:tx>'
49
- str << '<c:strRef>'
50
- str << '<c:f>' << Axlsx::cell_range([@cell]) << '</c:f>'
51
- str << '<c:strCache>'
52
- str << '<c:ptCount val="1"/>'
53
- str << '<c:pt idx="0">'
54
- str << '<c:v>' << @text << '</c:v>'
55
- str << '</c:pt>'
56
- str << '</c:strCache>'
57
- str << '</c:strRef>'
49
+ if @cell.is_a?(Cell)
50
+ str << '<c:strRef>'
51
+ str << '<c:f>' << Axlsx::cell_range([@cell]) << '</c:f>'
52
+ str << '<c:strCache>'
53
+ str << '<c:ptCount val="1"/>'
54
+ str << '<c:pt idx="0">'
55
+ str << '<c:v>' << @text << '</c:v>'
56
+ str << '</c:pt>'
57
+ str << '</c:strCache>'
58
+ str << '</c:strRef>'
59
+ else
60
+ str << '<c:rich>'
61
+ str << '<a:bodyPr/>'
62
+ str << '<a:lstStyle/>'
63
+ str << '<a:p>'
64
+ str << '<a:r>'
65
+ str << '<a:t>' << @text.to_s << '</a:t>'
66
+ str << '</a:r>'
67
+ str << '</a:p>'
68
+ str << '</c:rich>'
69
+ end
58
70
  str << '</c:tx>'
59
71
  end
60
72
  str << '<c:layout/>'
@@ -80,9 +80,8 @@ module Axlsx
80
80
 
81
81
  # Serialize your workbook to disk as an xlsx document.
82
82
  #
83
- # @param [File] output The file you want to serialize your package to
83
+ # @param [String] output The name of the file you want to serialize your package to
84
84
  # @param [Boolean] confirm_valid Validate the package prior to serialization.
85
- # @option options stream indicates if we should be writing to a stream or a file. True for stream, nil for file
86
85
  # @return [Boolean] False if confirm_valid and validation errors exist. True if the package was serialized
87
86
  # @note A tremendous amount of effort has gone into ensuring that you cannot create invalid xlsx documents.
88
87
  # confirm_valid should be used in the rare case that you cannot open the serialized file.
@@ -90,10 +89,15 @@ module Axlsx
90
89
  # @example
91
90
  # # This is how easy it is to create a valid xlsx file. Of course you might want to add a sheet or two, and maybe some data, styles and charts.
92
91
  # # Take a look at the README for an example of how to do it!
93
- # f = File.open('test.xlsx', 'w')
94
- # Package.new.serialize(f)
95
92
  #
96
- # # You will find a file called test.xlsx
93
+ # #serialize to a file
94
+ # p = Axlsx::Package.new
95
+ # # ......add cool stuff to your workbook......
96
+ # p.serialize("example.xlsx")
97
+ #
98
+ # # Serialize to a stream
99
+ # s = p.to_stream()
100
+ # File.open('example_streamed.xlsx', 'w') { |f| f.write(s.read) }
97
101
  def serialize(output, confirm_valid=false)
98
102
  return false unless !confirm_valid || self.validate.empty?
99
103
  Zip::ZipOutputStream.open(output) do |zip|
@@ -109,9 +109,14 @@ module Axlsx
109
109
  end
110
110
 
111
111
  # Requires that the value is an integer ranging from 10 to 400.
112
- def self.validate_page_scale(v)
112
+ def self.validate_scale_10_400(v)
113
113
  DataTypeValidator.validate "page_scale", [Fixnum, Integer], v, lambda { |arg| arg >= 10 && arg <= 400 }
114
114
  end
115
+
116
+ # Requires that the value is an integer ranging from 10 to 400 or 0.
117
+ def self.validate_scale_0_10_400(v)
118
+ DataTypeValidator.validate "page_scale", [Fixnum, Integer], v, lambda { |arg| arg == 0 || (arg >= 10 && arg <= 400) }
119
+ end
115
120
 
116
121
  # Requires that the value is one of :default, :landscape, or :portrait.
117
122
  def self.validate_page_orientation(v)
@@ -132,8 +137,6 @@ module Axlsx
132
137
  # thisMonth, lastMonth, nextMonth, thisWeek, lastWeek, nextWeek
133
138
  def self.validate_time_period_type(v)
134
139
  RestrictionValidator.validate :time_period_type, [:today, :yesterday, :tomorrow, :last7Days, :thisMonth, :lastMonth, :nextMonth, :thisWeek, :lastWeek, :nextWeek], v
135
-
136
-
137
140
  end
138
141
 
139
142
  # Requires that the value is one of the valid ST_IconSet types
@@ -238,4 +241,25 @@ module Axlsx
238
241
  def self.validate_data_validation_type(v)
239
242
  RestrictionValidator.validate :data_validation_type, [:custom, :data, :decimal, :list, :none, :textLength, :time, :whole], v
240
243
  end
241
- end
244
+
245
+ # Requires that the value is a valid sheet view type.
246
+ # valid types must be one of normal, page_break_preview, page_layout
247
+ # @param [Any] v The value validated
248
+ def self.validate_sheet_view_type(v)
249
+ RestrictionValidator.validate :sheet_view_type, [:normal, :page_break_preview, :page_layout], v
250
+ end
251
+
252
+ # Requires that the value is a valid active pane type.
253
+ # valid types must be one of bottom_left, bottom_right, top_left, top_right
254
+ # @param [Any] v The value validated
255
+ def self.validate_pane_type(v)
256
+ RestrictionValidator.validate :active_pane_type, [:bottom_left, :bottom_right, :top_left, :top_right], v
257
+ end
258
+
259
+ # Requires that the value is a valid split state type.
260
+ # valid types must be one of frozen, frozen_split, split
261
+ # @param [Any] v The value validated
262
+ def self.validate_split_state_type(v)
263
+ RestrictionValidator.validate :split_state_type, [:frozen, :frozen_split, :split], v
264
+ end
265
+ end