axlsx 1.3.3 → 1.3.4
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +14 -0
- data/README.md +15 -15
- data/Rakefile +1 -1
- data/examples/example.rb +106 -35
- data/examples/wrap_text.rb +21 -0
- data/lib/axlsx/drawing/chart.rb +1 -1
- data/lib/axlsx/rels/relationship.rb +1 -1
- data/lib/axlsx/util/serialized_attributes.rb +32 -1
- data/lib/axlsx/util/validators.rb +1 -0
- data/lib/axlsx/version.rb +1 -1
- data/lib/axlsx/workbook/workbook.rb +1 -0
- data/lib/axlsx/workbook/worksheet/cell.rb +5 -2
- data/lib/axlsx/workbook/worksheet/cfvos.rb +0 -3
- data/lib/axlsx/workbook/worksheet/color_scale.rb +56 -16
- data/lib/axlsx/workbook/worksheet/data_bar.rb +42 -18
- data/lib/axlsx/workbook/worksheet/header_footer.rb +54 -0
- data/lib/axlsx/workbook/worksheet/worksheet.rb +29 -11
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +1 -1
- data/test/benchmark.rb +1 -2
- data/test/example.xlsx +0 -0
- data/test/profile.rb +4 -13
- data/test/rels/tc_relationship.rb +5 -0
- data/test/tc_helper.rb +5 -1
- data/test/workbook/worksheet/tc_color_scale.rb +31 -2
- data/test/workbook/worksheet/tc_data_bar.rb +7 -0
- data/test/workbook/worksheet/tc_header_footer.rb +151 -0
- data/test/workbook/worksheet/tc_worksheet.rb +31 -6
- data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +1 -1
- metadata +11 -49
- data/examples/doc/_index.html +0 -88
- data/examples/doc/class_list.html +0 -53
- data/examples/doc/css/common.css +0 -1
- data/examples/doc/css/full_list.css +0 -57
- data/examples/doc/css/style.css +0 -328
- data/examples/doc/file_list.html +0 -52
- data/examples/doc/frames.html +0 -28
- data/examples/doc/index.html +0 -88
- data/examples/doc/js/app.js +0 -214
- data/examples/doc/js/full_list.js +0 -173
- data/examples/doc/js/jquery.js +0 -4
- data/examples/doc/method_list.html +0 -52
- data/examples/doc/top-level-namespace.html +0 -102
- data/examples/extractive.pdf +0 -0
- data/examples/finance.rb +0 -82
- data/examples/hyperlinks.rb +0 -23
- data/examples/image1.gif +0 -0
- data/examples/image1.jpg +0 -0
- data/examples/image1.png +0 -0
- data/examples/sample.png +0 -0
- data/examples/scraping_html.rb +0 -91
- data/examples/sheet_view.rb +0 -34
- data/examples/skydrive/axlsx.csv +0 -1
- data/examples/skydrive/axlsx.xlsx +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 10.42.06 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 11.07.48 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 8.31.50 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 9.23.27 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 9.32.06 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 9.33.35 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 9.46.44 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-12 at 5.07.23 PM.png +0 -0
- data/examples/sprk2012/basics.rb +0 -11
- data/examples/sprk2012/basics.xlsx +0 -0
- data/examples/sprk2012/gravatar.jpeg +0 -0
- data/examples/sprk2012/hair_club.jpg +0 -0
- data/examples/sprk2012/images.rb +0 -9
- data/examples/sprk2012/images.xlsx +0 -0
- data/examples/sprk2012/line_chart.rb +0 -56
- data/examples/sprk2012/line_chart.xlsx +0 -0
- data/examples/sprk2012/sprk2012.key +0 -0
- data/examples/sprk2012/styles.rb +0 -20
- data/examples/sprk2012/styles.xlsx +0 -0
- data/examples/two_cell_anchor_image.rb +0 -11
@@ -145,6 +145,7 @@ module Axlsx
|
|
145
145
|
RestrictionValidator.validate "cell run style u", [:none, :single, :double, :singleAccounting, :doubleAccounting], v
|
146
146
|
end
|
147
147
|
|
148
|
+
# validates cell style family which must be between 1 and 5
|
148
149
|
def self.validate_family(v)
|
149
150
|
RestrictionValidator.validate "cell run style family", 1..5, v
|
150
151
|
end
|
data/lib/axlsx/version.rb
CHANGED
@@ -9,6 +9,7 @@ require 'axlsx/workbook/worksheet/cell.rb'
|
|
9
9
|
require 'axlsx/workbook/worksheet/page_margins.rb'
|
10
10
|
require 'axlsx/workbook/worksheet/page_set_up_pr.rb'
|
11
11
|
require 'axlsx/workbook/worksheet/page_setup.rb'
|
12
|
+
require 'axlsx/workbook/worksheet/header_footer.rb'
|
12
13
|
require 'axlsx/workbook/worksheet/print_options.rb'
|
13
14
|
require 'axlsx/workbook/worksheet/cfvo.rb'
|
14
15
|
require 'axlsx/workbook/worksheet/cfvos.rb'
|
@@ -398,8 +398,8 @@ module Axlsx
|
|
398
398
|
end
|
399
399
|
|
400
400
|
# assigns the owning row for this cell.
|
401
|
-
def row=(v)
|
402
|
-
|
401
|
+
def row=(v) @row=v end
|
402
|
+
|
403
403
|
# Determines the cell type based on the cell value.
|
404
404
|
# @note This is only used when a cell is created but no :type option is specified, the following rules apply:
|
405
405
|
# 1. If the value is an instance of Date, the type is set to :date
|
@@ -444,6 +444,9 @@ module Axlsx
|
|
444
444
|
v ? 1 : 0
|
445
445
|
else
|
446
446
|
@type = :string
|
447
|
+
v.to_s
|
448
|
+
# TODO find a better way to do this as it accounts for 30% of
|
449
|
+
# processing time in benchmarking...
|
447
450
|
::CGI.escapeHTML(v.to_s)
|
448
451
|
end
|
449
452
|
end
|
@@ -7,6 +7,35 @@ module Axlsx
|
|
7
7
|
# @see ConditionalFormattingRule#initialize
|
8
8
|
class ColorScale
|
9
9
|
|
10
|
+
class << self
|
11
|
+
|
12
|
+
# These are the default conditional formatting value objects
|
13
|
+
# that define a two tone color gradient.
|
14
|
+
def default_cfvos
|
15
|
+
[{:type => :min, :val => 0, :color => 'FFFF7128'},
|
16
|
+
{:type => :max, :val => 0, :color => 'FFFFEF9C'}]
|
17
|
+
end
|
18
|
+
|
19
|
+
# A builder for two tone color gradient
|
20
|
+
# @example
|
21
|
+
# # this creates a two tone color scale
|
22
|
+
# color_scale = Axlsx::ColorScale.two_tone
|
23
|
+
# @see examples/example.rb conditional formatting examples.
|
24
|
+
def two_tone
|
25
|
+
self.new
|
26
|
+
end
|
27
|
+
|
28
|
+
# A builder for three tone color gradient
|
29
|
+
# @example
|
30
|
+
# #this creates a three tone color scale
|
31
|
+
# color_scale = Axlsx::ColorScale.three_tone
|
32
|
+
# @see examples/example.rb conditional formatting examples.
|
33
|
+
def three_tone
|
34
|
+
self.new({:type => :min, :val => 0, :color => 'FFF8696B'},
|
35
|
+
{:type => :percent, :val => '50', :color => 'FFFFEB84'},
|
36
|
+
{:type => :max, :val => 0, :color => 'FF63BE7B'})
|
37
|
+
end
|
38
|
+
end
|
10
39
|
# A simple typed list of cfvos
|
11
40
|
# @return [SimpleTypedList]
|
12
41
|
# @see Cfvo
|
@@ -17,25 +46,31 @@ module Axlsx
|
|
17
46
|
# A simple types list of colors
|
18
47
|
# @return [SimpleTypedList]
|
19
48
|
# @see Color
|
20
|
-
|
49
|
+
def colors
|
50
|
+
@colors ||= SimpleTypedList.new Color
|
51
|
+
end
|
21
52
|
|
22
53
|
# creates a new ColorScale object.
|
23
|
-
# This method will yield it self so you can alter the properites of the defauls conditional formating value object (cfvo and colors
|
24
|
-
# Two value objects and two colors are created on initialization and cannot be deleted.
|
25
54
|
# @see Cfvo
|
26
55
|
# @see Color
|
27
|
-
|
28
|
-
|
56
|
+
# @example
|
57
|
+
# color_scale = Axlsx::ColorScale.new({:type => :num, :val => 0.55, :color => 'fff7696c'})
|
58
|
+
def initialize(*cfvos)
|
59
|
+
initialize_default_cfvos(cfvos)
|
29
60
|
yield self if block_given?
|
30
61
|
end
|
31
62
|
|
32
63
|
# adds a new cfvo / color pair to the color scale and returns a hash containing
|
33
64
|
# a reference to the newly created cfvo and color objects so you can alter the default properties.
|
34
65
|
# @return [Hash] a hash with :cfvo and :color keys referencing the newly added objects.
|
66
|
+
# @param [Hash] options options for the new cfvo and color objects
|
67
|
+
# @option [Symbol] type The type of cfvo you to add
|
68
|
+
# @option [Any] val The value of the cfvo to add
|
69
|
+
# @option [String] The rgb color for the cfvo
|
35
70
|
def add(options={})
|
36
71
|
value_objects << Cfvo.new(:type => options[:type] || :min, :val => options[:val] || 0)
|
37
|
-
|
38
|
-
{:cfvo => value_objects.last, :color =>
|
72
|
+
colors << Color.new(:rgb => options[:color] || "FF000000")
|
73
|
+
{:cfvo => value_objects.last, :color => colors.last}
|
39
74
|
end
|
40
75
|
|
41
76
|
|
@@ -44,7 +79,7 @@ module Axlsx
|
|
44
79
|
# @note you cannot remove the first two cfvo and color pairs
|
45
80
|
def delete_at(index=2)
|
46
81
|
value_objects.delete_at index
|
47
|
-
|
82
|
+
colors.delete_at index
|
48
83
|
end
|
49
84
|
|
50
85
|
# Serialize this color_scale object data to an xml string
|
@@ -53,18 +88,23 @@ module Axlsx
|
|
53
88
|
def to_xml_string(str = '')
|
54
89
|
str << '<colorScale>'
|
55
90
|
value_objects.to_xml_string(str)
|
56
|
-
|
91
|
+
colors.each { |color| color.to_xml_string(str) }
|
57
92
|
str << '</colorScale>'
|
58
93
|
end
|
59
94
|
|
60
95
|
private
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
96
|
+
# There has got to be cleaner way of merging these arrays.
|
97
|
+
def initialize_default_cfvos(user_cfvos)
|
98
|
+
defaults = self.class.default_cfvos
|
99
|
+
user_cfvos.each_with_index do |cfvo, index|
|
100
|
+
if index < defaults.size
|
101
|
+
cfvo = defaults[index].merge(cfvo)
|
102
|
+
end
|
103
|
+
add cfvo
|
104
|
+
end
|
105
|
+
while colors.size < defaults.size
|
106
|
+
add defaults[colors.size - 1]
|
107
|
+
end
|
67
108
|
end
|
68
|
-
|
69
109
|
end
|
70
110
|
end
|
@@ -10,16 +10,27 @@ module Axlsx
|
|
10
10
|
include Axlsx::OptionsParser
|
11
11
|
include Axlsx::SerializedAttributes
|
12
12
|
|
13
|
+
class << self
|
14
|
+
# This differs from ColorScale. There must be exactly two cfvos one color
|
15
|
+
def default_cfvos
|
16
|
+
[{:type => :min, :val => "0"},
|
17
|
+
{:type => :max, :val => "0"}]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
13
21
|
# Creates a new data bar conditional formatting object
|
22
|
+
# @param [Hash] options
|
14
23
|
# @option options [Integer] minLength
|
15
24
|
# @option options [Integer] maxLength
|
16
25
|
# @option options [Boolean] showValue
|
17
26
|
# @option options [String] color - the rbg value used to color the bars
|
18
|
-
|
27
|
+
# @param [Array] cfvos hashes defining the gradient interpolation points for this formatting.
|
28
|
+
def initialize(options = {}, *cfvos)
|
19
29
|
@min_length = 10
|
20
30
|
@max_length = 90
|
21
31
|
@show_value = true
|
22
32
|
parse_options options
|
33
|
+
initialize_cfvos(cfvos)
|
23
34
|
yield self if block_given?
|
24
35
|
end
|
25
36
|
|
@@ -70,27 +81,27 @@ module Axlsx
|
|
70
81
|
end
|
71
82
|
alias :minLength= :min_length=
|
72
83
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
84
|
+
# @see maxLength
|
85
|
+
def max_length=(v)
|
86
|
+
Axlsx.validate_unsigned_int(v)
|
87
|
+
@max_length = v
|
88
|
+
end
|
78
89
|
alias :maxLength= :max_length=
|
79
90
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
91
|
+
# @see showValue
|
92
|
+
def show_value=(v)
|
93
|
+
Axlsx.validate_boolean(v)
|
94
|
+
@show_value = v
|
95
|
+
end
|
85
96
|
alias :showValue= :show_value=
|
86
97
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
98
|
+
# Sets the color for the data bars.
|
99
|
+
# @param [Color|String] v The color object, or rgb string value to apply
|
100
|
+
def color=(v)
|
101
|
+
@color = v if v.is_a? Color
|
102
|
+
self.color.rgb = v if v.is_a? String
|
103
|
+
@color
|
104
|
+
end
|
94
105
|
|
95
106
|
# Serialize this object to an xml string
|
96
107
|
# @param [String] str
|
@@ -103,5 +114,18 @@ module Axlsx
|
|
103
114
|
self.color.to_xml_string(str)
|
104
115
|
str << '</dataBar>'
|
105
116
|
end
|
117
|
+
|
118
|
+
private
|
119
|
+
|
120
|
+
def initialize_cfvos(cfvos)
|
121
|
+
self.class.default_cfvos.each_with_index.map do |default, index|
|
122
|
+
if index < cfvos.size
|
123
|
+
value_objects << Cfvo.new(default.merge(cfvos[index]))
|
124
|
+
else
|
125
|
+
value_objects << Cfvo.new(default)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
106
130
|
end
|
107
131
|
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Axlsx
|
2
|
+
# Header/Footer options for printing a worksheet. All settings are optional.
|
3
|
+
#
|
4
|
+
# Headers and footers are generated using a string which is a combination
|
5
|
+
# of plain text and control characters. A fairly comprehensive list of control
|
6
|
+
# characters can be found here:
|
7
|
+
# https://github.com/randym/axlsx/blob/master/notes_on_header_footer.md
|
8
|
+
#
|
9
|
+
# @note The recommended way of managing header/footers is via Worksheet#header_footer
|
10
|
+
# @see Worksheet#initialize
|
11
|
+
class HeaderFooter
|
12
|
+
|
13
|
+
include Axlsx::OptionsParser
|
14
|
+
include Axlsx::SerializedAttributes
|
15
|
+
include Axlsx::Accessors
|
16
|
+
|
17
|
+
# Creates a new HeaderFooter object
|
18
|
+
# @option options [String] odd_header The content for headers on odd numbered pages.
|
19
|
+
# @option options [String] odd_footer The content for footers on odd numbered pages.
|
20
|
+
# @option options [String] even_header The content for headers on even numbered pages.
|
21
|
+
# @option options [String] even_footer The content for footers on even numbered pages.
|
22
|
+
# @option options [String] first_header The content for headers on even numbered pages.
|
23
|
+
# @option options [String] first_footer The content for footers on even numbered pages.
|
24
|
+
# @option options [Boolean] different_odd_even Setting this to true will show different headers/footers on odd and even pages. When false, the odd headers/footers are used on each page. (Default: false)
|
25
|
+
# @option options [Boolean] different_first If true, will use the first header/footer on page 1. Otherwise, the odd header/footer is used.
|
26
|
+
def initialize(options = {})
|
27
|
+
parse_options options
|
28
|
+
end
|
29
|
+
|
30
|
+
serializable_attributes :different_odd_even, :different_first
|
31
|
+
serializable_element_attributes :odd_header, :odd_footer, :even_header, :even_footer, :first_header, :first_footer
|
32
|
+
string_attr_accessor :odd_header, :odd_footer, :even_header, :even_footer, :first_header, :first_footer
|
33
|
+
boolean_attr_accessor :different_odd_even, :different_first
|
34
|
+
|
35
|
+
# Set some or all header/footers at once.
|
36
|
+
# @param [Hash] options The header/footer options to set (possible keys are :odd_header, :odd_footer, :even_header, :even_footer, :first_header, :first_footer, :different_odd_even, and :different_first).
|
37
|
+
def set(options)
|
38
|
+
parse_options options
|
39
|
+
end
|
40
|
+
|
41
|
+
# Serializes the header/footer object.
|
42
|
+
# @param [String] str
|
43
|
+
# @return [String]
|
44
|
+
def to_xml_string(str = '')
|
45
|
+
str << "<headerFooter "
|
46
|
+
serialized_attributes str
|
47
|
+
str << ">"
|
48
|
+
serialized_element_attributes(str) do |value|
|
49
|
+
value = ::CGI.escapeHTML(value)
|
50
|
+
end
|
51
|
+
str << "</headerFooter>"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -9,7 +9,8 @@ module Axlsx
|
|
9
9
|
# This is used for autowidth calculations
|
10
10
|
# @return [String]
|
11
11
|
def self.thin_chars
|
12
|
-
|
12
|
+
# removed 'e' and 'y' from this list - as a GUESS
|
13
|
+
@thin_chars ||= "^.acfijklrstxzFIJL()-"
|
13
14
|
end
|
14
15
|
|
15
16
|
# Creates a new worksheet.
|
@@ -18,6 +19,7 @@ module Axlsx
|
|
18
19
|
# @option options [String] name The name of this worksheet.
|
19
20
|
# @option options [Hash] page_margins A hash containing page margins for this worksheet. @see PageMargins
|
20
21
|
# @option options [Hash] print_options A hash containing print options for this worksheet. @see PrintOptions
|
22
|
+
# @option options [Hash] header_footer A hash containing header/footer options for this worksheet. @see HeaderFooter
|
21
23
|
# @option options [Boolean] show_gridlines indicates if gridlines should be shown for this sheet.
|
22
24
|
def initialize(wb, options={})
|
23
25
|
self.workbook = wb
|
@@ -34,6 +36,7 @@ module Axlsx
|
|
34
36
|
@page_margins = PageMargins.new options[:page_margins] if options[:page_margins]
|
35
37
|
@page_setup = PageSetup.new options[:page_setup] if options[:page_setup]
|
36
38
|
@print_options = PrintOptions.new options[:print_options] if options[:print_options]
|
39
|
+
@header_footer = HeaderFooter.new options[:header_footer] if options[:header_footer]
|
37
40
|
end
|
38
41
|
|
39
42
|
# The name of the worksheet
|
@@ -41,7 +44,7 @@ module Axlsx
|
|
41
44
|
def name
|
42
45
|
@name ||= "Sheet" + (index+1).to_s
|
43
46
|
end
|
44
|
-
|
47
|
+
|
45
48
|
# The sheet calculation properties
|
46
49
|
# @return [SheetCalcPr]
|
47
50
|
def sheet_calc_pr
|
@@ -104,7 +107,7 @@ module Axlsx
|
|
104
107
|
# An range that excel will apply an autfilter to "A1:B3"
|
105
108
|
# This will turn filtering on for the cells in the range.
|
106
109
|
# The first row is considered the header, while subsequent rows are considerd to be data.
|
107
|
-
# @return String
|
110
|
+
# @return String
|
108
111
|
def auto_filter
|
109
112
|
@auto_filter ||= AutoFilter.new self
|
110
113
|
end
|
@@ -193,6 +196,21 @@ module Axlsx
|
|
193
196
|
@print_options
|
194
197
|
end
|
195
198
|
|
199
|
+
# Options for headers and footers.
|
200
|
+
# @example
|
201
|
+
# wb = Axlsx::Package.new.workbook
|
202
|
+
# # would generate something like: "file.xlsx : sheet_name 2 of 7 date with timestamp"
|
203
|
+
# header = {:different_odd_ => false, :odd_header => "&L&F : &A&C&Pof%N%R%D %T"}
|
204
|
+
# ws = wb.add_worksheet :header_footer => header
|
205
|
+
#
|
206
|
+
# @see HeaderFooter#initialize
|
207
|
+
# @return [HeaderFooter]
|
208
|
+
def header_footer
|
209
|
+
@header_footer ||= HeaderFooter.new
|
210
|
+
yield @header_footer if block_given?
|
211
|
+
@header_footer
|
212
|
+
end
|
213
|
+
|
196
214
|
# convinience method to access all cells in this worksheet
|
197
215
|
# @return [Array] cells
|
198
216
|
def cells
|
@@ -280,7 +298,7 @@ module Axlsx
|
|
280
298
|
|
281
299
|
# The name of the worksheet
|
282
300
|
# The name of a worksheet must be unique in the workbook, and must not exceed 31 characters
|
283
|
-
# @param [String] name
|
301
|
+
# @param [String] name
|
284
302
|
def name=(name)
|
285
303
|
validate_sheet_name name
|
286
304
|
@name=Axlsx::coder.encode(name)
|
@@ -388,7 +406,7 @@ module Axlsx
|
|
388
406
|
cf = ConditionalFormatting.new( :sqref => cells )
|
389
407
|
cf.add_rules rules
|
390
408
|
conditional_formattings << cf
|
391
|
-
conditional_formattings
|
409
|
+
conditional_formattings
|
392
410
|
end
|
393
411
|
|
394
412
|
# Add data validation to this worksheet.
|
@@ -513,7 +531,7 @@ module Axlsx
|
|
513
531
|
def sanitize(str)
|
514
532
|
str.gsub(CONTROL_CHAR_REGEX, '')
|
515
533
|
end
|
516
|
-
|
534
|
+
|
517
535
|
# The worksheet relationships. This is managed automatically by the worksheet
|
518
536
|
# @return [Relationships]
|
519
537
|
def relationships
|
@@ -570,12 +588,12 @@ module Axlsx
|
|
570
588
|
|
571
589
|
|
572
590
|
private
|
573
|
-
|
591
|
+
|
574
592
|
def validate_sheet_name(name)
|
575
593
|
DataTypeValidator.validate "Worksheet.name", String, name
|
576
594
|
raise ArgumentError, (ERR_SHEET_NAME_TOO_LONG % name) if name.size > 31
|
577
595
|
raise ArgumentError, (ERR_SHEET_NAME_COLON_FORBIDDEN % name) if name.include? ':'
|
578
|
-
name = Axlsx::coder.encode(name)
|
596
|
+
name = Axlsx::coder.encode(name)
|
579
597
|
sheet_names = @workbook.worksheets.map { |s| s.name }
|
580
598
|
raise ArgumentError, (ERR_DUPLICATE_SHEET_NAME % name) if sheet_names.include?(name)
|
581
599
|
end
|
@@ -586,7 +604,7 @@ module Axlsx
|
|
586
604
|
sheet_data, sheet_calc_pr, @sheet_protection, protected_ranges,
|
587
605
|
auto_filter, merged_cells, conditional_formattings,
|
588
606
|
data_validations, hyperlinks, print_options, page_margins,
|
589
|
-
page_setup, worksheet_drawing, worksheet_comments,
|
607
|
+
page_setup, header_footer, worksheet_drawing, worksheet_comments,
|
590
608
|
tables]
|
591
609
|
end
|
592
610
|
|
@@ -606,7 +624,7 @@ module Axlsx
|
|
606
624
|
# @see Worksheet#protect_range
|
607
625
|
# @return [SimpleTypedList] The protected ranges for this worksheet
|
608
626
|
def protected_ranges
|
609
|
-
@protected_ranges ||= ProtectedRanges.new self
|
627
|
+
@protected_ranges ||= ProtectedRanges.new self
|
610
628
|
# SimpleTypedList.new ProtectedRange
|
611
629
|
end
|
612
630
|
|
@@ -619,7 +637,7 @@ module Axlsx
|
|
619
637
|
# data validations array
|
620
638
|
# @return [Array]
|
621
639
|
def data_validations
|
622
|
-
@data_validations ||= DataValidations.new self
|
640
|
+
@data_validations ||= DataValidations.new self
|
623
641
|
end
|
624
642
|
|
625
643
|
# merged cells array
|