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
|
@@ -3,6 +3,19 @@ module Axlsx
|
|
|
3
3
|
# The Scaling class defines axis scaling
|
|
4
4
|
class Scaling
|
|
5
5
|
|
|
6
|
+
include Axlsx::OptionsParser
|
|
7
|
+
|
|
8
|
+
# creates a new Scaling object
|
|
9
|
+
# @option options [Integer, Fixnum] logBase
|
|
10
|
+
# @option options [Symbol] orientation
|
|
11
|
+
# @option options [Float] max
|
|
12
|
+
# @option options [Float] min
|
|
13
|
+
def initialize(options={})
|
|
14
|
+
@orientation = :minMax
|
|
15
|
+
@logBase, @min, @max = nil, nil, nil
|
|
16
|
+
parse_options options
|
|
17
|
+
end
|
|
18
|
+
|
|
6
19
|
# logarithmic base for a logarithmic axis.
|
|
7
20
|
# must be between 2 and 1000
|
|
8
21
|
# @return [Integer]
|
|
@@ -21,19 +34,6 @@ module Axlsx
|
|
|
21
34
|
# @return [Float]
|
|
22
35
|
attr_reader :min
|
|
23
36
|
|
|
24
|
-
# creates a new Scaling object
|
|
25
|
-
# @option options [Integer, Fixnum] logBase
|
|
26
|
-
# @option options [Symbol] orientation
|
|
27
|
-
# @option options [Float] max
|
|
28
|
-
# @option options [Float] min
|
|
29
|
-
def initialize(options={})
|
|
30
|
-
@orientation = :minMax
|
|
31
|
-
@logBase, @min, @max = nil, nil, nil
|
|
32
|
-
options.each do |o|
|
|
33
|
-
self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
|
|
37
37
|
# @see logBase
|
|
38
38
|
def logBase=(v) DataTypeValidator.validate "Scaling.logBase", [Integer, Fixnum], v, lambda { |arg| arg >= 2 && arg <= 1000}; @logBase = v; end
|
|
39
39
|
# @see orientation
|
|
@@ -7,6 +7,8 @@ module Axlsx
|
|
|
7
7
|
# @see README for an example
|
|
8
8
|
class ScatterChart < Chart
|
|
9
9
|
|
|
10
|
+
include Axlsx::OptionsParser
|
|
11
|
+
|
|
10
12
|
# The Style for the scatter chart
|
|
11
13
|
# must be one of :none | :line | :lineMarker | :marker | :smooth | :smoothMarker
|
|
12
14
|
# return [Symbol]
|
|
@@ -30,9 +32,7 @@ module Axlsx
|
|
|
30
32
|
super(frame, options)
|
|
31
33
|
@series_type = ScatterSeries
|
|
32
34
|
@d_lbls = nil
|
|
33
|
-
options
|
|
34
|
-
self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
|
|
35
|
-
end
|
|
35
|
+
parse_options options
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
# see #scatterStyle
|
data/lib/axlsx/drawing/series.rb
CHANGED
|
@@ -6,6 +6,8 @@ module Axlsx
|
|
|
6
6
|
# @see Chart#add_series
|
|
7
7
|
class Series
|
|
8
8
|
|
|
9
|
+
include Axlsx::OptionsParser
|
|
10
|
+
|
|
9
11
|
# The chart that owns this series
|
|
10
12
|
# @return [Chart]
|
|
11
13
|
attr_reader :chart
|
|
@@ -22,19 +24,15 @@ module Axlsx
|
|
|
22
24
|
@order = nil
|
|
23
25
|
self.chart = chart
|
|
24
26
|
@chart.series << self
|
|
25
|
-
options
|
|
26
|
-
self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
|
|
27
|
-
end
|
|
27
|
+
parse_options options
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
|
|
31
30
|
# The index of this series in the chart's series.
|
|
32
31
|
# @return [Integer]
|
|
33
32
|
def index
|
|
34
33
|
@chart.series.index(self)
|
|
35
34
|
end
|
|
36
35
|
|
|
37
|
-
|
|
38
36
|
# The order of this series in the chart's series. By default the order is the index of the series.
|
|
39
37
|
# @return [Integer]
|
|
40
38
|
def order
|
|
@@ -68,5 +66,4 @@ module Axlsx
|
|
|
68
66
|
str << '</c:ser>'
|
|
69
67
|
end
|
|
70
68
|
end
|
|
71
|
-
|
|
72
69
|
end
|
|
@@ -5,6 +5,8 @@ module Axlsx
|
|
|
5
5
|
# This class is extended for NumData to include the formatCode attribute required for numLit and numCache
|
|
6
6
|
class StrData
|
|
7
7
|
|
|
8
|
+
include Axlsx::OptionsParser
|
|
9
|
+
|
|
8
10
|
# creates a new StrVal object
|
|
9
11
|
# @option options [Array] :data
|
|
10
12
|
# @option options [String] :tag_name
|
|
@@ -12,9 +14,7 @@ module Axlsx
|
|
|
12
14
|
@tag_prefix = :str
|
|
13
15
|
@type = StrVal
|
|
14
16
|
@pt = SimpleTypedList.new(@type)
|
|
15
|
-
options
|
|
16
|
-
self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
|
|
17
|
-
end
|
|
17
|
+
parse_options options
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
# Creates the val objects for this data set. I am not overly confident this is going to play nicely with time and data types.
|
|
@@ -4,19 +4,20 @@ module Axlsx
|
|
|
4
4
|
#This class specifies data for a particular data point.
|
|
5
5
|
class StrVal
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
# @return [String]
|
|
9
|
-
attr_reader :v
|
|
7
|
+
include Axlsx::OptionsParser
|
|
10
8
|
|
|
11
9
|
# creates a new StrVal object
|
|
12
10
|
# @option options [String] v
|
|
13
11
|
def initialize(options={})
|
|
14
12
|
@v = ""
|
|
15
13
|
@idx = 0
|
|
16
|
-
options
|
|
17
|
-
self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
|
|
18
|
-
end
|
|
14
|
+
parse_options options
|
|
19
15
|
end
|
|
16
|
+
|
|
17
|
+
# a string value.
|
|
18
|
+
# @return [String]
|
|
19
|
+
attr_reader :v
|
|
20
|
+
|
|
20
21
|
# @see v
|
|
21
22
|
def v=(v)
|
|
22
23
|
@v = v.to_s
|
|
@@ -27,7 +28,5 @@ module Axlsx
|
|
|
27
28
|
Axlsx::validate_unsigned_int(idx)
|
|
28
29
|
str << '<c:pt idx="' << idx.to_s << '"><c:v>' << v.to_s << '</c:v></c:pt>'
|
|
29
30
|
end
|
|
30
|
-
|
|
31
31
|
end
|
|
32
|
-
|
|
33
32
|
end
|
|
@@ -3,6 +3,20 @@ module Axlsx
|
|
|
3
3
|
# 3D attributes for a chart.
|
|
4
4
|
class View3D
|
|
5
5
|
|
|
6
|
+
include Axlsx::OptionsParser
|
|
7
|
+
|
|
8
|
+
# Creates a new View3D for charts
|
|
9
|
+
# @option options [Integer] rot_x
|
|
10
|
+
# @option options [String] h_percent
|
|
11
|
+
# @option options [Integer] rot_y
|
|
12
|
+
# @option options [String] depth_percent
|
|
13
|
+
# @option options [Boolean] r_ang_ax
|
|
14
|
+
# @option options [Integer] perspective
|
|
15
|
+
def initialize(options={})
|
|
16
|
+
@rot_x, @h_percent, @rot_y, @depth_percent, @r_ang_ax, @perspective = nil, nil, nil, nil, nil, nil
|
|
17
|
+
parse_options options
|
|
18
|
+
end
|
|
19
|
+
|
|
6
20
|
# Validation for hPercent
|
|
7
21
|
H_PERCENT_REGEX = /0*(([5-9])|([1-9][0-9])|([1-4][0-9][0-9])|500)/
|
|
8
22
|
|
|
@@ -14,7 +28,7 @@ module Axlsx
|
|
|
14
28
|
# @return [Integer]
|
|
15
29
|
attr_reader :rot_x
|
|
16
30
|
alias :rotX :rot_x
|
|
17
|
-
|
|
31
|
+
|
|
18
32
|
# height of chart as % of chart width
|
|
19
33
|
# must be between 5% and 500%
|
|
20
34
|
# @return [String]
|
|
@@ -26,7 +40,7 @@ module Axlsx
|
|
|
26
40
|
# @return [Integer]
|
|
27
41
|
attr_reader :rot_y
|
|
28
42
|
alias :rotY :rot_y
|
|
29
|
-
|
|
43
|
+
|
|
30
44
|
# depth or chart as % of chart width
|
|
31
45
|
# must be between 20% and 2000%
|
|
32
46
|
# @return [String]
|
|
@@ -42,60 +56,60 @@ module Axlsx
|
|
|
42
56
|
# @return [Integer]
|
|
43
57
|
attr_reader :perspective
|
|
44
58
|
|
|
45
|
-
# Creates a new View3D for charts
|
|
46
|
-
# @option options [Integer] rot_x
|
|
47
|
-
# @option options [String] h_percent
|
|
48
|
-
# @option options [Integer] rot_y
|
|
49
|
-
# @option options [String] depth_percent
|
|
50
|
-
# @option options [Boolean] r_ang_ax
|
|
51
|
-
# @option options [Integer] perspective
|
|
52
|
-
def initialize(options={})
|
|
53
|
-
@rot_x, @h_percent, @rot_y, @depth_percent, @r_ang_ax, @perspective = nil, nil, nil, nil, nil, nil
|
|
54
|
-
options.each do |o|
|
|
55
|
-
self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
|
|
59
59
|
# @see rot_x
|
|
60
|
-
def rot_x=(v)
|
|
60
|
+
def rot_x=(v)
|
|
61
|
+
RangeValidator.validate "View3D.rot_x", -90, 90, v
|
|
62
|
+
@rot_x = v
|
|
63
|
+
end
|
|
61
64
|
alias :rotX= :rot_x=
|
|
62
65
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
# @see h_percent
|
|
67
|
+
def h_percent=(v)
|
|
68
|
+
RegexValidator.validate "#{self.class}.h_percent", H_PERCENT_REGEX, v
|
|
69
|
+
@h_percent = v
|
|
70
|
+
end
|
|
68
71
|
alias :hPercent= :h_percent=
|
|
69
72
|
|
|
70
|
-
|
|
71
|
-
|
|
73
|
+
# @see rot_y
|
|
74
|
+
def rot_y=(v)
|
|
75
|
+
RangeValidator.validate "View3D.rot_y", 0, 360, v
|
|
76
|
+
@rot_y = v
|
|
77
|
+
end
|
|
72
78
|
alias :rotY= :rot_y=
|
|
73
79
|
|
|
74
|
-
|
|
75
|
-
|
|
80
|
+
# @see depth_percent
|
|
81
|
+
def depth_percent=(v) RegexValidator.validate "#{self.class}.depth_percent", DEPTH_PERCENT_REGEX, v; @depth_percent = v; end
|
|
76
82
|
alias :depthPercent= :depth_percent=
|
|
77
83
|
|
|
78
|
-
|
|
79
|
-
|
|
84
|
+
# @see r_ang_ax
|
|
85
|
+
def r_ang_ax=(v) Axlsx::validate_boolean(v); @r_ang_ax = v; end
|
|
80
86
|
alias :rAngAx= :r_ang_ax=
|
|
81
|
-
|
|
82
|
-
# @see perspective
|
|
83
|
-
def perspective=(v) DataTypeValidator.validate "#{self.class}.perspective", [Integer, Fixnum], v, lambda {|arg| arg >= 0 && arg <= 240 }; @perspective = v; end
|
|
84
87
|
|
|
88
|
+
# @see perspective
|
|
89
|
+
def perspective=(v)
|
|
90
|
+
RangeValidator.validate "View3D.perspective", 0, 240, v
|
|
91
|
+
@perspective = v
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# DataTypeValidator.validate "#{self.class}.perspective", [Integer, Fixnum], v, lambda {|arg| arg >= 0 && arg <= 240 }; @perspective = v; end
|
|
85
95
|
|
|
86
96
|
# Serializes the object
|
|
87
97
|
# @param [String] str
|
|
88
98
|
# @return [String]
|
|
89
99
|
def to_xml_string(str = '')
|
|
90
100
|
str << '<c:view3D>'
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
str << '<c:depthPercent val="' << @depth_percent.to_s << '"/>' unless @depth_percent.nil?
|
|
95
|
-
str << '<c:rAngAx val="' << @r_ang_ax.to_s << '"/>' unless @r_ang_ax.nil?
|
|
96
|
-
str << '<c:perspective val="' << @perspective.to_s << '"/>' unless @perspective.nil?
|
|
101
|
+
%w(rot_x h_percent rot_y depth_percent r_ang_ax perspective).each do |key|
|
|
102
|
+
str << element_for_attribute(key, 'c')
|
|
103
|
+
end
|
|
97
104
|
str << '</c:view3D>'
|
|
98
105
|
end
|
|
99
106
|
|
|
107
|
+
private
|
|
108
|
+
# Note: move this to Axlsx module if we find the smae pattern elsewhere.
|
|
109
|
+
def element_for_attribute(name, namespace='')
|
|
110
|
+
val = instance_values[name]
|
|
111
|
+
return "" if val == nil
|
|
112
|
+
"<%s:%s val='%s'/>" % [namespace, Axlsx::camel(name, false), val]
|
|
113
|
+
end
|
|
100
114
|
end
|
|
101
115
|
end
|
|
@@ -3,6 +3,28 @@ module Axlsx
|
|
|
3
3
|
# A VmlShape is used to position and render a comment.
|
|
4
4
|
class VmlShape
|
|
5
5
|
|
|
6
|
+
include Axlsx::OptionsParser
|
|
7
|
+
|
|
8
|
+
# Creates a new VmlShape
|
|
9
|
+
# @option options [Integer|String] left_column
|
|
10
|
+
# @option options [Integer|String] left_offset
|
|
11
|
+
# @option options [Integer|String] top_row
|
|
12
|
+
# @option options [Integer|String] top_offset
|
|
13
|
+
# @option options [Integer|String] right_column
|
|
14
|
+
# @option options [Integer|String] right_offset
|
|
15
|
+
# @option options [Integer|String] bottom_row
|
|
16
|
+
# @option options [Integer|String] bottom_offset
|
|
17
|
+
def initialize(options={})
|
|
18
|
+
@row = @column = @left_column = @top_row = @right_column = @bottom_row = 0
|
|
19
|
+
@left_offset = 15
|
|
20
|
+
@top_offset = 2
|
|
21
|
+
@right_offset = 50
|
|
22
|
+
@bottom_offset = 5
|
|
23
|
+
@id = (0...8).map{65.+(rand(25)).chr}.join
|
|
24
|
+
parse_options options
|
|
25
|
+
yield self if block_given?
|
|
26
|
+
end
|
|
27
|
+
|
|
6
28
|
# The row anchor position for this shape determined by the comment's ref value
|
|
7
29
|
# @return [Integer]
|
|
8
30
|
attr_reader :row
|
|
@@ -43,29 +65,7 @@ module Axlsx
|
|
|
43
65
|
# @return [Integer]
|
|
44
66
|
attr_reader :bottom_offset
|
|
45
67
|
|
|
46
|
-
|
|
47
|
-
# @option options [Integer|String] left_column
|
|
48
|
-
# @option options [Integer|String] left_offset
|
|
49
|
-
# @option options [Integer|String] top_row
|
|
50
|
-
# @option options [Integer|String] top_offset
|
|
51
|
-
# @option options [Integer|String] right_column
|
|
52
|
-
# @option options [Integer|String] right_offset
|
|
53
|
-
# @option options [Integer|String] bottom_row
|
|
54
|
-
# @option options [Integer|String] bottom_offset
|
|
55
|
-
def initialize(options={})
|
|
56
|
-
@row = @column = @left_column = @top_row = @right_column = @bottom_row = 0
|
|
57
|
-
@left_offset = 15
|
|
58
|
-
@top_offset = 2
|
|
59
|
-
@right_offset = 50
|
|
60
|
-
@bottom_offset = 5
|
|
61
|
-
@id = (0...8).map{65.+(rand(25)).chr}.join
|
|
62
|
-
options.each do |o|
|
|
63
|
-
self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
|
|
64
|
-
end
|
|
65
|
-
yield self if block_given?
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
# @see column
|
|
68
|
+
# @see column
|
|
69
69
|
def column=(v); Axlsx::validate_integerish(v); @column = v.to_i end
|
|
70
70
|
|
|
71
71
|
# @see row
|
data/lib/axlsx/package.rb
CHANGED
|
@@ -3,7 +3,7 @@ module Axlsx
|
|
|
3
3
|
# Package is responsible for managing all the bits and peices that Open Office XML requires to make a valid
|
|
4
4
|
# xlsx document including valdation and serialization.
|
|
5
5
|
class Package
|
|
6
|
-
|
|
6
|
+
include Axlsx::OptionsParser
|
|
7
7
|
|
|
8
8
|
# provides access to the app doc properties for this package
|
|
9
9
|
# see App
|
|
@@ -23,9 +23,7 @@ module Axlsx
|
|
|
23
23
|
@workbook = nil
|
|
24
24
|
@core, @app = Core.new, App.new
|
|
25
25
|
@core.creator = options[:author] || @core.creator
|
|
26
|
-
options
|
|
27
|
-
self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
|
|
28
|
-
end
|
|
26
|
+
parse_options options
|
|
29
27
|
yield self if block_given?
|
|
30
28
|
end
|
|
31
29
|
|
|
@@ -175,7 +173,7 @@ module Axlsx
|
|
|
175
173
|
# @return [Array] An array of hashes that define the entry, document and schema for each part of the package.
|
|
176
174
|
# @private
|
|
177
175
|
def parts
|
|
178
|
-
|
|
176
|
+
parts = [
|
|
179
177
|
{:entry => RELS_PN, :doc => relationships.to_xml_string, :schema => RELS_XSD},
|
|
180
178
|
{:entry => "xl/#{STYLES_PN}", :doc => workbook.styles.to_xml_string, :schema => SML_XSD},
|
|
181
179
|
{:entry => CORE_PN, :doc => @core.to_xml_string, :schema => CORE_XSD},
|
|
@@ -186,39 +184,39 @@ module Axlsx
|
|
|
186
184
|
]
|
|
187
185
|
|
|
188
186
|
workbook.drawings.each do |drawing|
|
|
189
|
-
|
|
190
|
-
|
|
187
|
+
parts << {:entry => "xl/#{drawing.rels_pn}", :doc => drawing.relationships.to_xml_string, :schema => RELS_XSD}
|
|
188
|
+
parts << {:entry => "xl/#{drawing.pn}", :doc => drawing.to_xml_string, :schema => DRAWING_XSD}
|
|
191
189
|
end
|
|
192
190
|
|
|
193
191
|
|
|
194
192
|
workbook.tables.each do |table|
|
|
195
|
-
|
|
193
|
+
parts << {:entry => "xl/#{table.pn}", :doc => table.to_xml_string, :schema => SML_XSD}
|
|
196
194
|
end
|
|
197
195
|
|
|
198
196
|
workbook.comments.each do|comment|
|
|
199
197
|
if comment.size > 0
|
|
200
|
-
|
|
201
|
-
|
|
198
|
+
parts << { :entry => "xl/#{comment.pn}", :doc => comment.to_xml_string, :schema => SML_XSD }
|
|
199
|
+
parts << { :entry => "xl/#{comment.vml_drawing.pn}", :doc => comment.vml_drawing.to_xml_string, :schema => nil }
|
|
202
200
|
end
|
|
203
201
|
end
|
|
204
202
|
|
|
205
203
|
workbook.charts.each do |chart|
|
|
206
|
-
|
|
204
|
+
parts << {:entry => "xl/#{chart.pn}", :doc => chart.to_xml_string, :schema => DRAWING_XSD}
|
|
207
205
|
end
|
|
208
206
|
|
|
209
207
|
workbook.images.each do |image|
|
|
210
|
-
|
|
208
|
+
parts << {:entry => "xl/#{image.pn}", :path => image.image_src}
|
|
211
209
|
end
|
|
212
210
|
|
|
213
211
|
if use_shared_strings
|
|
214
|
-
|
|
212
|
+
parts << {:entry => "xl/#{SHARED_STRINGS_PN}", :doc => workbook.shared_strings.to_xml_string, :schema => SML_XSD}
|
|
215
213
|
end
|
|
216
214
|
|
|
217
215
|
workbook.worksheets.each do |sheet|
|
|
218
|
-
|
|
219
|
-
|
|
216
|
+
parts << {:entry => "xl/#{sheet.rels_pn}", :doc => sheet.relationships.to_xml_string, :schema => RELS_XSD}
|
|
217
|
+
parts << {:entry => "xl/#{sheet.pn}", :doc => sheet.to_xml_string, :schema => SML_XSD}
|
|
220
218
|
end
|
|
221
|
-
|
|
219
|
+
parts
|
|
222
220
|
end
|
|
223
221
|
|
|
224
222
|
# Performs xsd validation for a signle document
|
|
@@ -3,21 +3,12 @@ module Axlsx
|
|
|
3
3
|
# This class details a border used in Office Open XML spreadsheet styles.
|
|
4
4
|
class Border
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
# @return [Boolean] The diagonal down property for the border that indicates if the border should include a diagonal line from the top left to the top right of the cell.
|
|
10
|
-
attr_reader :diagonalDown
|
|
11
|
-
|
|
12
|
-
# @return [Boolean] The outline property for the border indicating that top, left, right and bottom borders should only be applied to the outside border of a range of cells.
|
|
13
|
-
attr_reader :outline
|
|
14
|
-
|
|
15
|
-
# @return [SimpleTypedList] A list of BorderPr objects for this border.
|
|
16
|
-
attr_reader :prs
|
|
6
|
+
include Axlsx::SerializedAttributes
|
|
7
|
+
include Axlsx::OptionsParser
|
|
17
8
|
|
|
18
9
|
# Creates a new Border object
|
|
19
|
-
# @option options [Boolean]
|
|
20
|
-
# @option options [Boolean]
|
|
10
|
+
# @option options [Boolean] diagonal_up
|
|
11
|
+
# @option options [Boolean] diagonal_down
|
|
21
12
|
# @option options [Boolean] outline
|
|
22
13
|
# @example - Making a border
|
|
23
14
|
# p = Axlsx::Package.new
|
|
@@ -30,15 +21,33 @@ module Axlsx
|
|
|
30
21
|
# @see Style#add_style
|
|
31
22
|
def initialize(options={})
|
|
32
23
|
@prs = SimpleTypedList.new BorderPr
|
|
33
|
-
options
|
|
34
|
-
self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
|
|
35
|
-
end
|
|
24
|
+
parse_options options
|
|
36
25
|
end
|
|
37
26
|
|
|
27
|
+
serializable_attributes :diagonal_up, :diagonal_down, :outline
|
|
28
|
+
|
|
29
|
+
# @return [Boolean] The diagonal up property for the border that indicates if the border should include a diagonal line from the bottom left to the top right of the cell.
|
|
30
|
+
attr_reader :diagonal_up
|
|
31
|
+
alias :diagonalUp :diagonal_up
|
|
32
|
+
|
|
33
|
+
# @return [Boolean] The diagonal down property for the border that indicates if the border should include a diagonal line from the top left to the top right of the cell.
|
|
34
|
+
attr_reader :diagonal_down
|
|
35
|
+
alias :diagonalDown :diagonal_down
|
|
36
|
+
|
|
37
|
+
# @return [Boolean] The outline property for the border indicating that top, left, right and bottom borders should only be applied to the outside border of a range of cells.
|
|
38
|
+
attr_reader :outline
|
|
39
|
+
|
|
40
|
+
# @return [SimpleTypedList] A list of BorderPr objects for this border.
|
|
41
|
+
attr_reader :prs
|
|
42
|
+
|
|
38
43
|
# @see diagonalUp
|
|
39
|
-
def
|
|
44
|
+
def diagonal_up=(v) Axlsx::validate_boolean v; @diagonal_up = v end
|
|
45
|
+
alias :diagonalUp= :diagonal_up=
|
|
46
|
+
|
|
40
47
|
# @see diagonalDown
|
|
41
|
-
def
|
|
48
|
+
def diagonal_down=(v) Axlsx::validate_boolean v; @diagonal_down = v end
|
|
49
|
+
alias :diagonalDown= :diagonal_down=
|
|
50
|
+
|
|
42
51
|
# @see outline
|
|
43
52
|
def outline=(v) Axlsx::validate_boolean v; @outline = v end
|
|
44
53
|
|
|
@@ -47,9 +56,9 @@ module Axlsx
|
|
|
47
56
|
# @return [String]
|
|
48
57
|
def to_xml_string(str = '')
|
|
49
58
|
str << '<border '
|
|
50
|
-
|
|
51
|
-
str << h.map { |key, value| '' << key.to_s << '="' << value.to_s << '"' }.join(' ')
|
|
59
|
+
serialized_attributes str
|
|
52
60
|
str << '>'
|
|
61
|
+
# enforces order
|
|
53
62
|
[:start, :end, :left, :right, :top, :bottom, :diagonal, :vertical, :horizontal].each do |k|
|
|
54
63
|
@prs.select { |pr| pr.name == k }.each do |part|
|
|
55
64
|
part.to_xml_string(str)
|