axlsx 1.3.1 → 1.3.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +13 -5
- data/examples/colored_links.rb +59 -0
- data/examples/example.rb +421 -266
- data/examples/example.xlsx +0 -0
- data/examples/example_streamed.xlsx +0 -0
- data/examples/finance.rb +82 -0
- data/examples/finance.xlsx +0 -0
- data/examples/financial.xlsx +0 -0
- data/examples/no-use_autowidth.xlsx +0 -0
- data/examples/shared_strings_example.xlsx +0 -0
- data/examples/where_is_my_color.xlsx +0 -0
- data/lib/axlsx.rb +11 -4
- data/lib/axlsx/content_type/abstract_content_type.rb +32 -0
- data/lib/axlsx/content_type/content_type.rb +1 -1
- data/lib/axlsx/content_type/default.rb +6 -37
- data/lib/axlsx/content_type/override.rb +6 -38
- data/lib/axlsx/doc_props/app.rb +7 -4
- data/lib/axlsx/drawing/axis.rb +3 -3
- data/lib/axlsx/drawing/chart.rb +2 -3
- data/lib/axlsx/drawing/d_lbls.rb +21 -31
- data/lib/axlsx/drawing/drawing.rb +6 -0
- data/lib/axlsx/drawing/hyperlink.rb +40 -32
- data/lib/axlsx/drawing/marker.rb +13 -13
- data/lib/axlsx/drawing/num_data.rb +6 -6
- data/lib/axlsx/drawing/num_data_source.rb +17 -16
- data/lib/axlsx/drawing/one_cell_anchor.rb +20 -22
- data/lib/axlsx/drawing/pic.rb +25 -27
- data/lib/axlsx/drawing/picture_locking.rb +12 -44
- data/lib/axlsx/drawing/scaling.rb +13 -13
- data/lib/axlsx/drawing/scatter_chart.rb +3 -3
- data/lib/axlsx/drawing/series.rb +3 -6
- data/lib/axlsx/drawing/str_data.rb +3 -3
- data/lib/axlsx/drawing/str_val.rb +7 -8
- data/lib/axlsx/drawing/view_3D.rb +51 -37
- data/lib/axlsx/drawing/vml_shape.rb +23 -23
- data/lib/axlsx/package.rb +14 -16
- data/lib/axlsx/stylesheet/border.rb +29 -20
- data/lib/axlsx/stylesheet/border_pr.rb +5 -4
- data/lib/axlsx/stylesheet/cell_alignment.rb +55 -29
- data/lib/axlsx/stylesheet/cell_protection.rb +7 -4
- data/lib/axlsx/stylesheet/cell_style.rb +19 -14
- data/lib/axlsx/stylesheet/color.rb +19 -16
- data/lib/axlsx/stylesheet/dxf.rb +4 -4
- data/lib/axlsx/stylesheet/font.rb +22 -22
- data/lib/axlsx/stylesheet/gradient_fill.rb +45 -21
- data/lib/axlsx/stylesheet/num_fmt.rb +22 -13
- data/lib/axlsx/stylesheet/pattern_fill.rb +12 -21
- data/lib/axlsx/stylesheet/styles.rb +1 -1
- data/lib/axlsx/stylesheet/table_style.rb +17 -16
- data/lib/axlsx/stylesheet/table_style_element.rb +15 -11
- data/lib/axlsx/stylesheet/table_styles.rb +14 -11
- data/lib/axlsx/stylesheet/xf.rb +28 -26
- data/lib/axlsx/util/accessors.rb +49 -0
- data/lib/axlsx/util/options_parser.rb +15 -0
- data/lib/axlsx/util/serialized_attributes.rb +46 -0
- data/lib/axlsx/util/simple_typed_list.rb +16 -4
- data/lib/axlsx/version.rb +1 -1
- data/lib/axlsx/workbook/defined_name.rb +13 -58
- data/lib/axlsx/workbook/workbook.rb +27 -1
- data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +11 -19
- data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +20 -27
- data/lib/axlsx/workbook/worksheet/cell.rb +38 -39
- data/lib/axlsx/workbook/worksheet/cfvo.rb +15 -15
- data/lib/axlsx/workbook/worksheet/cfvos.rb +18 -0
- data/lib/axlsx/workbook/worksheet/col.rb +34 -27
- data/lib/axlsx/workbook/worksheet/color_scale.rb +7 -13
- data/lib/axlsx/workbook/worksheet/comment.rb +14 -11
- data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +11 -11
- data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +27 -25
- data/lib/axlsx/workbook/worksheet/data_bar.rb +44 -34
- data/lib/axlsx/workbook/worksheet/data_validation.rb +61 -62
- data/lib/axlsx/workbook/worksheet/dimension.rb +0 -1
- data/lib/axlsx/workbook/worksheet/icon_set.rb +20 -20
- data/lib/axlsx/workbook/worksheet/page_margins.rb +21 -19
- data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +6 -9
- data/lib/axlsx/workbook/worksheet/page_setup.rb +20 -19
- data/lib/axlsx/workbook/worksheet/pane.rb +48 -51
- data/lib/axlsx/workbook/worksheet/print_options.rb +8 -30
- data/lib/axlsx/workbook/worksheet/protected_range.rb +16 -13
- data/lib/axlsx/workbook/worksheet/selection.rb +30 -38
- data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +6 -26
- data/lib/axlsx/workbook/worksheet/sheet_pr.rb +19 -57
- data/lib/axlsx/workbook/worksheet/sheet_protection.rb +51 -155
- data/lib/axlsx/workbook/worksheet/sheet_view.rb +68 -234
- data/lib/axlsx/workbook/worksheet/table.rb +16 -18
- data/lib/axlsx/workbook/worksheet/table_style_info.rb +10 -27
- data/lib/axlsx/workbook/worksheet/worksheet.rb +6 -7
- data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +1 -1
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +11 -33
- data/test/content_type/tc_default.rb +0 -11
- data/test/content_type/tc_override.rb +0 -13
- data/test/drawing/tc_d_lbls.rb +14 -4
- data/test/tc_axlsx.rb +20 -2
- data/test/workbook/tc_defined_name.rb +2 -2
- data/test/workbook/tc_workbook.rb +15 -0
- data/test/workbook/worksheet/tc_col.rb +11 -1
- data/test/workbook/worksheet/tc_pane.rb +5 -45
- data/test/workbook/worksheet/tc_selection.rb +9 -48
- metadata +13 -3
@@ -8,35 +8,36 @@ module Axlsx
|
|
8
8
|
#
|
9
9
|
class Cfvo
|
10
10
|
|
11
|
+
include Axlsx::OptionsParser
|
12
|
+
include Axlsx::SerializedAttributes
|
13
|
+
|
14
|
+
# Creates a new Cfvo object
|
15
|
+
# @option options [Symbol] type The type of conditional formatting value object
|
16
|
+
# @option options [Boolean] gte threshold value usage indicator
|
17
|
+
# @option options [String] val The value of the conditional formatting object
|
18
|
+
def initialize(options={})
|
19
|
+
@gte = true
|
20
|
+
parse_options options
|
21
|
+
end
|
22
|
+
|
23
|
+
serializable_attributes :type, :gte, :val
|
24
|
+
|
11
25
|
# Type (ST_CfvoType)
|
12
26
|
# The type of this conditional formatting value object. options are num, percent, max, min, formula and percentile
|
13
27
|
# @return [Symbol]
|
14
28
|
attr_reader :type
|
15
29
|
|
16
|
-
|
17
30
|
# Type (xsd:boolean)
|
18
31
|
# For icon sets, determines whether this threshold value uses the greater than or equal to operator. 0 indicates 'greater than' is used instead of 'greater than or equal to'.
|
19
32
|
# The default value is true
|
20
33
|
# @return [Boolean]
|
21
34
|
attr_reader :gte
|
22
35
|
|
23
|
-
|
24
36
|
# Type (ST_Xstring)
|
25
37
|
# The value of the conditional formatting object
|
26
38
|
# This library will accept any value so long as it supports to_s
|
27
39
|
attr_reader :val
|
28
40
|
|
29
|
-
# Creates a new Cfvo object
|
30
|
-
# @option options [Symbol] type The type of conditional formatting value object
|
31
|
-
# @option options [Boolean] gte threshold value usage indicator
|
32
|
-
# @option options [String] val The value of the conditional formatting object
|
33
|
-
def initialize(options={})
|
34
|
-
@gte = true
|
35
|
-
options.each do |o|
|
36
|
-
self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
41
|
# @see type
|
41
42
|
def type=(v); Axlsx::validate_conditional_formatting_value_object_type(v); @type = v end
|
42
43
|
|
@@ -54,9 +55,8 @@ module Axlsx
|
|
54
55
|
# @return [String]
|
55
56
|
def to_xml_string(str = '')
|
56
57
|
str << '<cfvo '
|
57
|
-
str
|
58
|
+
serialized_attributes str
|
58
59
|
str << ' />'
|
59
60
|
end
|
60
|
-
|
61
61
|
end
|
62
62
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Axlsx
|
2
|
+
|
3
|
+
#A collection of Cfvo objects that initializes with the required
|
4
|
+
#first two items
|
5
|
+
class Cfvos < SimpleTypedList
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
super(Cfvo)
|
9
|
+
@list << Cfvo.new(:type => :min, :val => 0)
|
10
|
+
@list << Cfvo.new(:type => :max, :val => 0)
|
11
|
+
lock
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_xml_string(str='')
|
15
|
+
@list.each { |cfvo| cfvo.to_xml_string(str) }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -4,6 +4,27 @@ module Axlsx
|
|
4
4
|
# The Col class defines column attributes for columns in sheets.
|
5
5
|
class Col
|
6
6
|
|
7
|
+
include Axlsx::OptionsParser
|
8
|
+
include Axlsx::SerializedAttributes
|
9
|
+
# Create a new Col objects
|
10
|
+
# @param min First column affected by this 'column info' record.
|
11
|
+
# @param max Last column affected by this 'column info' record.
|
12
|
+
# @option options [Boolean] collapsed see Col#collapsed
|
13
|
+
# @option options [Boolean] hidden see Col#hidden
|
14
|
+
# @option options [Boolean] outlineLevel see Col#outlineLevel
|
15
|
+
# @option options [Boolean] phonetic see Col#phonetic
|
16
|
+
# @option options [Integer] style see Col#style
|
17
|
+
# @option options [Numeric] width see Col#width
|
18
|
+
def initialize(min, max, options={})
|
19
|
+
Axlsx.validate_unsigned_int(max)
|
20
|
+
Axlsx.validate_unsigned_int(min)
|
21
|
+
@min = min
|
22
|
+
@max = max
|
23
|
+
parse_options options
|
24
|
+
end
|
25
|
+
|
26
|
+
serializable_attributes :collapsed, :hidden, :outline_level, :phonetic, :style, :width, :min, :max, :best_fit, :custom_width
|
27
|
+
|
7
28
|
# First column affected by this 'column info' record.
|
8
29
|
# @return [Integer]
|
9
30
|
attr_reader :min
|
@@ -17,7 +38,8 @@ module Axlsx
|
|
17
38
|
# 'Best fit' means that when numbers are typed into a cell contained in a 'best fit' column, the column width should
|
18
39
|
# automatically resize to display the number. [Note: In best fit cases, column width must not be made smaller, only larger. end note]
|
19
40
|
# @return [Boolean]
|
20
|
-
attr_reader :
|
41
|
+
attr_reader :best_fit
|
42
|
+
alias :bestFit :best_fit
|
21
43
|
|
22
44
|
# Flag indicating if the outlining of the affected column(s) is in the collapsed state.
|
23
45
|
# @return [Boolean]
|
@@ -29,7 +51,8 @@ module Axlsx
|
|
29
51
|
|
30
52
|
# Outline level of affected column(s). Range is 0 to 7.
|
31
53
|
# @return [Integer]
|
32
|
-
attr_reader :
|
54
|
+
attr_reader :outline_level
|
55
|
+
alias :outlineLevel :outline_level
|
33
56
|
|
34
57
|
# Flag indicating if the phonetic information should be displayed by default for the affected column(s) of the worksheet.
|
35
58
|
# @return [Boolean]
|
@@ -44,7 +67,8 @@ module Axlsx
|
|
44
67
|
attr_reader :width
|
45
68
|
|
46
69
|
# @return [Boolean]
|
47
|
-
attr_reader :
|
70
|
+
attr_reader :custom_width
|
71
|
+
alias :customWidth :custom_width
|
48
72
|
|
49
73
|
# @see Col#collapsed
|
50
74
|
def collapsed=(v)
|
@@ -59,11 +83,12 @@ module Axlsx
|
|
59
83
|
end
|
60
84
|
|
61
85
|
# @see Col#outline
|
62
|
-
def
|
86
|
+
def outline_level=(v)
|
63
87
|
Axlsx.validate_unsigned_numeric(v)
|
64
88
|
raise ArgumentError, 'outlineLevel must be between 0 and 7' unless 0 <= v && v <= 7
|
65
|
-
@
|
89
|
+
@outline_level = v
|
66
90
|
end
|
91
|
+
alias :outlineLevel= :outline_level=
|
67
92
|
|
68
93
|
# @see Col#phonetic
|
69
94
|
def phonetic=(v)
|
@@ -80,29 +105,10 @@ module Axlsx
|
|
80
105
|
# @see Col#width
|
81
106
|
def width=(v)
|
82
107
|
Axlsx.validate_unsigned_numeric(v) unless v == nil
|
83
|
-
@
|
108
|
+
@custom_width = @best_fit = v != nil
|
84
109
|
@width = v
|
85
110
|
end
|
86
111
|
|
87
|
-
# Create a new Col objects
|
88
|
-
# @param min First column affected by this 'column info' record.
|
89
|
-
# @param max Last column affected by this 'column info' record.
|
90
|
-
# @option options [Boolean] collapsed see Col#collapsed
|
91
|
-
# @option options [Boolean] hidden see Col#hidden
|
92
|
-
# @option options [Boolean] outlineLevel see Col#outlineLevel
|
93
|
-
# @option options [Boolean] phonetic see Col#phonetic
|
94
|
-
# @option options [Integer] style see Col#style
|
95
|
-
# @option options [Numeric] width see Col#width
|
96
|
-
def initialize(min, max, options={})
|
97
|
-
Axlsx.validate_unsigned_int(max)
|
98
|
-
Axlsx.validate_unsigned_int(min)
|
99
|
-
@min = min
|
100
|
-
@max = max
|
101
|
-
options.each do |o|
|
102
|
-
self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
112
|
# updates the width for this col based on the cells autowidth and
|
107
113
|
# an optionally specified fixed width
|
108
114
|
# @param [Cell] cell The cell to use in updating this col's width
|
@@ -122,8 +128,9 @@ module Axlsx
|
|
122
128
|
# @param [String] str
|
123
129
|
# @return [String]
|
124
130
|
def to_xml_string(str = '')
|
125
|
-
|
126
|
-
str
|
131
|
+
str << '<col '
|
132
|
+
serialized_attributes str
|
133
|
+
str << '/>'
|
127
134
|
end
|
128
135
|
|
129
136
|
end
|
@@ -10,7 +10,9 @@ module Axlsx
|
|
10
10
|
# A simple typed list of cfvos
|
11
11
|
# @return [SimpleTypedList]
|
12
12
|
# @see Cfvo
|
13
|
-
|
13
|
+
def value_objects
|
14
|
+
@value_objects ||= Cfvos.new
|
15
|
+
end
|
14
16
|
|
15
17
|
# A simple types list of colors
|
16
18
|
# @return [SimpleTypedList]
|
@@ -23,7 +25,6 @@ module Axlsx
|
|
23
25
|
# @see Cfvo
|
24
26
|
# @see Color
|
25
27
|
def initialize
|
26
|
-
initialize_value_objects
|
27
28
|
initialize_colors
|
28
29
|
yield self if block_given?
|
29
30
|
end
|
@@ -32,9 +33,9 @@ module Axlsx
|
|
32
33
|
# a reference to the newly created cfvo and color objects so you can alter the default properties.
|
33
34
|
# @return [Hash] a hash with :cfvo and :color keys referencing the newly added objects.
|
34
35
|
def add(options={})
|
35
|
-
|
36
|
+
value_objects << Cfvo.new(:type => options[:type] || :min, :val => options[:val] || 0)
|
36
37
|
@colors << Color.new(:rgb => options[:color] || "FF000000")
|
37
|
-
{:cfvo =>
|
38
|
+
{:cfvo => value_objects.last, :color => @colors.last}
|
38
39
|
end
|
39
40
|
|
40
41
|
|
@@ -42,7 +43,7 @@ module Axlsx
|
|
42
43
|
# @param [Integer] index The index of the cfvo and color object to delete
|
43
44
|
# @note you cannot remove the first two cfvo and color pairs
|
44
45
|
def delete_at(index=2)
|
45
|
-
|
46
|
+
value_objects.delete_at index
|
46
47
|
@colors.delete_at index
|
47
48
|
end
|
48
49
|
|
@@ -51,20 +52,13 @@ module Axlsx
|
|
51
52
|
# @return [String]
|
52
53
|
def to_xml_string(str = '')
|
53
54
|
str << '<colorScale>'
|
54
|
-
|
55
|
+
value_objects.to_xml_string(str)
|
55
56
|
@colors.each { |color| color.to_xml_string(str) }
|
56
57
|
str << '</colorScale>'
|
57
58
|
end
|
58
59
|
|
59
60
|
private
|
60
61
|
|
61
|
-
# creates the initial cfvo objects
|
62
|
-
def initialize_value_objects
|
63
|
-
@value_objects = SimpleTypedList.new Cfvo
|
64
|
-
@value_objects.concat [Cfvo.new(:type => :min, :val => 0), Cfvo.new(:type => :max, :val => 0)]
|
65
|
-
@value_objects.lock
|
66
|
-
end
|
67
|
-
|
68
62
|
# creates the initial color objects
|
69
63
|
def initialize_colors
|
70
64
|
@colors = SimpleTypedList.new Color
|
@@ -3,6 +3,20 @@ module Axlsx
|
|
3
3
|
# A comment is the text data for a comment
|
4
4
|
class Comment
|
5
5
|
|
6
|
+
include Axlsx::OptionsParser
|
7
|
+
|
8
|
+
# Creates a new comment object
|
9
|
+
# @param [Comments] comments
|
10
|
+
# @param [Hash] options
|
11
|
+
# @option [String] author the author of the comment
|
12
|
+
# @option [String] text The text for the comment
|
13
|
+
def initialize(comments, options={})
|
14
|
+
raise ArgumentError, "A comment needs a parent comments object" unless comments.is_a?(Comments)
|
15
|
+
@comments = comments
|
16
|
+
parse_options options
|
17
|
+
yield self if block_given?
|
18
|
+
end
|
19
|
+
|
6
20
|
# The text to render
|
7
21
|
# @return [String]
|
8
22
|
attr_reader :text
|
@@ -26,22 +40,12 @@ module Axlsx
|
|
26
40
|
# rPh (Phonetic Text Run)
|
27
41
|
# phoneticPr (Phonetic Properties)
|
28
42
|
|
29
|
-
def initialize(comments, options={})
|
30
|
-
raise ArgumentError, "A comment needs a parent comments object" unless comments.is_a?(Comments)
|
31
|
-
@comments = comments
|
32
|
-
options.each do |o|
|
33
|
-
self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
|
34
|
-
end
|
35
|
-
yield self if block_given?
|
36
|
-
end
|
37
|
-
|
38
43
|
# The vml shape that will render this comment
|
39
44
|
# @return [VmlShape]
|
40
45
|
def vml_shape
|
41
46
|
@vml_shape ||= initialize_vml_shape
|
42
47
|
end
|
43
48
|
|
44
|
-
#
|
45
49
|
# The index of this author in a unique sorted list of all authors in
|
46
50
|
# the comment.
|
47
51
|
# @return [Integer]
|
@@ -96,6 +100,5 @@ module Axlsx
|
|
96
100
|
vml.bottom_row = vml.row + 4
|
97
101
|
end
|
98
102
|
end
|
99
|
-
|
100
103
|
end
|
101
104
|
end
|
@@ -6,6 +6,16 @@ module Axlsx
|
|
6
6
|
# @see ConditionalFormattingRule
|
7
7
|
class ConditionalFormatting
|
8
8
|
|
9
|
+
include Axlsx::OptionsParser
|
10
|
+
|
11
|
+
# Creates a new {ConditionalFormatting} object
|
12
|
+
# @option options [Array] rules The rules to apply
|
13
|
+
# @option options [String] sqref The range to apply the rules to
|
14
|
+
def initialize(options={})
|
15
|
+
@rules = []
|
16
|
+
parse_options options
|
17
|
+
end
|
18
|
+
|
9
19
|
# Range over which the formatting is applied, in "A1:B2" format
|
10
20
|
# @return [String]
|
11
21
|
attr_reader :sqref
|
@@ -18,17 +28,7 @@ module Axlsx
|
|
18
28
|
# @return [Array]
|
19
29
|
attr_reader :rules
|
20
30
|
|
21
|
-
|
22
|
-
# @option options [Array] rules The rules to apply
|
23
|
-
# @option options [String] sqref The range to apply the rules to
|
24
|
-
def initialize(options={})
|
25
|
-
@rules = []
|
26
|
-
options.each do |o|
|
27
|
-
self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
# Add Conditional Formatting Rules to this object. Rules can either
|
31
|
+
# Add Conditional Formatting Rules to this object. Rules can either
|
32
32
|
# be already created {ConditionalFormattingRule} elements or
|
33
33
|
# hashes of options for automatic creation. If rules is a hash
|
34
34
|
# instead of an array, assume only one rule being added.
|
@@ -8,8 +8,32 @@ module Axlsx
|
|
8
8
|
# @see ConditionalFormattingRule#initialize
|
9
9
|
class ConditionalFormattingRule
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
include Axlsx::OptionsParser
|
12
|
+
include Axlsx::SerializedAttributes
|
13
|
+
|
14
|
+
# Creates a new Conditional Formatting Rule object
|
15
|
+
# @option options [Symbol] type The type of this formatting rule
|
16
|
+
# @option options [Boolean] aboveAverage This is an aboveAverage rule
|
17
|
+
# @option options [Boolean] bottom This is a bottom N rule.
|
18
|
+
# @option options [Integer] dxfId The formatting id to apply to matches
|
19
|
+
# @option options [Boolean] equalAverage Is the aboveAverage or belowAverage rule inclusive
|
20
|
+
# @option options [Integer] priority The priority of the rule, 1 is highest
|
21
|
+
# @option options [Symbol] operator Which operator to apply
|
22
|
+
# @option options [String] text The value to apply a text operator against
|
23
|
+
# @option options [Boolean] percent If a top/bottom N rule, evaluate as N% rather than N
|
24
|
+
# @option options [Integer] rank If a top/bottom N rule, the value of N
|
25
|
+
# @option options [Integer] stdDev The number of standard deviations above or below the average to match
|
26
|
+
# @option options [Boolean] stopIfTrue Stop evaluating rules after this rule matches
|
27
|
+
# @option options [Symbol] timePeriod The time period in a date occuring... rule
|
28
|
+
# @option options [String] formula The formula to match against in i.e. an equal rule
|
29
|
+
def initialize(options={})
|
30
|
+
@color_scale = @data_bar = @icon_set = @formula = nil
|
31
|
+
parse_options options
|
32
|
+
end
|
33
|
+
|
34
|
+
serializable_attributes :type, :aboveAverage, :bottom, :dxfId, :equalAverage,
|
35
|
+
:priority, :operator, :text, :percent, :rank, :stdDev,
|
36
|
+
:stopIfTrue, :timePeriod
|
13
37
|
|
14
38
|
# Formula
|
15
39
|
# @return [String]
|
@@ -129,28 +153,6 @@ module Axlsx
|
|
129
153
|
@icon_set ||= IconSet.new
|
130
154
|
end
|
131
155
|
|
132
|
-
# Creates a new Conditional Formatting Rule object
|
133
|
-
# @option options [Symbol] type The type of this formatting rule
|
134
|
-
# @option options [Boolean] aboveAverage This is an aboveAverage rule
|
135
|
-
# @option options [Boolean] bottom This is a bottom N rule.
|
136
|
-
# @option options [Integer] dxfId The formatting id to apply to matches
|
137
|
-
# @option options [Boolean] equalAverage Is the aboveAverage or belowAverage rule inclusive
|
138
|
-
# @option options [Integer] priority The priority of the rule, 1 is highest
|
139
|
-
# @option options [Symbol] operator Which operator to apply
|
140
|
-
# @option options [String] text The value to apply a text operator against
|
141
|
-
# @option options [Boolean] percent If a top/bottom N rule, evaluate as N% rather than N
|
142
|
-
# @option options [Integer] rank If a top/bottom N rule, the value of N
|
143
|
-
# @option options [Integer] stdDev The number of standard deviations above or below the average to match
|
144
|
-
# @option options [Boolean] stopIfTrue Stop evaluating rules after this rule matches
|
145
|
-
# @option options [Symbol] timePeriod The time period in a date occuring... rule
|
146
|
-
# @option options [String] formula The formula to match against in i.e. an equal rule
|
147
|
-
def initialize(options={})
|
148
|
-
@color_scale = @data_bar = @icon_set = @formula = nil
|
149
|
-
options.each do |o|
|
150
|
-
self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
156
|
# @see type
|
155
157
|
def type=(v); Axlsx::validate_conditional_formatting_type(v); @type = v end
|
156
158
|
# @see aboveAverage
|
@@ -204,7 +206,7 @@ module Axlsx
|
|
204
206
|
# @return [String]
|
205
207
|
def to_xml_string(str = '')
|
206
208
|
str << '<cfRule '
|
207
|
-
str
|
209
|
+
serialized_attributes str
|
208
210
|
str << '>'
|
209
211
|
str << '<formula>' << self.formula << '</formula>' if @formula
|
210
212
|
@color_scale.to_xml_string(str) if @color_scale && @type == :colorScale
|
@@ -7,6 +7,24 @@ module Axlsx
|
|
7
7
|
# @see ConditionalFormattingRule#initialize
|
8
8
|
class DataBar
|
9
9
|
|
10
|
+
include Axlsx::OptionsParser
|
11
|
+
include Axlsx::SerializedAttributes
|
12
|
+
|
13
|
+
# Creates a new data bar conditional formatting object
|
14
|
+
# @option options [Integer] minLength
|
15
|
+
# @option options [Integer] maxLength
|
16
|
+
# @option options [Boolean] showValue
|
17
|
+
# @option options [String] color - the rbg value used to color the bars
|
18
|
+
def initialize(options = {})
|
19
|
+
@min_length = 10
|
20
|
+
@max_length = 90
|
21
|
+
@show_value = true
|
22
|
+
parse_options options
|
23
|
+
yield self if block_given?
|
24
|
+
end
|
25
|
+
|
26
|
+
serializable_attributes :min_length, :max_length, :show_value
|
27
|
+
|
10
28
|
# instance values that must be serialized as their own elements - e.g. not attributes.
|
11
29
|
CHILD_ELEMENTS = [:value_objects, :color]
|
12
30
|
|
@@ -14,24 +32,29 @@ module Axlsx
|
|
14
32
|
# The minimum length of the data bar, as a percentage of the cell width.
|
15
33
|
# The default value is 10
|
16
34
|
# @return [Integer]
|
17
|
-
attr_reader :
|
35
|
+
attr_reader :min_length
|
36
|
+
alias :minLength :min_length
|
18
37
|
|
19
38
|
# maxLength attribute
|
20
39
|
# The maximum length of the data bar, as a percentage of the cell width.
|
21
40
|
# The default value is 90
|
22
41
|
# @return [Integer]
|
23
|
-
attr_reader :
|
42
|
+
attr_reader :max_length
|
43
|
+
alias :maxLength :max_length
|
24
44
|
|
25
45
|
# maxLength attribute
|
26
46
|
# Indicates whether to show the values of the cells on which this data bar is applied.
|
27
47
|
# The default value is true
|
28
48
|
# @return [Boolean]
|
29
|
-
attr_reader :
|
49
|
+
attr_reader :show_value
|
50
|
+
alias :showValue :show_value
|
30
51
|
|
31
52
|
# A simple typed list of cfvos
|
32
53
|
# @return [SimpleTypedList]
|
33
54
|
# @see Cfvo
|
34
|
-
|
55
|
+
def value_objects
|
56
|
+
@value_objects ||= Cfvos.new
|
57
|
+
end
|
35
58
|
|
36
59
|
# color
|
37
60
|
# the color object used in the data bar formatting
|
@@ -40,29 +63,26 @@ module Axlsx
|
|
40
63
|
@color ||= Color.new :rgb => "FF0000FF"
|
41
64
|
end
|
42
65
|
|
43
|
-
#
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
# @option options [String] color - the rbg value used to color the bars
|
48
|
-
def initialize(options = {})
|
49
|
-
@minLength = 10
|
50
|
-
@maxLength = 90
|
51
|
-
@showValue = true
|
52
|
-
initialize_value_objects
|
53
|
-
options.each do |o|
|
54
|
-
self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
|
55
|
-
end
|
56
|
-
yield self if block_given?
|
66
|
+
# @see minLength
|
67
|
+
def min_length=(v)
|
68
|
+
Axlsx.validate_unsigned_int(v)
|
69
|
+
@min_length = v
|
57
70
|
end
|
71
|
+
alias :minLength= :min_length=
|
58
72
|
|
59
|
-
# @see minLength
|
60
|
-
def minLength=(v); Axlsx.validate_unsigned_int(v); @minLength = v end
|
61
73
|
# @see maxLength
|
62
|
-
def
|
74
|
+
def max_length=(v)
|
75
|
+
Axlsx.validate_unsigned_int(v)
|
76
|
+
@max_length = v
|
77
|
+
end
|
78
|
+
alias :maxLength= :max_length=
|
63
79
|
|
64
80
|
# @see showValue
|
65
|
-
def
|
81
|
+
def show_value=(v)
|
82
|
+
Axlsx.validate_boolean(v)
|
83
|
+
@show_value = v
|
84
|
+
end
|
85
|
+
alias :showValue= :show_value=
|
66
86
|
|
67
87
|
# Sets the color for the data bars.
|
68
88
|
# @param [Color|String] v The color object, or rgb string value to apply
|
@@ -77,21 +97,11 @@ module Axlsx
|
|
77
97
|
# @return [String]
|
78
98
|
def to_xml_string(str="")
|
79
99
|
str << '<dataBar '
|
80
|
-
str
|
100
|
+
serialized_attributes str
|
81
101
|
str << '>'
|
82
|
-
|
102
|
+
value_objects.to_xml_string(str)
|
83
103
|
self.color.to_xml_string(str)
|
84
104
|
str << '</dataBar>'
|
85
105
|
end
|
86
|
-
|
87
|
-
private
|
88
|
-
|
89
|
-
# Initalize the simple typed list of value objects
|
90
|
-
# I am keeping this private for now as I am not sure what impact changes to the required two cfvo objects will do.
|
91
|
-
def initialize_value_objects
|
92
|
-
@value_objects = SimpleTypedList.new Cfvo
|
93
|
-
@value_objects.concat [Cfvo.new(:type => :min, :val => 0), Cfvo.new(:type => :max, :val => 0)]
|
94
|
-
@value_objects.lock
|
95
|
-
end
|
96
106
|
end
|
97
107
|
end
|