caxlsx 3.4.0 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +16 -0
- data/README.md +11 -12
- data/Rakefile +7 -5
- data/lib/axlsx/content_type/abstract_content_type.rb +9 -4
- data/lib/axlsx/content_type/content_type.rb +7 -5
- data/lib/axlsx/content_type/default.rb +4 -2
- data/lib/axlsx/content_type/override.rb +4 -2
- data/lib/axlsx/doc_props/app.rb +26 -24
- data/lib/axlsx/doc_props/core.rb +8 -6
- data/lib/axlsx/drawing/area_chart.rb +10 -8
- data/lib/axlsx/drawing/area_series.rb +12 -10
- data/lib/axlsx/drawing/ax_data_source.rb +2 -0
- data/lib/axlsx/drawing/axes.rb +6 -4
- data/lib/axlsx/drawing/axis.rb +21 -19
- data/lib/axlsx/drawing/bar_3D_chart.rb +14 -12
- data/lib/axlsx/drawing/bar_chart.rb +13 -11
- data/lib/axlsx/drawing/bar_series.rb +8 -6
- data/lib/axlsx/drawing/bubble_chart.rb +6 -4
- data/lib/axlsx/drawing/bubble_series.rb +8 -6
- data/lib/axlsx/drawing/cat_axis.rb +12 -10
- data/lib/axlsx/drawing/chart.rb +20 -18
- data/lib/axlsx/drawing/d_lbls.rb +7 -5
- data/lib/axlsx/drawing/drawing.rb +58 -56
- data/lib/axlsx/drawing/graphic_frame.rb +6 -4
- data/lib/axlsx/drawing/hyperlink.rb +10 -8
- data/lib/axlsx/drawing/line_3D_chart.rb +7 -5
- data/lib/axlsx/drawing/line_chart.rb +10 -8
- data/lib/axlsx/drawing/line_series.rb +12 -10
- data/lib/axlsx/drawing/marker.rb +9 -7
- data/lib/axlsx/drawing/num_data.rb +9 -7
- data/lib/axlsx/drawing/num_data_source.rb +9 -7
- data/lib/axlsx/drawing/num_val.rb +7 -5
- data/lib/axlsx/drawing/one_cell_anchor.rb +7 -5
- data/lib/axlsx/drawing/pic.rb +16 -14
- data/lib/axlsx/drawing/picture_locking.rb +3 -1
- data/lib/axlsx/drawing/pie_3D_chart.rb +5 -3
- data/lib/axlsx/drawing/pie_series.rb +8 -6
- data/lib/axlsx/drawing/scaling.rb +8 -6
- data/lib/axlsx/drawing/scatter_chart.rb +7 -5
- data/lib/axlsx/drawing/scatter_series.rb +14 -12
- data/lib/axlsx/drawing/ser_axis.rb +7 -5
- data/lib/axlsx/drawing/series.rb +6 -4
- data/lib/axlsx/drawing/series_title.rb +6 -4
- data/lib/axlsx/drawing/str_data.rb +7 -5
- data/lib/axlsx/drawing/str_val.rb +6 -4
- data/lib/axlsx/drawing/title.rb +13 -14
- data/lib/axlsx/drawing/two_cell_anchor.rb +4 -2
- data/lib/axlsx/drawing/val_axis.rb +4 -2
- data/lib/axlsx/drawing/view_3D.rb +9 -7
- data/lib/axlsx/drawing/vml_drawing.rb +18 -16
- data/lib/axlsx/drawing/vml_shape.rb +24 -22
- data/lib/axlsx/package.rb +69 -66
- data/lib/axlsx/rels/relationship.rb +10 -5
- data/lib/axlsx/rels/relationships.rb +5 -3
- data/lib/axlsx/stylesheet/border.rb +6 -4
- data/lib/axlsx/stylesheet/border_pr.rb +5 -3
- data/lib/axlsx/stylesheet/cell_alignment.rb +12 -10
- data/lib/axlsx/stylesheet/cell_protection.rb +5 -3
- data/lib/axlsx/stylesheet/cell_style.rb +10 -8
- data/lib/axlsx/stylesheet/color.rb +9 -7
- data/lib/axlsx/stylesheet/dxf.rb +5 -3
- data/lib/axlsx/stylesheet/fill.rb +3 -1
- data/lib/axlsx/stylesheet/font.rb +18 -16
- data/lib/axlsx/stylesheet/gradient_fill.rb +6 -4
- data/lib/axlsx/stylesheet/gradient_stop.rb +6 -4
- data/lib/axlsx/stylesheet/num_fmt.rb +8 -10
- data/lib/axlsx/stylesheet/pattern_fill.rb +5 -3
- data/lib/axlsx/stylesheet/styles.rb +69 -71
- data/lib/axlsx/stylesheet/table_style.rb +7 -5
- data/lib/axlsx/stylesheet/table_style_element.rb +6 -4
- data/lib/axlsx/stylesheet/table_styles.rb +6 -4
- data/lib/axlsx/stylesheet/xf.rb +18 -16
- data/lib/axlsx/util/accessors.rb +4 -2
- data/lib/axlsx/util/buffered_zip_output_stream.rb +60 -0
- data/lib/axlsx/util/constants.rb +117 -104
- data/lib/axlsx/util/mime_type_utils.rb +3 -5
- data/lib/axlsx/util/options_parser.rb +3 -1
- data/lib/axlsx/util/serialized_attributes.rb +42 -17
- data/lib/axlsx/util/simple_typed_list.rb +47 -47
- data/lib/axlsx/util/storage.rb +11 -10
- data/lib/axlsx/util/validators.rb +101 -41
- data/lib/axlsx/util/zip_command.rb +10 -10
- data/lib/axlsx/version.rb +3 -1
- data/lib/axlsx/workbook/defined_name.rb +6 -4
- data/lib/axlsx/workbook/defined_names.rb +3 -1
- data/lib/axlsx/workbook/shared_strings_table.rb +8 -6
- data/lib/axlsx/workbook/workbook.rb +78 -76
- data/lib/axlsx/workbook/workbook_view.rb +3 -1
- data/lib/axlsx/workbook/workbook_views.rb +3 -1
- data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +65 -8
- data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +7 -3
- data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +11 -7
- data/lib/axlsx/workbook/worksheet/auto_filter/sort_condition.rb +51 -0
- data/lib/axlsx/workbook/worksheet/auto_filter/sort_state.rb +56 -0
- data/lib/axlsx/workbook/worksheet/border_creator.rb +5 -3
- data/lib/axlsx/workbook/worksheet/break.rb +3 -1
- data/lib/axlsx/workbook/worksheet/cell.rb +55 -48
- data/lib/axlsx/workbook/worksheet/cell_serializer.rb +31 -27
- data/lib/axlsx/workbook/worksheet/cfvo.rb +5 -3
- data/lib/axlsx/workbook/worksheet/cfvos.rb +3 -1
- data/lib/axlsx/workbook/worksheet/col.rb +5 -3
- data/lib/axlsx/workbook/worksheet/col_breaks.rb +5 -3
- data/lib/axlsx/workbook/worksheet/color_scale.rb +12 -10
- data/lib/axlsx/workbook/worksheet/cols.rb +3 -1
- data/lib/axlsx/workbook/worksheet/comment.rb +8 -6
- data/lib/axlsx/workbook/worksheet/comments.rb +6 -4
- data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +9 -4
- data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +18 -16
- data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +3 -1
- data/lib/axlsx/workbook/worksheet/data_bar.rb +14 -13
- data/lib/axlsx/workbook/worksheet/data_validation.rb +30 -28
- data/lib/axlsx/workbook/worksheet/data_validations.rb +3 -1
- data/lib/axlsx/workbook/worksheet/date_time_converter.rb +7 -5
- data/lib/axlsx/workbook/worksheet/dimension.rb +4 -2
- data/lib/axlsx/workbook/worksheet/header_footer.rb +4 -2
- data/lib/axlsx/workbook/worksheet/icon_set.rb +23 -6
- data/lib/axlsx/workbook/worksheet/merged_cells.rb +5 -5
- data/lib/axlsx/workbook/worksheet/outline_pr.rb +6 -2
- data/lib/axlsx/workbook/worksheet/page_margins.rb +15 -10
- data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +6 -2
- data/lib/axlsx/workbook/worksheet/page_setup.rb +11 -9
- data/lib/axlsx/workbook/worksheet/pane.rb +11 -9
- data/lib/axlsx/workbook/worksheet/pivot_table.rb +20 -19
- data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +8 -6
- data/lib/axlsx/workbook/worksheet/pivot_tables.rb +2 -0
- data/lib/axlsx/workbook/worksheet/print_options.rb +3 -1
- data/lib/axlsx/workbook/worksheet/protected_range.rb +3 -1
- data/lib/axlsx/workbook/worksheet/protected_ranges.rb +5 -3
- data/lib/axlsx/workbook/worksheet/rich_text.rb +3 -1
- data/lib/axlsx/workbook/worksheet/rich_text_run.rb +16 -14
- data/lib/axlsx/workbook/worksheet/row.rb +6 -7
- data/lib/axlsx/workbook/worksheet/row_breaks.rb +6 -4
- data/lib/axlsx/workbook/worksheet/selection.rb +9 -7
- data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +6 -2
- data/lib/axlsx/workbook/worksheet/sheet_data.rb +3 -1
- data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +6 -2
- data/lib/axlsx/workbook/worksheet/sheet_pr.rb +8 -4
- data/lib/axlsx/workbook/worksheet/sheet_protection.rb +10 -8
- data/lib/axlsx/workbook/worksheet/sheet_view.rb +15 -13
- data/lib/axlsx/workbook/worksheet/table.rb +9 -7
- data/lib/axlsx/workbook/worksheet/table_style_info.rb +4 -2
- data/lib/axlsx/workbook/worksheet/tables.rb +3 -1
- data/lib/axlsx/workbook/worksheet/worksheet.rb +38 -37
- data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +4 -2
- data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +8 -2
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +6 -4
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +4 -2
- data/lib/axlsx.rb +56 -42
- data/lib/caxlsx.rb +3 -1
- metadata +49 -43
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Axlsx
|
2
4
|
# The Bar3DChart is a three dimentional barchart (who would have guessed?) that you can add to your worksheet.
|
3
5
|
# @see Worksheet#add_chart
|
@@ -75,7 +77,7 @@ module Axlsx
|
|
75
77
|
@gap_width, @gap_depth, @shape = nil, nil, nil
|
76
78
|
super(frame, options)
|
77
79
|
@series_type = BarSeries
|
78
|
-
@view_3D = View3D.new({ :
|
80
|
+
@view_3D = View3D.new({ r_ang_ax: 1 }.merge(options))
|
79
81
|
@d_lbls = nil
|
80
82
|
end
|
81
83
|
|
@@ -97,14 +99,14 @@ module Axlsx
|
|
97
99
|
# space between bar or column clusters, as a percentage of the bar or column width.
|
98
100
|
def gap_width=(v)
|
99
101
|
RangeValidator.validate "Bar3DChart.gap_width", 0, 500, v
|
100
|
-
@gap_width =
|
102
|
+
@gap_width = v
|
101
103
|
end
|
102
104
|
alias :gapWidth= :gap_width=
|
103
105
|
|
104
106
|
# space between bar or column clusters, as a percentage of the bar or column width.
|
105
107
|
def gap_depth=(v)
|
106
108
|
RangeValidator.validate "Bar3DChart.gap_depth", 0, 500, v
|
107
|
-
@gap_depth =
|
109
|
+
@gap_depth = v
|
108
110
|
end
|
109
111
|
alias :gapDepth= :gap_depth=
|
110
112
|
|
@@ -118,18 +120,18 @@ module Axlsx
|
|
118
120
|
# Serializes the object
|
119
121
|
# @param [String] str
|
120
122
|
# @return [String]
|
121
|
-
def to_xml_string(str = '')
|
123
|
+
def to_xml_string(str = +'')
|
122
124
|
super(str) do
|
123
125
|
str << '<c:bar3DChart>'
|
124
|
-
str <<
|
125
|
-
str <<
|
126
|
-
str <<
|
126
|
+
str << '<c:barDir val="' << bar_dir.to_s << '"/>'
|
127
|
+
str << '<c:grouping val="' << grouping.to_s << '"/>'
|
128
|
+
str << '<c:varyColors val="' << vary_colors.to_s << '"/>'
|
127
129
|
@series.each { |ser| ser.to_xml_string(str) }
|
128
130
|
@d_lbls.to_xml_string(str) if @d_lbls
|
129
|
-
str <<
|
130
|
-
str <<
|
131
|
-
str <<
|
132
|
-
axes.to_xml_string(str, :
|
131
|
+
str << '<c:gapWidth val="' << @gap_width.to_s << '"/>' unless @gap_width.nil?
|
132
|
+
str << '<c:gapDepth val="' << @gap_depth.to_s << '"/>' unless @gap_depth.nil?
|
133
|
+
str << '<c:shape val="' << @shape.to_s << '"/>' unless @shape.nil?
|
134
|
+
axes.to_xml_string(str, ids: true)
|
133
135
|
str << '</c:bar3DChart>'
|
134
136
|
axes.to_xml_string(str)
|
135
137
|
end
|
@@ -139,7 +141,7 @@ module Axlsx
|
|
139
141
|
# category axes specified via axes[:val_axes] and axes[:cat_axis]
|
140
142
|
# @return [Axes]
|
141
143
|
def axes
|
142
|
-
@axes ||= Axes.new(:
|
144
|
+
@axes ||= Axes.new(cat_axis: CatAxis, val_axis: ValAxis)
|
143
145
|
end
|
144
146
|
end
|
145
147
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Axlsx
|
2
4
|
# The BarChart is a two dimentional barchart that you can add to your worksheet.
|
3
5
|
# @see Worksheet#add_chart
|
@@ -89,13 +91,13 @@ module Axlsx
|
|
89
91
|
# space between bar or column clusters, as a percentage of the bar or column width.
|
90
92
|
def gap_width=(v)
|
91
93
|
RangeValidator.validate "BarChart.gap_width", 0, 500, v
|
92
|
-
@gap_width =
|
94
|
+
@gap_width = v
|
93
95
|
end
|
94
96
|
alias :gapWidth= :gap_width=
|
95
97
|
|
96
98
|
def overlap=(v)
|
97
99
|
RangeValidator.validate "BarChart.overlap", -100, 100, v
|
98
|
-
@overlap =
|
100
|
+
@overlap = v
|
99
101
|
end
|
100
102
|
|
101
103
|
# The shape of the bars or columns
|
@@ -108,18 +110,18 @@ module Axlsx
|
|
108
110
|
# Serializes the object
|
109
111
|
# @param [String] str
|
110
112
|
# @return [String]
|
111
|
-
def to_xml_string(str = '')
|
113
|
+
def to_xml_string(str = +'')
|
112
114
|
super(str) do
|
113
115
|
str << '<c:barChart>'
|
114
|
-
str <<
|
115
|
-
str <<
|
116
|
-
str <<
|
116
|
+
str << '<c:barDir val="' << bar_dir.to_s << '"/>'
|
117
|
+
str << '<c:grouping val="' << grouping.to_s << '"/>'
|
118
|
+
str << '<c:varyColors val="' << vary_colors.to_s << '"/>'
|
117
119
|
@series.each { |ser| ser.to_xml_string(str) }
|
118
120
|
@d_lbls.to_xml_string(str) if @d_lbls
|
119
|
-
str <<
|
120
|
-
str <<
|
121
|
-
str <<
|
122
|
-
axes.to_xml_string(str, :
|
121
|
+
str << '<c:overlap val="' << @overlap.to_s << '"/>' unless @overlap.nil?
|
122
|
+
str << '<c:gapWidth val="' << @gap_width.to_s << '"/>' unless @gap_width.nil?
|
123
|
+
str << '<c:shape val="' << @shape.to_s << '"/>' unless @shape.nil?
|
124
|
+
axes.to_xml_string(str, ids: true)
|
123
125
|
str << '</c:barChart>'
|
124
126
|
axes.to_xml_string(str)
|
125
127
|
end
|
@@ -129,7 +131,7 @@ module Axlsx
|
|
129
131
|
# category axes specified via axes[:val_axes] and axes[:cat_axis]
|
130
132
|
# @return [Axes]
|
131
133
|
def axes
|
132
|
-
@axes ||= Axes.new(:
|
134
|
+
@axes ||= Axes.new(cat_axis: CatAxis, val_axis: ValAxis)
|
133
135
|
end
|
134
136
|
end
|
135
137
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Axlsx
|
2
4
|
# A BarSeries defines the title, data and labels for bar charts
|
3
5
|
# @note The recommended way to manage series is to use Chart#add_series
|
@@ -36,7 +38,7 @@ module Axlsx
|
|
36
38
|
@shape = :box
|
37
39
|
@colors = []
|
38
40
|
super(chart, options)
|
39
|
-
self.labels = AxDataSource.new({ :
|
41
|
+
self.labels = AxDataSource.new({ data: options[:labels] }) unless options[:labels].nil?
|
40
42
|
self.data = NumDataSource.new(options) unless options[:data].nil?
|
41
43
|
end
|
42
44
|
|
@@ -56,19 +58,19 @@ module Axlsx
|
|
56
58
|
# Serializes the object
|
57
59
|
# @param [String] str
|
58
60
|
# @return [String]
|
59
|
-
def to_xml_string(str = '')
|
61
|
+
def to_xml_string(str = +'')
|
60
62
|
super(str) do
|
61
63
|
colors.each_with_index do |c, index|
|
62
64
|
str << '<c:dPt>'
|
63
|
-
str <<
|
65
|
+
str << '<c:idx val="' << index.to_s << '"/>'
|
64
66
|
str << '<c:spPr><a:solidFill>'
|
65
|
-
str <<
|
67
|
+
str << '<a:srgbClr val="' << c << '"/>'
|
66
68
|
str << '</a:solidFill></c:spPr></c:dPt>'
|
67
69
|
end
|
68
70
|
|
69
71
|
if series_color
|
70
72
|
str << '<c:spPr><a:solidFill>'
|
71
|
-
str <<
|
73
|
+
str << '<a:srgbClr val="' << series_color << '"/>'
|
72
74
|
str << '</a:solidFill>'
|
73
75
|
str << '</c:spPr>'
|
74
76
|
end
|
@@ -76,7 +78,7 @@ module Axlsx
|
|
76
78
|
@labels.to_xml_string(str) unless @labels.nil?
|
77
79
|
@data.to_xml_string(str) unless @data.nil?
|
78
80
|
# this is actually only required for shapes other than box
|
79
|
-
str <<
|
81
|
+
str << '<c:shape val="' << shape.to_s << '"></c:shape>'
|
80
82
|
end
|
81
83
|
end
|
82
84
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Axlsx
|
2
4
|
# The BubbleChart allows you to insert a bubble chart into your worksheet
|
3
5
|
# @see Worksheet#add_chart
|
@@ -33,13 +35,13 @@ module Axlsx
|
|
33
35
|
# Serializes the object
|
34
36
|
# @param [String] str
|
35
37
|
# @return [String]
|
36
|
-
def to_xml_string(str = '')
|
38
|
+
def to_xml_string(str = +'')
|
37
39
|
super(str) do
|
38
40
|
str << '<c:bubbleChart>'
|
39
|
-
str <<
|
41
|
+
str << '<c:varyColors val="' << vary_colors.to_s << '"/>'
|
40
42
|
@series.each { |ser| ser.to_xml_string(str) }
|
41
43
|
d_lbls.to_xml_string(str) if @d_lbls
|
42
|
-
axes.to_xml_string(str, :
|
44
|
+
axes.to_xml_string(str, ids: true)
|
43
45
|
str << '</c:bubbleChart>'
|
44
46
|
axes.to_xml_string(str)
|
45
47
|
end
|
@@ -50,7 +52,7 @@ module Axlsx
|
|
50
52
|
# a y_val_axis
|
51
53
|
# @return [Axes]
|
52
54
|
def axes
|
53
|
-
@axes ||= Axes.new(:
|
55
|
+
@axes ||= Axes.new(x_val_axis: ValAxis, y_val_axis: ValAxis)
|
54
56
|
end
|
55
57
|
end
|
56
58
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Axlsx
|
2
4
|
# A BubbleSeries defines the x/y position and bubble size of data in the chart
|
3
5
|
# @note The recommended way to manage series is to use Chart#add_series
|
@@ -26,9 +28,9 @@ module Axlsx
|
|
26
28
|
def initialize(chart, options = {})
|
27
29
|
@xData, @yData, @bubbleSize = nil
|
28
30
|
super(chart, options)
|
29
|
-
@xData = AxDataSource.new(:
|
30
|
-
@yData = NumDataSource.new({ :
|
31
|
-
@bubbleSize = NumDataSource.new({ :
|
31
|
+
@xData = AxDataSource.new(tag_name: :xVal, data: options[:xData]) unless options[:xData].nil?
|
32
|
+
@yData = NumDataSource.new({ tag_name: :yVal, data: options[:yData] }) unless options[:yData].nil?
|
33
|
+
@bubbleSize = NumDataSource.new({ tag_name: :bubbleSize, data: options[:bubbleSize] }) unless options[:bubbleSize].nil?
|
32
34
|
end
|
33
35
|
|
34
36
|
# @see color
|
@@ -39,15 +41,15 @@ module Axlsx
|
|
39
41
|
# Serializes the object
|
40
42
|
# @param [String] str
|
41
43
|
# @return [String]
|
42
|
-
def to_xml_string(str = '')
|
44
|
+
def to_xml_string(str = +'')
|
43
45
|
super(str) do
|
44
46
|
# needs to override the super color here to push in ln/and something else!
|
45
47
|
if color
|
46
48
|
str << '<c:spPr><a:solidFill>'
|
47
|
-
str <<
|
49
|
+
str << '<a:srgbClr val="' << color << '"/>'
|
48
50
|
str << '</a:solidFill>'
|
49
51
|
str << '<a:ln><a:solidFill>'
|
50
|
-
str <<
|
52
|
+
str << '<a:srgbClr val="' << color << '"/></a:solidFill></a:ln>'
|
51
53
|
str << '</c:spPr>'
|
52
54
|
end
|
53
55
|
@xData.to_xml_string(str) unless @xData.nil?
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Axlsx
|
2
4
|
# A CatAxis object defines a chart category axis
|
3
5
|
class CatAxis < Axis
|
@@ -40,18 +42,18 @@ module Axlsx
|
|
40
42
|
alias :tickMarkSkip :tick_mark_skip
|
41
43
|
|
42
44
|
# regex for validating label offset
|
43
|
-
LBL_OFFSET_REGEX = /0*(([0-9])|([1-9][0-9])|([1-9][0-9][0-9])|1000)
|
45
|
+
LBL_OFFSET_REGEX = /0*(([0-9])|([1-9][0-9])|([1-9][0-9][0-9])|1000)/.freeze
|
44
46
|
|
45
47
|
# @see tick_lbl_skip
|
46
|
-
def tick_lbl_skip=(v) Axlsx
|
48
|
+
def tick_lbl_skip=(v) Axlsx.validate_unsigned_int(v); @tick_lbl_skip = v; end
|
47
49
|
alias :tickLblSkip= :tick_lbl_skip=
|
48
50
|
|
49
51
|
# @see tick_mark_skip
|
50
|
-
def tick_mark_skip=(v) Axlsx
|
52
|
+
def tick_mark_skip=(v) Axlsx.validate_unsigned_int(v); @tick_mark_skip = v; end
|
51
53
|
alias :tickMarkSkip= :tick_mark_skip=
|
52
54
|
|
53
55
|
# From the docs: This element specifies that this axis is a date or text axis based on the data that is used for the axis labels, not a specific choice.
|
54
|
-
def auto=(v) Axlsx
|
56
|
+
def auto=(v) Axlsx.validate_boolean(v); @auto = v; end
|
55
57
|
|
56
58
|
# specifies how the perpendicular axis is crossed
|
57
59
|
# must be one of [:ctr, :l, :r]
|
@@ -66,14 +68,14 @@ module Axlsx
|
|
66
68
|
# Serializes the object
|
67
69
|
# @param [String] str
|
68
70
|
# @return [String]
|
69
|
-
def to_xml_string(str = '')
|
71
|
+
def to_xml_string(str = +'')
|
70
72
|
str << '<c:catAx>'
|
71
73
|
super(str)
|
72
|
-
str <<
|
73
|
-
str <<
|
74
|
-
str <<
|
75
|
-
str <<
|
76
|
-
str <<
|
74
|
+
str << '<c:auto val="' << @auto.to_s << '"/>'
|
75
|
+
str << '<c:lblAlgn val="' << @lbl_algn.to_s << '"/>'
|
76
|
+
str << '<c:lblOffset val="' << @lbl_offset.to_i.to_s << '"/>'
|
77
|
+
str << '<c:tickLblSkip val="' << @tick_lbl_skip.to_s << '"/>'
|
78
|
+
str << '<c:tickMarkSkip val="' << @tick_mark_skip.to_s << '"/>'
|
77
79
|
str << '</c:catAx>'
|
78
80
|
end
|
79
81
|
end
|
data/lib/axlsx/drawing/chart.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Axlsx
|
2
4
|
# A Chart is the superclass for specific charts
|
3
5
|
# @note Worksheet#add_chart is the recommended way to create charts for your worksheets.
|
@@ -49,7 +51,7 @@ module Axlsx
|
|
49
51
|
# @return [Series]
|
50
52
|
attr_reader :series_type
|
51
53
|
|
52
|
-
# TODO data labels!
|
54
|
+
# TODO: data labels!
|
53
55
|
def d_lbls
|
54
56
|
@d_lbls ||= DLbls.new(self.class)
|
55
57
|
end
|
@@ -60,7 +62,7 @@ module Axlsx
|
|
60
62
|
|
61
63
|
# Configures the vary_colors options for this chart
|
62
64
|
# @param [Boolean] v The value to set
|
63
|
-
def vary_colors=(v) Axlsx
|
65
|
+
def vary_colors=(v) Axlsx.validate_boolean(v); @vary_colors = v; end
|
64
66
|
|
65
67
|
# The title object for the chart.
|
66
68
|
# @return [Title]
|
@@ -122,7 +124,7 @@ module Axlsx
|
|
122
124
|
# The part name for this chart
|
123
125
|
# @return [String]
|
124
126
|
def pn
|
125
|
-
|
127
|
+
format(CHART_PN, index + 1)
|
126
128
|
end
|
127
129
|
|
128
130
|
# The title object for the chart.
|
@@ -147,18 +149,18 @@ module Axlsx
|
|
147
149
|
# Show the legend in the chart
|
148
150
|
# @param [Boolean] v
|
149
151
|
# @return [Boolean]
|
150
|
-
def show_legend=(v) Axlsx
|
152
|
+
def show_legend=(v) Axlsx.validate_boolean(v); @show_legend = v; end
|
151
153
|
|
152
154
|
# How to display blank values
|
153
155
|
# @see display_blanks_as
|
154
156
|
# @param [Symbol] v
|
155
157
|
# @return [Symbol]
|
156
|
-
def display_blanks_as=(v) Axlsx
|
158
|
+
def display_blanks_as=(v) Axlsx.validate_display_blanks_as(v); @display_blanks_as = v; end
|
157
159
|
|
158
160
|
# The style for the chart.
|
159
161
|
# see ECMA Part 1 §21.2.2.196
|
160
162
|
# @param [Integer] v must be between 1 and 48
|
161
|
-
def style=(v) DataTypeValidator.validate "Chart.style", Integer, v,
|
163
|
+
def style=(v) DataTypeValidator.validate "Chart.style", Integer, v, ->(arg) { arg >= 1 && arg <= 48 }; @style = v; end
|
162
164
|
|
163
165
|
# @see legend_position
|
164
166
|
def legend_position=(v) RestrictionValidator.validate "Chart.legend_position", [:b, :l, :r, :t, :tr], v; @legend_position = v; end
|
@@ -185,32 +187,32 @@ module Axlsx
|
|
185
187
|
|
186
188
|
# Assigns a background color to chart area
|
187
189
|
def bg_color=(v)
|
188
|
-
DataTypeValidator.validate(:color, Color, Color.new(:
|
190
|
+
DataTypeValidator.validate(:color, Color, Color.new(rgb: v))
|
189
191
|
@bg_color = v
|
190
192
|
end
|
191
193
|
|
192
194
|
# Whether only data from visible cells should be plotted.
|
193
195
|
# @param [Boolean] v
|
194
196
|
# @return [Boolean]
|
195
|
-
def plot_visible_only=(v) Axlsx
|
197
|
+
def plot_visible_only=(v) Axlsx.validate_boolean(v); @plot_visible_only = v; end
|
196
198
|
|
197
199
|
# Whether the chart area shall have rounded corners.
|
198
200
|
# @param [Boolean] v
|
199
201
|
# @return [Boolean]
|
200
|
-
def rounded_corners=(v) Axlsx
|
202
|
+
def rounded_corners=(v) Axlsx.validate_boolean(v); @rounded_corners = v; end
|
201
203
|
|
202
204
|
# Serializes the object
|
203
205
|
# @param [String] str
|
204
206
|
# @return [String]
|
205
|
-
def to_xml_string(str = '')
|
207
|
+
def to_xml_string(str = +'')
|
206
208
|
str << '<?xml version="1.0" encoding="UTF-8"?>'
|
207
|
-
str <<
|
208
|
-
str <<
|
209
|
-
str <<
|
210
|
-
str <<
|
209
|
+
str << '<c:chartSpace xmlns:c="' << XML_NS_C << '" xmlns:a="' << XML_NS_A << '" xmlns:r="' << XML_NS_R << '">'
|
210
|
+
str << '<c:date1904 val="' << Axlsx::Workbook.date1904.to_s << '"/>'
|
211
|
+
str << '<c:roundedCorners val="' << rounded_corners.to_s << '"/>'
|
212
|
+
str << '<c:style val="' << style.to_s << '"/>'
|
211
213
|
str << '<c:chart>'
|
212
214
|
@title.to_xml_string(str) unless @title.empty?
|
213
|
-
str <<
|
215
|
+
str << '<c:autoTitleDeleted val="' << @title.nil?.to_s << '"/>'
|
214
216
|
@view_3D.to_xml_string(str) if @view_3D
|
215
217
|
str << '<c:floor><c:thickness val="0"/></c:floor>'
|
216
218
|
str << '<c:sideWall><c:thickness val="0"/></c:sideWall>'
|
@@ -221,13 +223,13 @@ module Axlsx
|
|
221
223
|
str << '</c:plotArea>'
|
222
224
|
if @show_legend
|
223
225
|
str << '<c:legend>'
|
224
|
-
str <<
|
226
|
+
str << '<c:legendPos val="' << @legend_position.to_s << '"/>'
|
225
227
|
str << '<c:layout/>'
|
226
228
|
str << '<c:overlay val="0"/>'
|
227
229
|
str << '</c:legend>'
|
228
230
|
end
|
229
|
-
str <<
|
230
|
-
str <<
|
231
|
+
str << '<c:plotVisOnly val="' << @plot_visible_only.to_s << '"/>'
|
232
|
+
str << '<c:dispBlanksAs val="' << display_blanks_as.to_s << '"/>'
|
231
233
|
str << '<c:showDLblsOverMax val="1"/>'
|
232
234
|
str << '</c:chart>'
|
233
235
|
if bg_color
|
data/lib/axlsx/drawing/d_lbls.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Axlsx
|
2
4
|
# There are more elements in the dLbls spec that allow for
|
3
5
|
# customizations and formatting. For now, I am just implementing the
|
@@ -36,7 +38,7 @@ module Axlsx
|
|
36
38
|
[:show_legend_key, :show_val, :show_cat_name,
|
37
39
|
:show_ser_name, :show_percent, :show_bubble_size,
|
38
40
|
:show_leader_lines].each do |attr|
|
39
|
-
|
41
|
+
send("#{attr}=", false)
|
40
42
|
end
|
41
43
|
end
|
42
44
|
|
@@ -69,19 +71,19 @@ module Axlsx
|
|
69
71
|
|
70
72
|
# serializes the data labels
|
71
73
|
# @return [String]
|
72
|
-
def to_xml_string(str = '')
|
74
|
+
def to_xml_string(str = +'')
|
73
75
|
validate_attributes_for_chart_type
|
74
76
|
str << '<c:dLbls>'
|
75
77
|
instance_vals = Axlsx.instance_values_for(self)
|
76
78
|
%w(d_lbl_pos show_legend_key show_val show_cat_name show_ser_name show_percent show_bubble_size show_leader_lines).each do |key|
|
77
|
-
next unless instance_vals.
|
79
|
+
next unless instance_vals.key?(key) && !instance_vals[key].nil?
|
78
80
|
|
79
|
-
str << "<c:#{Axlsx
|
81
|
+
str << "<c:#{Axlsx.camel(key, false)} val='#{instance_vals[key]}' />"
|
80
82
|
end
|
81
83
|
str << '</c:dLbls>'
|
82
84
|
end
|
83
85
|
|
84
|
-
# nills out d_lbl_pos and show_leader_lines as these attributes, while valid in the spec actually
|
86
|
+
# nills out d_lbl_pos and show_leader_lines as these attributes, while valid in the spec actually crash Excel for any chart type other than pie charts.
|
85
87
|
def validate_attributes_for_chart_type
|
86
88
|
return if [Pie3DChart, LineChart].include? @chart_type
|
87
89
|
|
@@ -1,53 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Axlsx
|
2
|
-
require 'axlsx/drawing/d_lbls
|
3
|
-
require 'axlsx/drawing/title
|
4
|
-
require 'axlsx/drawing/series_title
|
5
|
-
require 'axlsx/drawing/series
|
6
|
-
require 'axlsx/drawing/pie_series
|
7
|
-
require 'axlsx/drawing/bar_series
|
8
|
-
require 'axlsx/drawing/line_series
|
9
|
-
require 'axlsx/drawing/scatter_series
|
10
|
-
require 'axlsx/drawing/bubble_series
|
11
|
-
require 'axlsx/drawing/area_series
|
12
|
-
|
13
|
-
require 'axlsx/drawing/scaling
|
14
|
-
require 'axlsx/drawing/axis
|
15
|
-
|
16
|
-
require 'axlsx/drawing/str_val
|
17
|
-
require 'axlsx/drawing/num_val
|
18
|
-
require 'axlsx/drawing/str_data
|
19
|
-
require 'axlsx/drawing/num_data
|
20
|
-
require 'axlsx/drawing/num_data_source
|
21
|
-
require 'axlsx/drawing/ax_data_source
|
22
|
-
|
23
|
-
require 'axlsx/drawing/ser_axis
|
24
|
-
require 'axlsx/drawing/cat_axis
|
25
|
-
require 'axlsx/drawing/val_axis
|
26
|
-
require 'axlsx/drawing/axes
|
27
|
-
|
28
|
-
require 'axlsx/drawing/marker
|
29
|
-
|
30
|
-
require 'axlsx/drawing/one_cell_anchor
|
31
|
-
require 'axlsx/drawing/two_cell_anchor
|
32
|
-
require 'axlsx/drawing/graphic_frame
|
33
|
-
|
34
|
-
require 'axlsx/drawing/view_3D
|
35
|
-
require 'axlsx/drawing/chart
|
36
|
-
require 'axlsx/drawing/pie_3D_chart
|
37
|
-
require 'axlsx/drawing/bar_3D_chart
|
38
|
-
require 'axlsx/drawing/bar_chart
|
39
|
-
require 'axlsx/drawing/line_chart
|
40
|
-
require 'axlsx/drawing/line_3D_chart
|
41
|
-
require 'axlsx/drawing/scatter_chart
|
42
|
-
require 'axlsx/drawing/bubble_chart
|
43
|
-
require 'axlsx/drawing/area_chart
|
44
|
-
|
45
|
-
require 'axlsx/drawing/picture_locking
|
46
|
-
require 'axlsx/drawing/pic
|
47
|
-
require 'axlsx/drawing/hyperlink
|
48
|
-
|
49
|
-
require 'axlsx/drawing/vml_drawing
|
50
|
-
require 'axlsx/drawing/vml_shape
|
4
|
+
require 'axlsx/drawing/d_lbls'
|
5
|
+
require 'axlsx/drawing/title'
|
6
|
+
require 'axlsx/drawing/series_title'
|
7
|
+
require 'axlsx/drawing/series'
|
8
|
+
require 'axlsx/drawing/pie_series'
|
9
|
+
require 'axlsx/drawing/bar_series'
|
10
|
+
require 'axlsx/drawing/line_series'
|
11
|
+
require 'axlsx/drawing/scatter_series'
|
12
|
+
require 'axlsx/drawing/bubble_series'
|
13
|
+
require 'axlsx/drawing/area_series'
|
14
|
+
|
15
|
+
require 'axlsx/drawing/scaling'
|
16
|
+
require 'axlsx/drawing/axis'
|
17
|
+
|
18
|
+
require 'axlsx/drawing/str_val'
|
19
|
+
require 'axlsx/drawing/num_val'
|
20
|
+
require 'axlsx/drawing/str_data'
|
21
|
+
require 'axlsx/drawing/num_data'
|
22
|
+
require 'axlsx/drawing/num_data_source'
|
23
|
+
require 'axlsx/drawing/ax_data_source'
|
24
|
+
|
25
|
+
require 'axlsx/drawing/ser_axis'
|
26
|
+
require 'axlsx/drawing/cat_axis'
|
27
|
+
require 'axlsx/drawing/val_axis'
|
28
|
+
require 'axlsx/drawing/axes'
|
29
|
+
|
30
|
+
require 'axlsx/drawing/marker'
|
31
|
+
|
32
|
+
require 'axlsx/drawing/one_cell_anchor'
|
33
|
+
require 'axlsx/drawing/two_cell_anchor'
|
34
|
+
require 'axlsx/drawing/graphic_frame'
|
35
|
+
|
36
|
+
require 'axlsx/drawing/view_3D'
|
37
|
+
require 'axlsx/drawing/chart'
|
38
|
+
require 'axlsx/drawing/pie_3D_chart'
|
39
|
+
require 'axlsx/drawing/bar_3D_chart'
|
40
|
+
require 'axlsx/drawing/bar_chart'
|
41
|
+
require 'axlsx/drawing/line_chart'
|
42
|
+
require 'axlsx/drawing/line_3D_chart'
|
43
|
+
require 'axlsx/drawing/scatter_chart'
|
44
|
+
require 'axlsx/drawing/bubble_chart'
|
45
|
+
require 'axlsx/drawing/area_chart'
|
46
|
+
|
47
|
+
require 'axlsx/drawing/picture_locking'
|
48
|
+
require 'axlsx/drawing/pic'
|
49
|
+
require 'axlsx/drawing/hyperlink'
|
50
|
+
|
51
|
+
require 'axlsx/drawing/vml_drawing'
|
52
|
+
require 'axlsx/drawing/vml_shape'
|
51
53
|
|
52
54
|
# A Drawing is a canvas for charts and images. Each worksheet has a single drawing that manages anchors.
|
53
55
|
# The anchors reference the charts or images via graphical frames. This is not a trivial relationship so please do follow the advice in the note.
|
@@ -106,15 +108,15 @@ module Axlsx
|
|
106
108
|
# An array of hyperlink objects associated with this drawings images
|
107
109
|
# @return [Array]
|
108
110
|
def hyperlinks
|
109
|
-
links =
|
110
|
-
links.map
|
111
|
+
links = images.select { |a| a.hyperlink.is_a?(Hyperlink) }
|
112
|
+
links.map(&:hyperlink)
|
111
113
|
end
|
112
114
|
|
113
115
|
# An array of image objects that are associated with this drawing's anchors
|
114
116
|
# @return [Array]
|
115
117
|
def images
|
116
118
|
images = @anchors.select { |a| a.object.is_a?(Pic) }
|
117
|
-
images.map
|
119
|
+
images.map(&:object)
|
118
120
|
end
|
119
121
|
|
120
122
|
# The index of this drawing in the owning workbooks's drawings collection.
|
@@ -126,14 +128,14 @@ module Axlsx
|
|
126
128
|
# The part name for this drawing
|
127
129
|
# @return [String]
|
128
130
|
def pn
|
129
|
-
|
131
|
+
format(DRAWING_PN, index + 1)
|
130
132
|
end
|
131
133
|
|
132
134
|
# The relational part name for this drawing
|
133
135
|
# #NOTE This should be rewritten to return an Axlsx::Relationship object.
|
134
136
|
# @return [String]
|
135
137
|
def rels_pn
|
136
|
-
|
138
|
+
format(DRAWING_RELS_PN, index + 1)
|
137
139
|
end
|
138
140
|
|
139
141
|
# A list of objects this drawing holds.
|
@@ -153,9 +155,9 @@ module Axlsx
|
|
153
155
|
# Serializes the object
|
154
156
|
# @param [String] str
|
155
157
|
# @return [String]
|
156
|
-
def to_xml_string(str = '')
|
158
|
+
def to_xml_string(str = +'')
|
157
159
|
str << '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'
|
158
|
-
str <<
|
160
|
+
str << '<xdr:wsDr xmlns:xdr="' << XML_NS_XDR << '" xmlns:a="' << XML_NS_A << '">'
|
159
161
|
anchors.each { |anchor| anchor.to_xml_string(str) }
|
160
162
|
str << '</xdr:wsDr>'
|
161
163
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Axlsx
|
2
4
|
# A graphic frame defines a container for a chart object
|
3
5
|
# @note The recommended way to manage charts is Worksheet#add_chart
|
@@ -29,11 +31,11 @@ module Axlsx
|
|
29
31
|
# Serializes the object
|
30
32
|
# @param [String] str
|
31
33
|
# @return [String]
|
32
|
-
def to_xml_string(str = '')
|
34
|
+
def to_xml_string(str = +'')
|
33
35
|
# macro attribute should be optional!
|
34
36
|
str << '<xdr:graphicFrame>'
|
35
37
|
str << '<xdr:nvGraphicFramePr>'
|
36
|
-
str <<
|
38
|
+
str << '<xdr:cNvPr id="' << @anchor.drawing.index.to_s << '" name="' << 'item_' << @anchor.drawing.index.to_s << '"/>'
|
37
39
|
str << '<xdr:cNvGraphicFramePr/>'
|
38
40
|
str << '</xdr:nvGraphicFramePr>'
|
39
41
|
str << '<xdr:xfrm>'
|
@@ -41,8 +43,8 @@ module Axlsx
|
|
41
43
|
str << '<a:ext cx="0" cy="0"/>'
|
42
44
|
str << '</xdr:xfrm>'
|
43
45
|
str << '<a:graphic>'
|
44
|
-
str <<
|
45
|
-
str <<
|
46
|
+
str << '<a:graphicData uri="' << XML_NS_C << '">'
|
47
|
+
str << '<c:chart xmlns:c="' << XML_NS_C << '" xmlns:r="' << XML_NS_R << '" r:id="' << rId << '"/>'
|
46
48
|
str << '</a:graphicData>'
|
47
49
|
str << '</a:graphic>'
|
48
50
|
str << '</xdr:graphicFrame>'
|