caxlsx 3.4.1 → 4.0.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +16 -1
- data/README.md +9 -11
- 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 +53 -54
- 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>'
|