axlsx 1.3.1 → 1.3.2
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.
- 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
|
@@ -1,11 +1,27 @@
|
|
|
1
|
-
# encoding: UTF-8
|
|
2
1
|
module Axlsx
|
|
3
2
|
# Pane options for a worksheet.
|
|
4
3
|
#
|
|
5
4
|
# @note The recommended way to manage the pane options is via SheetView#pane
|
|
6
5
|
# @see SheetView#pane
|
|
7
6
|
class Pane
|
|
8
|
-
|
|
7
|
+
|
|
8
|
+
include Axlsx::OptionsParser
|
|
9
|
+
include Axlsx::SerializedAttributes
|
|
10
|
+
# Creates a new {Pane} object
|
|
11
|
+
# @option options [Symbol] active_pane Active Pane
|
|
12
|
+
# @option options [Symbol] state Split State
|
|
13
|
+
# @option options [Cell, String] top_left_cell Top Left Visible Cell
|
|
14
|
+
# @option options [Integer] x_split Horizontal Split Position
|
|
15
|
+
# @option options [Integer] y_split Vertical Split Position
|
|
16
|
+
def initialize(options={})
|
|
17
|
+
#defaults
|
|
18
|
+
@active_pane = @state = @top_left_cell = nil
|
|
19
|
+
@x_split = @y_split = 0
|
|
20
|
+
parse_options options
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
serializable_attributes :active_pane, :state, :top_left_cell, :x_split, :y_split
|
|
24
|
+
|
|
9
25
|
# Active Pane
|
|
10
26
|
# The pane that is active.
|
|
11
27
|
# Options are
|
|
@@ -32,8 +48,8 @@ module Axlsx
|
|
|
32
48
|
# @return [Symbol]
|
|
33
49
|
# default nil
|
|
34
50
|
attr_reader :active_pane
|
|
35
|
-
|
|
36
|
-
|
|
51
|
+
|
|
52
|
+
|
|
37
53
|
# Split State
|
|
38
54
|
# Indicates whether the pane has horizontal / vertical
|
|
39
55
|
# splits, and whether those splits are frozen.
|
|
@@ -51,8 +67,7 @@ module Axlsx
|
|
|
51
67
|
# @return [Symbol]
|
|
52
68
|
# default nil
|
|
53
69
|
attr_reader :state
|
|
54
|
-
|
|
55
|
-
|
|
70
|
+
|
|
56
71
|
# Top Left Visible Cell
|
|
57
72
|
# Location of the top left visible cell in the bottom
|
|
58
73
|
# right pane (when in Left-To-Right mode).
|
|
@@ -60,8 +75,7 @@ module Axlsx
|
|
|
60
75
|
# @return [String]
|
|
61
76
|
# default nil
|
|
62
77
|
attr_reader :top_left_cell
|
|
63
|
-
|
|
64
|
-
|
|
78
|
+
|
|
65
79
|
# Horizontal Split Position
|
|
66
80
|
# Horizontal position of the split, in 1/20th of a point; 0 (zero)
|
|
67
81
|
# if none. If the pane is frozen, this value indicates the number
|
|
@@ -70,8 +84,7 @@ module Axlsx
|
|
|
70
84
|
# @return [Integer]
|
|
71
85
|
# default 0
|
|
72
86
|
attr_reader :x_split
|
|
73
|
-
|
|
74
|
-
|
|
87
|
+
|
|
75
88
|
# Vertical Split Position
|
|
76
89
|
# Vertical position of the split, in 1/20th of a point; 0 (zero)
|
|
77
90
|
# if none. If the pane is frozen, this value indicates the number
|
|
@@ -80,65 +93,49 @@ module Axlsx
|
|
|
80
93
|
# @return [Integer]
|
|
81
94
|
# default 0
|
|
82
95
|
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
|
-
|
|
96
|
+
|
|
103
97
|
# @see active_pane
|
|
104
|
-
def active_pane=(v)
|
|
105
|
-
|
|
106
|
-
|
|
98
|
+
def active_pane=(v)
|
|
99
|
+
Axlsx::validate_pane_type(v)
|
|
100
|
+
@active_pane = Axlsx::camel(v.to_s, false)
|
|
101
|
+
end
|
|
102
|
+
|
|
107
103
|
# @see state
|
|
108
|
-
def state=(v)
|
|
109
|
-
|
|
110
|
-
|
|
104
|
+
def state=(v)
|
|
105
|
+
Axlsx::validate_split_state_type(v)
|
|
106
|
+
@state = Axlsx::camel(v.to_s, false)
|
|
107
|
+
end
|
|
108
|
+
|
|
111
109
|
# @see top_left_cell
|
|
112
110
|
def top_left_cell=(v)
|
|
113
111
|
cell = (v.class == Axlsx::Cell ? v.r_abs : v)
|
|
114
|
-
Axlsx::validate_string(cell)
|
|
115
|
-
@top_left_cell = cell
|
|
112
|
+
Axlsx::validate_string(cell)
|
|
113
|
+
@top_left_cell = cell
|
|
116
114
|
end
|
|
117
|
-
|
|
118
|
-
|
|
115
|
+
|
|
119
116
|
# @see x_split
|
|
120
117
|
def x_split=(v); Axlsx::validate_unsigned_int(v); @x_split = v end
|
|
121
|
-
|
|
122
|
-
|
|
118
|
+
|
|
123
119
|
# @see y_split
|
|
124
120
|
def y_split=(v); Axlsx::validate_unsigned_int(v); @y_split = v end
|
|
125
|
-
|
|
126
|
-
|
|
121
|
+
|
|
127
122
|
# Serializes the data validation
|
|
128
123
|
# @param [String] str
|
|
129
124
|
# @return [String]
|
|
130
125
|
def to_xml_string(str = '')
|
|
131
|
-
|
|
126
|
+
finalize
|
|
127
|
+
str << '<pane '
|
|
128
|
+
serialized_attributes str
|
|
129
|
+
str << '/>'
|
|
130
|
+
end
|
|
131
|
+
private
|
|
132
|
+
|
|
133
|
+
def finalize
|
|
134
|
+
if @state == 'frozen' && @top_left_cell.nil?
|
|
132
135
|
row = @y_split || 0
|
|
133
136
|
column = @x_split || 0
|
|
134
|
-
|
|
135
137
|
@top_left_cell = "#{('A'..'ZZ').to_a[column]}#{row+1}"
|
|
136
138
|
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
139
|
end
|
|
143
140
|
end
|
|
144
141
|
end
|
|
@@ -6,22 +6,9 @@ module Axlsx
|
|
|
6
6
|
# @see Worksheet#initialize
|
|
7
7
|
class PrintOptions
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
# Whether row and column headings should be printed.
|
|
14
|
-
# @return [Boolean]
|
|
15
|
-
attr_reader :headings
|
|
16
|
-
|
|
17
|
-
# Whether the content should be centered horizontally on the page.
|
|
18
|
-
# @return [Boolean]
|
|
19
|
-
attr_reader :horizontal_centered
|
|
20
|
-
|
|
21
|
-
# Whether the content should be centered vertically on the page.
|
|
22
|
-
# @return [Boolean]
|
|
23
|
-
attr_reader :vertical_centered
|
|
24
|
-
|
|
9
|
+
include Axlsx::OptionsParser
|
|
10
|
+
include Axlsx::SerializedAttributes
|
|
11
|
+
include Axlsx::Accessors
|
|
25
12
|
# Creates a new PrintOptions object
|
|
26
13
|
# @option options [Boolean] grid_lines Whether grid lines should be printed
|
|
27
14
|
# @option options [Boolean] headings Whether row and column headings should be printed
|
|
@@ -32,31 +19,22 @@ module Axlsx
|
|
|
32
19
|
set(options)
|
|
33
20
|
end
|
|
34
21
|
|
|
22
|
+
serializable_attributes :grid_lines, :headings, :horizontal_centered, :vertical_centered
|
|
23
|
+
boolean_attr_accessor :grid_lines, :headings, :horizontal_centered, :vertical_centered
|
|
24
|
+
|
|
35
25
|
# Set some or all options at once.
|
|
36
26
|
# @param [Hash] options The options to set (possible keys are :grid_lines, :headings, :horizontal_centered, and :vertical_centered).
|
|
37
27
|
def set(options)
|
|
38
|
-
options
|
|
39
|
-
send("#{k}=", v) if respond_to? "#{k}="
|
|
40
|
-
end
|
|
28
|
+
parse_options options
|
|
41
29
|
end
|
|
42
30
|
|
|
43
|
-
# @see grid_lines
|
|
44
|
-
def grid_lines=(v); Axlsx::validate_boolean(v); @grid_lines = v; end
|
|
45
|
-
# @see headings
|
|
46
|
-
def headings=(v); Axlsx::validate_boolean(v); @headings = v; end
|
|
47
|
-
# @see horizontal_centered
|
|
48
|
-
def horizontal_centered=(v); Axlsx::validate_boolean(v); @horizontal_centered = v; end
|
|
49
|
-
# @see vertical_centered
|
|
50
|
-
def vertical_centered=(v); Axlsx::validate_boolean(v); @vertical_centered = v; end
|
|
51
|
-
|
|
52
31
|
# Serializes the page options element.
|
|
53
32
|
# @note As all attributes default to "false" according to the xml schema definition, the generated xml includes only those attributes that are set to true.
|
|
54
33
|
# @param [String] str
|
|
55
34
|
# @return [String]
|
|
56
35
|
def to_xml_string(str = '')
|
|
57
36
|
str << '<printOptions '
|
|
58
|
-
|
|
59
|
-
str << instance_values.select{ |k,v| v == true }.map{ |k,v| k.gsub(/_(.)/){ $1.upcase } << %{="#{v}"} }.join(' ')
|
|
37
|
+
serialized_attributes str
|
|
60
38
|
str << '/>'
|
|
61
39
|
end
|
|
62
40
|
end
|
|
@@ -4,6 +4,18 @@ module Axlsx
|
|
|
4
4
|
# @see Worksheet#protect_range
|
|
5
5
|
class ProtectedRange
|
|
6
6
|
|
|
7
|
+
include Axlsx::OptionsParser
|
|
8
|
+
include Axlsx::SerializedAttributes
|
|
9
|
+
|
|
10
|
+
# Initializes a new protected range object
|
|
11
|
+
# @option [String] sqref The cell range reference to protect. This can be an absolute or a relateve range however, it only applies to the current sheet.
|
|
12
|
+
# @option [String] name An optional name for the protected name.
|
|
13
|
+
def initialize(options={})
|
|
14
|
+
parse_options options
|
|
15
|
+
yield self if block_given?
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
serializable_attributes :sqref, :name
|
|
7
19
|
# The reference for the protected range
|
|
8
20
|
# @return [String]
|
|
9
21
|
attr_reader :sqref
|
|
@@ -12,16 +24,6 @@ module Axlsx
|
|
|
12
24
|
# @return [String]
|
|
13
25
|
attr_reader :name
|
|
14
26
|
|
|
15
|
-
# Initializes a new protected range object
|
|
16
|
-
# @option [String] sqref The cell range reference to protect. This can be an absolute or a relateve range however, it only applies to the current sheet.
|
|
17
|
-
# @option [String] name An optional name for the protected name.
|
|
18
|
-
def initialize(options={})
|
|
19
|
-
options.each do |o|
|
|
20
|
-
self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
|
|
21
|
-
end
|
|
22
|
-
yield self if block_given?
|
|
23
|
-
end
|
|
24
|
-
|
|
25
27
|
# @see sqref
|
|
26
28
|
def sqref=(v)
|
|
27
29
|
Axlsx.validate_string(v)
|
|
@@ -33,14 +35,15 @@ module Axlsx
|
|
|
33
35
|
Axlsx.validate_string(v)
|
|
34
36
|
@name = v
|
|
35
37
|
end
|
|
36
|
-
|
|
38
|
+
|
|
37
39
|
# serializes the proteted range
|
|
38
40
|
# @param [String] str if this string object is provided we append
|
|
39
41
|
# our output to that object. Use this - it helps limit the number of
|
|
40
42
|
# objects created during serialization
|
|
41
43
|
def to_xml_string(str="")
|
|
42
|
-
|
|
43
|
-
str
|
|
44
|
+
str << '<protectedRange '
|
|
45
|
+
serialized_attributes str
|
|
46
|
+
str << '/>'
|
|
44
47
|
end
|
|
45
48
|
end
|
|
46
49
|
end
|
|
@@ -5,15 +5,28 @@ module Axlsx
|
|
|
5
5
|
# @note The recommended way to manage the selection pane options is via SheetView#add_selection
|
|
6
6
|
# @see SheetView#add_selection
|
|
7
7
|
class Selection
|
|
8
|
-
|
|
8
|
+
|
|
9
|
+
include Axlsx::OptionsParser
|
|
10
|
+
include Axlsx::SerializedAttributes
|
|
11
|
+
|
|
12
|
+
# Creates a new {Selection} object
|
|
13
|
+
# @option options [Cell, String] active_cell Active Cell Location
|
|
14
|
+
# @option options [Integer] active_cell_id Active Cell Index
|
|
15
|
+
# @option options [Symbol] pane Pane
|
|
16
|
+
# @option options [String] sqref Sequence of References
|
|
17
|
+
def initialize(options={})
|
|
18
|
+
@active_cell = @active_cell_id = @pane = @sqref = nil
|
|
19
|
+
parse_options options
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
serializable_attributes :active_cell, :active_cell_id, :pane, :sqref
|
|
9
23
|
# Active Cell Location
|
|
10
24
|
# Location of the active cell.
|
|
11
25
|
# @see type
|
|
12
26
|
# @return [String]
|
|
13
27
|
# default nil
|
|
14
28
|
attr_reader :active_cell
|
|
15
|
-
|
|
16
|
-
|
|
29
|
+
|
|
17
30
|
# Active Cell Index
|
|
18
31
|
# 0-based index of the range reference (in the array of references listed in sqref)
|
|
19
32
|
# containing the active cell. Only used when the selection in sqref is not contiguous.
|
|
@@ -24,8 +37,7 @@ module Axlsx
|
|
|
24
37
|
# @return [Integer]
|
|
25
38
|
# default nil
|
|
26
39
|
attr_reader :active_cell_id
|
|
27
|
-
|
|
28
|
-
|
|
40
|
+
|
|
29
41
|
# Pane
|
|
30
42
|
# The pane to which this selection belongs.
|
|
31
43
|
# Options are
|
|
@@ -52,59 +64,39 @@ module Axlsx
|
|
|
52
64
|
# @return [Symbol]
|
|
53
65
|
# default nil
|
|
54
66
|
attr_reader :pane
|
|
55
|
-
|
|
56
|
-
|
|
67
|
+
|
|
57
68
|
# Sequence of References
|
|
58
69
|
# Range of the selection. Can be non-contiguous set of ranges.
|
|
59
70
|
# @see type
|
|
60
71
|
# @return [String]
|
|
61
72
|
# default nil
|
|
62
73
|
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
|
-
|
|
74
|
+
|
|
81
75
|
# @see active_cell
|
|
82
76
|
def active_cell=(v)
|
|
83
77
|
cell = (v.class == Axlsx::Cell ? v.r_abs : v)
|
|
84
|
-
Axlsx::validate_string(cell)
|
|
85
|
-
@active_cell = cell
|
|
78
|
+
Axlsx::validate_string(cell)
|
|
79
|
+
@active_cell = cell
|
|
86
80
|
end
|
|
87
|
-
|
|
88
|
-
|
|
81
|
+
|
|
89
82
|
# @see active_cell_id
|
|
90
83
|
def active_cell_id=(v); Axlsx::validate_unsigned_int(v); @active_cell_id = v end
|
|
91
|
-
|
|
92
|
-
|
|
84
|
+
|
|
93
85
|
# @see pane
|
|
94
|
-
def pane=(v)
|
|
95
|
-
|
|
96
|
-
|
|
86
|
+
def pane=(v)
|
|
87
|
+
Axlsx::validate_pane_type(v)
|
|
88
|
+
@pane = Axlsx::camel(v, false)
|
|
89
|
+
end
|
|
90
|
+
|
|
97
91
|
# @see sqref
|
|
98
92
|
def sqref=(v); Axlsx::validate_string(v); @sqref = v end
|
|
99
|
-
|
|
100
|
-
|
|
93
|
+
|
|
101
94
|
# Serializes the data validation
|
|
102
95
|
# @param [String] str
|
|
103
96
|
# @return [String]
|
|
104
97
|
def to_xml_string(str = '')
|
|
105
98
|
str << '<selection '
|
|
106
|
-
str
|
|
107
|
-
%{="#{[:pane].include?(key.to_sym) ? value.to_s.gsub(/_(.)/){ $1.upcase } : value}"} unless value.nil? }.join(' ')
|
|
99
|
+
serialized_attributes str
|
|
108
100
|
str << '/>'
|
|
109
101
|
end
|
|
110
102
|
end
|
|
@@ -3,33 +3,20 @@ module Axlsx
|
|
|
3
3
|
# the SheetCalcPr object for the worksheet
|
|
4
4
|
# This object contains calculation properties for the worksheet.
|
|
5
5
|
class SheetCalcPr
|
|
6
|
-
|
|
6
|
+
include Axlsx::OptionsParser
|
|
7
|
+
include Axlsx::SerializedAttributes
|
|
8
|
+
include Axlsx::Accessors
|
|
7
9
|
# creates a new SheetCalcPr
|
|
8
10
|
# @param [Hash] options Options for this object
|
|
9
11
|
# @option [Boolean] full_calc_on_load @see full_calc_on_load
|
|
10
12
|
def initialize(options={})
|
|
11
13
|
@full_calc_on_load = true
|
|
12
|
-
options
|
|
13
|
-
self.send("#{key}=", value) if self.respond_to?("#{key}=")
|
|
14
|
-
end
|
|
14
|
+
parse_options options
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
# load due to contents on this sheet. After load and successful cal,c
|
|
19
|
-
# the application shall set this value to false. Set this to true
|
|
20
|
-
# when the application should calculate the workbook on load.
|
|
21
|
-
# @return [Boolean]
|
|
22
|
-
def full_calc_on_load
|
|
23
|
-
@full_calc_on_load
|
|
24
|
-
end
|
|
17
|
+
boolean_attr_accessor :full_calc_on_load
|
|
25
18
|
|
|
26
|
-
|
|
27
|
-
# @param [Boolean] value
|
|
28
|
-
# @see full_calc_on_load
|
|
29
|
-
def full_calc_on_load=(value)
|
|
30
|
-
Axlsx.validate_boolean(value)
|
|
31
|
-
@full_calc_on_load = value
|
|
32
|
-
end
|
|
19
|
+
serializable_attributes :full_calc_on_load
|
|
33
20
|
|
|
34
21
|
# Serialize the object
|
|
35
22
|
# @param [String] str the string to append this objects serialized
|
|
@@ -38,12 +25,5 @@ module Axlsx
|
|
|
38
25
|
def to_xml_string(str='')
|
|
39
26
|
str << "<sheetCalcPr #{serialized_attributes}/>"
|
|
40
27
|
end
|
|
41
|
-
|
|
42
|
-
private
|
|
43
|
-
|
|
44
|
-
def serialized_attributes
|
|
45
|
-
instance_values.map { |key, value| "#{Axlsx.camel(key, false)}='#{value}'" }.join(' ')
|
|
46
|
-
end
|
|
47
|
-
|
|
48
28
|
end
|
|
49
29
|
end
|
|
@@ -2,73 +2,44 @@ module Axlsx
|
|
|
2
2
|
|
|
3
3
|
# The SheetPr class manages serialization fo a worksheet's sheetPr element.
|
|
4
4
|
class SheetPr
|
|
5
|
-
|
|
5
|
+
include Axlsx::OptionsParser
|
|
6
|
+
include Axlsx::Accessors
|
|
7
|
+
include Axlsx::SerializedAttributes
|
|
8
|
+
|
|
9
|
+
serializable_attributes :sync_horizontal,
|
|
10
|
+
:sync_vertical,
|
|
11
|
+
:transtion_evaluation,
|
|
12
|
+
:transition_entry,
|
|
13
|
+
:published,
|
|
14
|
+
:filter_mode,
|
|
15
|
+
:enable_format_conditions_calculation,
|
|
16
|
+
:code_name,
|
|
17
|
+
:sync_ref
|
|
6
18
|
|
|
7
19
|
# These attributes are all boolean so I'm doing a bit of a hand
|
|
8
20
|
# waving magic show to set up the attriubte accessors
|
|
9
|
-
|
|
10
|
-
:sync_vertical,
|
|
11
|
-
:transtion_evaluation,
|
|
21
|
+
boolean_attr_accessor :sync_horizontal,
|
|
22
|
+
:sync_vertical,
|
|
23
|
+
:transtion_evaluation,
|
|
12
24
|
:transition_entry,
|
|
13
25
|
:published,
|
|
14
26
|
:filter_mode,
|
|
15
|
-
:enable_format_conditions_calculation
|
|
27
|
+
:enable_format_conditions_calculation
|
|
16
28
|
|
|
29
|
+
string_attr_accessor :code_name, :sync_ref
|
|
17
30
|
|
|
18
31
|
# Creates a new SheetPr object
|
|
19
32
|
# @param [Worksheet] worksheet The worksheet that owns this SheetPr object
|
|
20
33
|
def initialize(worksheet, options={})
|
|
21
34
|
raise ArgumentError, "you must provide a worksheet" unless worksheet.is_a?(Worksheet)
|
|
22
35
|
@worksheet = worksheet
|
|
23
|
-
options
|
|
24
|
-
attr = "#{key}="
|
|
25
|
-
self.send(attr, value) if self.respond_to?(attr)
|
|
26
|
-
end
|
|
36
|
+
parse_options options
|
|
27
37
|
end
|
|
28
38
|
|
|
29
|
-
# Dynamically create accessors for boolean attriubtes
|
|
30
|
-
BOOLEAN_ATTRIBUTES.each do |attr|
|
|
31
|
-
class_eval %{
|
|
32
|
-
# The #{attr} attribute reader
|
|
33
|
-
# @return [Boolean]
|
|
34
|
-
attr_reader :#{attr}
|
|
35
|
-
|
|
36
|
-
# The #{attr} writer
|
|
37
|
-
# @param [Boolean] value The value to assign to #{attr}
|
|
38
|
-
# @return [Boolean]
|
|
39
|
-
def #{attr}=(value)
|
|
40
|
-
Axlsx::validate_boolean(value)
|
|
41
|
-
@#{attr} = value
|
|
42
|
-
end
|
|
43
|
-
}
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
# Anchor point for worksheet's window.
|
|
47
|
-
# @return [String]
|
|
48
|
-
attr_reader :code_name
|
|
49
|
-
|
|
50
|
-
# Specifies a stable name of the sheet, which should not change over time,
|
|
51
|
-
# and does not change from user input. This name should be used by code
|
|
52
|
-
# to reference a particular sheet.
|
|
53
|
-
# @return [String]
|
|
54
|
-
attr_reader :sync_ref
|
|
55
|
-
|
|
56
39
|
# The worksheet these properties apply to!
|
|
57
40
|
# @return [Worksheet]
|
|
58
41
|
attr_reader :worksheet
|
|
59
42
|
|
|
60
|
-
# @see code_name
|
|
61
|
-
# @param [String] name
|
|
62
|
-
def code_name=(name)
|
|
63
|
-
@code_name = name
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
# @see sync_ref
|
|
67
|
-
# @param [String] ref A cell reference (e.g. "A1")
|
|
68
|
-
def sync_ref=(ref)
|
|
69
|
-
@sync_ref = ref
|
|
70
|
-
end
|
|
71
|
-
|
|
72
43
|
# Serialize the object
|
|
73
44
|
# @param [String] str serialized output will be appended to this object if provided.
|
|
74
45
|
# @return [String]
|
|
@@ -87,15 +58,6 @@ module Axlsx
|
|
|
87
58
|
|
|
88
59
|
private
|
|
89
60
|
|
|
90
|
-
def serialized_attributes(str = '')
|
|
91
|
-
instance_values.each do |key, value|
|
|
92
|
-
unless %(worksheet page_setup_pr).include? key
|
|
93
|
-
str << "#{Axlsx.camel(key, false)}='#{value}' "
|
|
94
|
-
end
|
|
95
|
-
end
|
|
96
|
-
str
|
|
97
|
-
end
|
|
98
|
-
|
|
99
61
|
def update_properties
|
|
100
62
|
page_setup_pr.fit_to_page = worksheet.fit_to_page?
|
|
101
63
|
if worksheet.auto_filter.columns.size > 0
|