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
@@ -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)
|