caxlsx 2.0.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.
- checksums.yaml +7 -0
- data/.yardopts +9 -0
- data/.yardopts_guide +19 -0
- data/CHANGELOG.md +239 -0
- data/LICENSE +22 -0
- data/README.md +256 -0
- data/Rakefile +31 -0
- data/examples/2010_comments.rb +17 -0
- data/examples/anchor_swapping.rb +28 -0
- data/examples/auto_filter.rb +16 -0
- data/examples/basic_charts.rb +58 -0
- data/examples/chart_colors.rb +88 -0
- data/examples/colored_links.rb +59 -0
- data/examples/conditional_formatting/example_conditional_formatting.rb +74 -0
- data/examples/conditional_formatting/getting_barred.rb +37 -0
- data/examples/conditional_formatting/hitting_the_high_notes.rb +37 -0
- data/examples/conditional_formatting/scaled_colors.rb +39 -0
- data/examples/conditional_formatting/stop_and_go.rb +37 -0
- data/examples/data_validation.rb +50 -0
- data/examples/example.rb +777 -0
- data/examples/extractive.rb +45 -0
- data/examples/image1.jpeg +0 -0
- data/examples/ios_preview.rb +14 -0
- data/examples/page_setup.rb +11 -0
- data/examples/pivot_table.rb +39 -0
- data/examples/sheet_protection.rb +10 -0
- data/examples/skydrive/real_example.rb +63 -0
- data/examples/styles.rb +66 -0
- data/examples/underline.rb +13 -0
- data/examples/wrap_text.rb +21 -0
- data/lib/axlsx.rb +152 -0
- data/lib/axlsx/content_type/abstract_content_type.rb +32 -0
- data/lib/axlsx/content_type/content_type.rb +26 -0
- data/lib/axlsx/content_type/default.rb +25 -0
- data/lib/axlsx/content_type/override.rb +25 -0
- data/lib/axlsx/doc_props/app.rb +235 -0
- data/lib/axlsx/doc_props/core.rb +39 -0
- data/lib/axlsx/drawing/ax_data_source.rb +26 -0
- data/lib/axlsx/drawing/axes.rb +61 -0
- data/lib/axlsx/drawing/axis.rb +187 -0
- data/lib/axlsx/drawing/bar_3D_chart.rb +151 -0
- data/lib/axlsx/drawing/bar_series.rb +82 -0
- data/lib/axlsx/drawing/cat_axis.rb +85 -0
- data/lib/axlsx/drawing/chart.rb +232 -0
- data/lib/axlsx/drawing/d_lbls.rb +90 -0
- data/lib/axlsx/drawing/drawing.rb +162 -0
- data/lib/axlsx/drawing/graphic_frame.rb +54 -0
- data/lib/axlsx/drawing/hyperlink.rb +102 -0
- data/lib/axlsx/drawing/line_3D_chart.rb +68 -0
- data/lib/axlsx/drawing/line_chart.rb +99 -0
- data/lib/axlsx/drawing/line_series.rb +81 -0
- data/lib/axlsx/drawing/marker.rb +84 -0
- data/lib/axlsx/drawing/num_data.rb +52 -0
- data/lib/axlsx/drawing/num_data_source.rb +62 -0
- data/lib/axlsx/drawing/num_val.rb +32 -0
- data/lib/axlsx/drawing/one_cell_anchor.rb +98 -0
- data/lib/axlsx/drawing/pic.rb +205 -0
- data/lib/axlsx/drawing/picture_locking.rb +44 -0
- data/lib/axlsx/drawing/pie_3D_chart.rb +48 -0
- data/lib/axlsx/drawing/pie_series.rb +74 -0
- data/lib/axlsx/drawing/scaling.rb +60 -0
- data/lib/axlsx/drawing/scatter_chart.rb +74 -0
- data/lib/axlsx/drawing/scatter_series.rb +65 -0
- data/lib/axlsx/drawing/ser_axis.rb +45 -0
- data/lib/axlsx/drawing/series.rb +69 -0
- data/lib/axlsx/drawing/series_title.rb +23 -0
- data/lib/axlsx/drawing/str_data.rb +42 -0
- data/lib/axlsx/drawing/str_val.rb +32 -0
- data/lib/axlsx/drawing/title.rb +78 -0
- data/lib/axlsx/drawing/two_cell_anchor.rb +92 -0
- data/lib/axlsx/drawing/val_axis.rb +37 -0
- data/lib/axlsx/drawing/view_3D.rb +115 -0
- data/lib/axlsx/drawing/vml_drawing.rb +42 -0
- data/lib/axlsx/drawing/vml_shape.rb +66 -0
- data/lib/axlsx/package.rb +352 -0
- data/lib/axlsx/rels/relationship.rb +129 -0
- data/lib/axlsx/rels/relationships.rb +29 -0
- data/lib/axlsx/stylesheet/border.rb +71 -0
- data/lib/axlsx/stylesheet/border_pr.rb +71 -0
- data/lib/axlsx/stylesheet/cell_alignment.rb +134 -0
- data/lib/axlsx/stylesheet/cell_protection.rb +43 -0
- data/lib/axlsx/stylesheet/cell_style.rb +74 -0
- data/lib/axlsx/stylesheet/color.rb +78 -0
- data/lib/axlsx/stylesheet/dxf.rb +79 -0
- data/lib/axlsx/stylesheet/fill.rb +35 -0
- data/lib/axlsx/stylesheet/font.rb +148 -0
- data/lib/axlsx/stylesheet/gradient_fill.rb +103 -0
- data/lib/axlsx/stylesheet/gradient_stop.rb +37 -0
- data/lib/axlsx/stylesheet/num_fmt.rb +79 -0
- data/lib/axlsx/stylesheet/pattern_fill.rb +73 -0
- data/lib/axlsx/stylesheet/styles.rb +420 -0
- data/lib/axlsx/stylesheet/table_style.rb +54 -0
- data/lib/axlsx/stylesheet/table_style_element.rb +79 -0
- data/lib/axlsx/stylesheet/table_styles.rb +46 -0
- data/lib/axlsx/stylesheet/xf.rb +147 -0
- data/lib/axlsx/util/accessors.rb +64 -0
- data/lib/axlsx/util/constants.rb +392 -0
- data/lib/axlsx/util/options_parser.rb +15 -0
- data/lib/axlsx/util/parser.rb +44 -0
- data/lib/axlsx/util/serialized_attributes.rb +79 -0
- data/lib/axlsx/util/simple_typed_list.rb +203 -0
- data/lib/axlsx/util/storage.rb +146 -0
- data/lib/axlsx/util/validators.rb +300 -0
- data/lib/axlsx/version.rb +5 -0
- data/lib/axlsx/workbook/defined_name.rb +129 -0
- data/lib/axlsx/workbook/defined_names.rb +21 -0
- data/lib/axlsx/workbook/shared_strings_table.rb +77 -0
- data/lib/axlsx/workbook/workbook.rb +354 -0
- data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -0
- data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -0
- data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +246 -0
- data/lib/axlsx/workbook/worksheet/break.rb +37 -0
- data/lib/axlsx/workbook/worksheet/cell.rb +416 -0
- data/lib/axlsx/workbook/worksheet/cell_serializer.rb +144 -0
- data/lib/axlsx/workbook/worksheet/cfvo.rb +62 -0
- data/lib/axlsx/workbook/worksheet/cfvos.rb +15 -0
- data/lib/axlsx/workbook/worksheet/col.rb +144 -0
- data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -0
- data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -0
- data/lib/axlsx/workbook/worksheet/cols.rb +20 -0
- data/lib/axlsx/workbook/worksheet/comment.rb +92 -0
- data/lib/axlsx/workbook/worksheet/comments.rb +85 -0
- data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -0
- data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -0
- data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -0
- data/lib/axlsx/workbook/worksheet/data_bar.rb +131 -0
- data/lib/axlsx/workbook/worksheet/data_validation.rb +244 -0
- data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -0
- data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -0
- data/lib/axlsx/workbook/worksheet/dimension.rb +64 -0
- data/lib/axlsx/workbook/worksheet/header_footer.rb +54 -0
- data/lib/axlsx/workbook/worksheet/icon_set.rb +83 -0
- data/lib/axlsx/workbook/worksheet/merged_cells.rb +35 -0
- data/lib/axlsx/workbook/worksheet/page_margins.rb +99 -0
- data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -0
- data/lib/axlsx/workbook/worksheet/page_setup.rb +242 -0
- data/lib/axlsx/workbook/worksheet/pane.rb +141 -0
- data/lib/axlsx/workbook/worksheet/pivot_table.rb +273 -0
- data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -0
- data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -0
- data/lib/axlsx/workbook/worksheet/print_options.rb +41 -0
- data/lib/axlsx/workbook/worksheet/protected_range.rb +49 -0
- data/lib/axlsx/workbook/worksheet/protected_ranges.rb +34 -0
- data/lib/axlsx/workbook/worksheet/row.rb +172 -0
- data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -0
- data/lib/axlsx/workbook/worksheet/selection.rb +103 -0
- data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -0
- data/lib/axlsx/workbook/worksheet/sheet_data.rb +25 -0
- data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +60 -0
- data/lib/axlsx/workbook/worksheet/sheet_pr.rb +69 -0
- data/lib/axlsx/workbook/worksheet/sheet_protection.rb +120 -0
- data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -0
- data/lib/axlsx/workbook/worksheet/table.rb +102 -0
- data/lib/axlsx/workbook/worksheet/table_style_info.rb +51 -0
- data/lib/axlsx/workbook/worksheet/tables.rb +31 -0
- data/lib/axlsx/workbook/worksheet/worksheet.rb +769 -0
- data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -0
- data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -0
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -0
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -0
- data/lib/schema/dc.xsd +118 -0
- data/lib/schema/dcmitype.xsd +52 -0
- data/lib/schema/dcterms.xsd +331 -0
- data/lib/schema/dml-chart.xsd +1499 -0
- data/lib/schema/dml-chartDrawing.xsd +146 -0
- data/lib/schema/dml-compatibility.xsd +14 -0
- data/lib/schema/dml-diagram.xsd +1091 -0
- data/lib/schema/dml-lockedCanvas.xsd +11 -0
- data/lib/schema/dml-main.xsd +3048 -0
- data/lib/schema/dml-picture.xsd +23 -0
- data/lib/schema/dml-spreadsheetDrawing.xsd +185 -0
- data/lib/schema/dml-wordprocessingDrawing.xsd +185 -0
- data/lib/schema/opc-contentTypes.xsd +42 -0
- data/lib/schema/opc-coreProperties.xsd +54 -0
- data/lib/schema/opc-digSig.xsd +49 -0
- data/lib/schema/opc-relationships.xsd +33 -0
- data/lib/schema/pml.xsd +1676 -0
- data/lib/schema/shared-additionalCharacteristics.xsd +28 -0
- data/lib/schema/shared-bibliography.xsd +144 -0
- data/lib/schema/shared-commonSimpleTypes.xsd +166 -0
- data/lib/schema/shared-customXmlDataProperties.xsd +25 -0
- data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -0
- data/lib/schema/shared-documentPropertiesCustom.xsd +59 -0
- data/lib/schema/shared-documentPropertiesExtended.xsd +56 -0
- data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -0
- data/lib/schema/shared-math.xsd +582 -0
- data/lib/schema/shared-relationshipReference.xsd +25 -0
- data/lib/schema/sml.xsd +4434 -0
- data/lib/schema/vml-main.xsd +569 -0
- data/lib/schema/vml-officeDrawing.xsd +509 -0
- data/lib/schema/vml-presentationDrawing.xsd +12 -0
- data/lib/schema/vml-spreadsheetDrawing.xsd +108 -0
- data/lib/schema/vml-wordprocessingDrawing.xsd +96 -0
- data/lib/schema/wml.xsd +3644 -0
- data/lib/schema/xml.xsd +116 -0
- data/test/benchmark.rb +72 -0
- data/test/content_type/tc_content_type.rb +76 -0
- data/test/content_type/tc_default.rb +16 -0
- data/test/content_type/tc_override.rb +14 -0
- data/test/doc_props/tc_app.rb +43 -0
- data/test/doc_props/tc_core.rb +42 -0
- data/test/drawing/tc_axes.rb +8 -0
- data/test/drawing/tc_axis.rb +85 -0
- data/test/drawing/tc_bar_3D_chart.rb +71 -0
- data/test/drawing/tc_bar_series.rb +37 -0
- data/test/drawing/tc_cat_axis.rb +31 -0
- data/test/drawing/tc_cat_axis_data.rb +27 -0
- data/test/drawing/tc_chart.rb +110 -0
- data/test/drawing/tc_d_lbls.rb +57 -0
- data/test/drawing/tc_data_source.rb +17 -0
- data/test/drawing/tc_drawing.rb +80 -0
- data/test/drawing/tc_graphic_frame.rb +27 -0
- data/test/drawing/tc_hyperlink.rb +64 -0
- data/test/drawing/tc_line_3d_chart.rb +47 -0
- data/test/drawing/tc_line_chart.rb +39 -0
- data/test/drawing/tc_line_series.rb +30 -0
- data/test/drawing/tc_marker.rb +44 -0
- data/test/drawing/tc_named_axis_data.rb +27 -0
- data/test/drawing/tc_num_data.rb +31 -0
- data/test/drawing/tc_num_val.rb +29 -0
- data/test/drawing/tc_one_cell_anchor.rb +66 -0
- data/test/drawing/tc_pic.rb +107 -0
- data/test/drawing/tc_picture_locking.rb +72 -0
- data/test/drawing/tc_pie_3D_chart.rb +28 -0
- data/test/drawing/tc_pie_series.rb +32 -0
- data/test/drawing/tc_scaling.rb +36 -0
- data/test/drawing/tc_scatter_chart.rb +48 -0
- data/test/drawing/tc_scatter_series.rb +21 -0
- data/test/drawing/tc_ser_axis.rb +31 -0
- data/test/drawing/tc_series.rb +23 -0
- data/test/drawing/tc_series_title.rb +33 -0
- data/test/drawing/tc_str_data.rb +18 -0
- data/test/drawing/tc_str_val.rb +21 -0
- data/test/drawing/tc_title.rb +49 -0
- data/test/drawing/tc_two_cell_anchor.rb +36 -0
- data/test/drawing/tc_val_axis.rb +24 -0
- data/test/drawing/tc_view_3D.rb +54 -0
- data/test/drawing/tc_vml_drawing.rb +25 -0
- data/test/drawing/tc_vml_shape.rb +106 -0
- data/test/profile.rb +24 -0
- data/test/rels/tc_relationship.rb +44 -0
- data/test/rels/tc_relationships.rb +37 -0
- data/test/stylesheet/tc_border.rb +37 -0
- data/test/stylesheet/tc_border_pr.rb +32 -0
- data/test/stylesheet/tc_cell_alignment.rb +81 -0
- data/test/stylesheet/tc_cell_protection.rb +29 -0
- data/test/stylesheet/tc_cell_style.rb +57 -0
- data/test/stylesheet/tc_color.rb +43 -0
- data/test/stylesheet/tc_dxf.rb +81 -0
- data/test/stylesheet/tc_fill.rb +18 -0
- data/test/stylesheet/tc_font.rb +121 -0
- data/test/stylesheet/tc_gradient_fill.rb +72 -0
- data/test/stylesheet/tc_gradient_stop.rb +31 -0
- data/test/stylesheet/tc_num_fmt.rb +30 -0
- data/test/stylesheet/tc_pattern_fill.rb +43 -0
- data/test/stylesheet/tc_styles.rb +235 -0
- data/test/stylesheet/tc_table_style.rb +44 -0
- data/test/stylesheet/tc_table_style_element.rb +45 -0
- data/test/stylesheet/tc_table_styles.rb +29 -0
- data/test/stylesheet/tc_xf.rb +120 -0
- data/test/tc_axlsx.rb +72 -0
- data/test/tc_helper.rb +10 -0
- data/test/tc_package.rb +227 -0
- data/test/util/tc_serialized_attributes.rb +19 -0
- data/test/util/tc_simple_typed_list.rb +78 -0
- data/test/util/tc_validators.rb +186 -0
- data/test/workbook/tc_defined_name.rb +41 -0
- data/test/workbook/tc_shared_strings_table.rb +44 -0
- data/test/workbook/tc_workbook.rb +125 -0
- data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -0
- data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -0
- data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -0
- data/test/workbook/worksheet/tc_break.rb +49 -0
- data/test/workbook/worksheet/tc_cell.rb +319 -0
- data/test/workbook/worksheet/tc_cfvo.rb +31 -0
- data/test/workbook/worksheet/tc_col.rb +78 -0
- data/test/workbook/worksheet/tc_color_scale.rb +58 -0
- data/test/workbook/worksheet/tc_comment.rb +72 -0
- data/test/workbook/worksheet/tc_comments.rb +57 -0
- data/test/workbook/worksheet/tc_conditional_formatting.rb +224 -0
- data/test/workbook/worksheet/tc_data_bar.rb +46 -0
- data/test/workbook/worksheet/tc_data_validation.rb +265 -0
- data/test/workbook/worksheet/tc_date_time_converter.rb +124 -0
- data/test/workbook/worksheet/tc_header_footer.rb +151 -0
- data/test/workbook/worksheet/tc_icon_set.rb +45 -0
- data/test/workbook/worksheet/tc_page_margins.rb +97 -0
- data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -0
- data/test/workbook/worksheet/tc_page_setup.rb +143 -0
- data/test/workbook/worksheet/tc_pane.rb +54 -0
- data/test/workbook/worksheet/tc_pivot_table.rb +120 -0
- data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +54 -0
- data/test/workbook/worksheet/tc_print_options.rb +72 -0
- data/test/workbook/worksheet/tc_protected_range.rb +17 -0
- data/test/workbook/worksheet/tc_row.rb +117 -0
- data/test/workbook/worksheet/tc_selection.rb +55 -0
- data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -0
- data/test/workbook/worksheet/tc_sheet_format_pr.rb +88 -0
- data/test/workbook/worksheet/tc_sheet_pr.rb +27 -0
- data/test/workbook/worksheet/tc_sheet_protection.rb +117 -0
- data/test/workbook/worksheet/tc_sheet_view.rb +214 -0
- data/test/workbook/worksheet/tc_table.rb +68 -0
- data/test/workbook/worksheet/tc_table_style_info.rb +53 -0
- data/test/workbook/worksheet/tc_worksheet.rb +538 -0
- data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +55 -0
- metadata +546 -0
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
module Axlsx
|
|
3
|
+
|
|
4
|
+
# A Chart is the superclass for specific charts
|
|
5
|
+
# @note Worksheet#add_chart is the recommended way to create charts for your worksheets.
|
|
6
|
+
# @see README for examples
|
|
7
|
+
class Chart
|
|
8
|
+
|
|
9
|
+
include Axlsx::OptionsParser
|
|
10
|
+
# Creates a new chart object
|
|
11
|
+
# @param [GraphicalFrame] frame The frame that holds this chart.
|
|
12
|
+
# @option options [Cell, String] title
|
|
13
|
+
# @option options [Boolean] show_legend
|
|
14
|
+
# @option options [Array|String|Cell] start_at The X, Y coordinates defining the top left corner of the chart.
|
|
15
|
+
# @option options [Array|String|Cell] end_at The X, Y coordinates defining the bottom right corner of the chart.
|
|
16
|
+
def initialize(frame, options={})
|
|
17
|
+
@style = 18
|
|
18
|
+
@view_3D = nil
|
|
19
|
+
@graphic_frame=frame
|
|
20
|
+
@graphic_frame.anchor.drawing.worksheet.workbook.charts << self
|
|
21
|
+
@series = SimpleTypedList.new Series
|
|
22
|
+
@show_legend = true
|
|
23
|
+
@display_blanks_as = :gap
|
|
24
|
+
@series_type = Series
|
|
25
|
+
@title = Title.new
|
|
26
|
+
parse_options options
|
|
27
|
+
start_at(*options[:start_at]) if options[:start_at]
|
|
28
|
+
end_at(*options[:end_at]) if options[:end_at]
|
|
29
|
+
yield self if block_given?
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# The 3D view properties for the chart
|
|
33
|
+
attr_reader :view_3D
|
|
34
|
+
alias :view3D :view_3D
|
|
35
|
+
|
|
36
|
+
# A reference to the graphic frame that owns this chart
|
|
37
|
+
# @return [GraphicFrame]
|
|
38
|
+
attr_reader :graphic_frame
|
|
39
|
+
|
|
40
|
+
# A collection of series objects that are applied to the chart
|
|
41
|
+
# @return [SimpleTypedList]
|
|
42
|
+
attr_reader :series
|
|
43
|
+
|
|
44
|
+
# The type of series to use for this chart.
|
|
45
|
+
# @return [Series]
|
|
46
|
+
attr_reader :series_type
|
|
47
|
+
|
|
48
|
+
#TODO data labels!
|
|
49
|
+
def d_lbls
|
|
50
|
+
@d_lbls ||= DLbls.new(self.class)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Indicates that colors should be varied by datum
|
|
54
|
+
# @return [Boolean]
|
|
55
|
+
attr_reader :vary_colors
|
|
56
|
+
|
|
57
|
+
# Configures the vary_colors options for this chart
|
|
58
|
+
# @param [Boolean] v The value to set
|
|
59
|
+
def vary_colors=(v) Axlsx::validate_boolean(v); @vary_colors = v; end
|
|
60
|
+
|
|
61
|
+
# The title object for the chart.
|
|
62
|
+
# @return [Title]
|
|
63
|
+
attr_reader :title
|
|
64
|
+
|
|
65
|
+
# The style for the chart.
|
|
66
|
+
# see ECMA Part 1 §21.2.2.196
|
|
67
|
+
# @return [Integer]
|
|
68
|
+
attr_reader :style
|
|
69
|
+
|
|
70
|
+
# Show the legend in the chart
|
|
71
|
+
# @return [Boolean]
|
|
72
|
+
attr_reader :show_legend
|
|
73
|
+
|
|
74
|
+
# How to display blank values
|
|
75
|
+
# Options are
|
|
76
|
+
# * gap: Display nothing
|
|
77
|
+
# * span: Not sure what this does
|
|
78
|
+
# * zero: Display as if the value were zero, not blank
|
|
79
|
+
# @return [Symbol]
|
|
80
|
+
# Default :gap (although this really should vary by chart type and grouping)
|
|
81
|
+
attr_reader :display_blanks_as
|
|
82
|
+
|
|
83
|
+
# The relationship object for this chart.
|
|
84
|
+
# @return [Relationship]
|
|
85
|
+
def relationship
|
|
86
|
+
Relationship.new(self, CHART_R, "../#{pn}")
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# The index of this chart in the workbooks charts collection
|
|
90
|
+
# @return [Integer]
|
|
91
|
+
def index
|
|
92
|
+
@graphic_frame.anchor.drawing.worksheet.workbook.charts.index(self)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# The part name for this chart
|
|
96
|
+
# @return [String]
|
|
97
|
+
def pn
|
|
98
|
+
"#{CHART_PN % (index+1)}"
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# The title object for the chart.
|
|
102
|
+
# @param [String, Cell] v
|
|
103
|
+
# @return [Title]
|
|
104
|
+
def title=(v)
|
|
105
|
+
DataTypeValidator.validate "#{self.class}.title", [String, Cell], v
|
|
106
|
+
if v.is_a?(String)
|
|
107
|
+
@title.text = v
|
|
108
|
+
elsif v.is_a?(Cell)
|
|
109
|
+
@title.cell = v
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# Show the legend in the chart
|
|
114
|
+
# @param [Boolean] v
|
|
115
|
+
# @return [Boolean]
|
|
116
|
+
def show_legend=(v) Axlsx::validate_boolean(v); @show_legend = v; end
|
|
117
|
+
|
|
118
|
+
# How to display blank values
|
|
119
|
+
# @see display_blanks_as
|
|
120
|
+
# @param [Symbol] v
|
|
121
|
+
# @return [Symbol]
|
|
122
|
+
def display_blanks_as=(v) Axlsx::validate_display_blanks_as(v); @display_blanks_as = v; end
|
|
123
|
+
|
|
124
|
+
# The style for the chart.
|
|
125
|
+
# see ECMA Part 1 §21.2.2.196
|
|
126
|
+
# @param [Integer] v must be between 1 and 48
|
|
127
|
+
def style=(v) DataTypeValidator.validate "Chart.style", Integer, v, lambda { |arg| arg >= 1 && arg <= 48 }; @style = v; end
|
|
128
|
+
|
|
129
|
+
# backwards compatibility to allow chart.to and chart.from access to anchor markers
|
|
130
|
+
# @note This will be disconinued in version 2.0.0. Please use the end_at method
|
|
131
|
+
def to
|
|
132
|
+
@graphic_frame.anchor.to
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
# backwards compatibility to allow chart.to and chart.from access to anchor markers
|
|
136
|
+
# @note This will be disconinued in version 2.0.0. please use the start_at method
|
|
137
|
+
def from
|
|
138
|
+
@graphic_frame.anchor.from
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# Adds a new series to the chart's series collection.
|
|
142
|
+
# @return [Series]
|
|
143
|
+
# @see Series
|
|
144
|
+
def add_series(options={})
|
|
145
|
+
@series_type.new(self, options)
|
|
146
|
+
@series.last
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# Serializes the object
|
|
150
|
+
# @param [String] str
|
|
151
|
+
# @return [String]
|
|
152
|
+
def to_xml_string(str = '')
|
|
153
|
+
str << '<?xml version="1.0" encoding="UTF-8"?>'
|
|
154
|
+
str << '<c:chartSpace xmlns:c="' << XML_NS_C << '" xmlns:a="' << XML_NS_A << '" xmlns:r="' << XML_NS_R << '">'
|
|
155
|
+
str << '<c:date1904 val="' << Axlsx::Workbook.date1904.to_s << '"/>'
|
|
156
|
+
str << '<c:style val="' << style.to_s << '"/>'
|
|
157
|
+
str << '<c:chart>'
|
|
158
|
+
@title.to_xml_string str
|
|
159
|
+
str << '<c:autoTitleDeleted val="' << (@title == nil).to_s << '"/>'
|
|
160
|
+
@view_3D.to_xml_string(str) if @view_3D
|
|
161
|
+
str << '<c:floor><c:thickness val="0"/></c:floor>'
|
|
162
|
+
str << '<c:sideWall><c:thickness val="0"/></c:sideWall>'
|
|
163
|
+
str << '<c:backWall><c:thickness val="0"/></c:backWall>'
|
|
164
|
+
str << '<c:plotArea>'
|
|
165
|
+
str << '<c:layout/>'
|
|
166
|
+
yield str if block_given?
|
|
167
|
+
str << '</c:plotArea>'
|
|
168
|
+
if @show_legend
|
|
169
|
+
str << '<c:legend>'
|
|
170
|
+
str << '<c:legendPos val="r"/>'
|
|
171
|
+
str << '<c:layout/>'
|
|
172
|
+
str << '<c:overlay val="0"/>'
|
|
173
|
+
str << '</c:legend>'
|
|
174
|
+
end
|
|
175
|
+
str << '<c:plotVisOnly val="1"/>'
|
|
176
|
+
str << '<c:dispBlanksAs val="' << display_blanks_as.to_s << '"/>'
|
|
177
|
+
str << '<c:showDLblsOverMax val="1"/>'
|
|
178
|
+
str << '</c:chart>'
|
|
179
|
+
str << '<c:printSettings>'
|
|
180
|
+
str << '<c:headerFooter/>'
|
|
181
|
+
str << '<c:pageMargins b="1.0" l="0.75" r="0.75" t="1.0" header="0.5" footer="0.5"/>'
|
|
182
|
+
str << '<c:pageSetup/>'
|
|
183
|
+
str << '</c:printSettings>'
|
|
184
|
+
str << '</c:chartSpace>'
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
# This is a short cut method to set the anchor start marker position
|
|
188
|
+
# If you need finer granularity in positioning use
|
|
189
|
+
#
|
|
190
|
+
# This helper method acceps a fairly wide range of inputs exampled
|
|
191
|
+
# below
|
|
192
|
+
#
|
|
193
|
+
# @example
|
|
194
|
+
#
|
|
195
|
+
# start_at 0, 5 # The anchor start marker is set to 6th row of
|
|
196
|
+
# the first column
|
|
197
|
+
#
|
|
198
|
+
# start_at [0, 5] # The anchor start marker is set to start on the 6th row
|
|
199
|
+
# of the first column
|
|
200
|
+
#
|
|
201
|
+
# start_at "C1" # The anchor start marker is set to start on the first row
|
|
202
|
+
# of the third column
|
|
203
|
+
#
|
|
204
|
+
# start_at sheet.rows.first.cells.last # The anchor start
|
|
205
|
+
# marker is set to the location of a specific cell.
|
|
206
|
+
#
|
|
207
|
+
# @param [Array|String|Cell] x the column, coordinates, string
|
|
208
|
+
# reference or cell to use in setting the start marker position.
|
|
209
|
+
# @param [Integer] y The row
|
|
210
|
+
# @return [Marker]
|
|
211
|
+
def start_at(x=0, y=0)
|
|
212
|
+
@graphic_frame.anchor.start_at(x, y)
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
# This is a short cut method to set the end anchor position
|
|
216
|
+
# If you need finer granularity in positioning use
|
|
217
|
+
# graphic_frame.anchor.to.colOff / rowOff
|
|
218
|
+
# @param [Integer] x The column - default 10
|
|
219
|
+
# @param [Integer] y The row - default 10
|
|
220
|
+
# @return [Marker]
|
|
221
|
+
# @see start_at
|
|
222
|
+
def end_at(x=10, y=10)
|
|
223
|
+
@graphic_frame.anchor.end_at(x, y)
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
# sets the view_3D object for the chart
|
|
227
|
+
def view_3D=(v) DataTypeValidator.validate "#{self.class}.view_3D", View3D, v; @view_3D = v; end
|
|
228
|
+
alias :view3D= :view_3D=
|
|
229
|
+
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
end
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
module Axlsx
|
|
2
|
+
# There are more elements in the dLbls spec that allow for
|
|
3
|
+
# customizations and formatting. For now, I am just implementing the
|
|
4
|
+
# basics.
|
|
5
|
+
#The DLbls class manages serialization of data labels
|
|
6
|
+
# showLeaderLines and leaderLines are not currently implemented
|
|
7
|
+
class DLbls
|
|
8
|
+
|
|
9
|
+
include Axlsx::Accessors
|
|
10
|
+
include Axlsx::OptionsParser
|
|
11
|
+
# creates a new DLbls object
|
|
12
|
+
def initialize(chart_type, options={})
|
|
13
|
+
raise ArgumentError, 'chart_type must inherit from Chart' unless [Chart, LineChart].include?(chart_type.superclass)
|
|
14
|
+
@chart_type = chart_type
|
|
15
|
+
initialize_defaults
|
|
16
|
+
parse_options options
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# These attributes are all boolean so I'm doing a bit of a hand
|
|
20
|
+
# waving magic show to set up the attriubte accessors
|
|
21
|
+
# @note
|
|
22
|
+
# not all charts support all methods!
|
|
23
|
+
# Bar3DChart and Line3DChart and ScatterChart do not support d_lbl_pos or show_leader_lines
|
|
24
|
+
#
|
|
25
|
+
boolean_attr_accessor :show_legend_key,
|
|
26
|
+
:show_val,
|
|
27
|
+
:show_cat_name,
|
|
28
|
+
:show_ser_name,
|
|
29
|
+
:show_percent,
|
|
30
|
+
:show_bubble_size,
|
|
31
|
+
:show_leader_lines
|
|
32
|
+
|
|
33
|
+
# Initialize all the values to false as Excel requires them to
|
|
34
|
+
# explicitly be disabled or all will show.
|
|
35
|
+
def initialize_defaults
|
|
36
|
+
[:show_legend_key, :show_val, :show_cat_name,
|
|
37
|
+
:show_ser_name, :show_percent, :show_bubble_size,
|
|
38
|
+
:show_leader_lines].each do |attr|
|
|
39
|
+
self.send("#{attr}=", false)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# The chart type that is using this data lables instance.
|
|
44
|
+
# This affects the xml output as not all chart types support the
|
|
45
|
+
# same data label attributes.
|
|
46
|
+
attr_reader :chart_type
|
|
47
|
+
|
|
48
|
+
# The position of the data labels in the chart
|
|
49
|
+
# @see d_lbl_pos= for a list of allowed values
|
|
50
|
+
# @return [Symbol]
|
|
51
|
+
def d_lbl_pos
|
|
52
|
+
return unless @chart_type == Pie3DChart
|
|
53
|
+
@d_lbl_pos ||= :bestFit
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# @see DLbls#d_lbl_pos
|
|
57
|
+
# Assigns the label postion for this data labels on this chart.
|
|
58
|
+
# Allowed positions are :bestFilt, :b, :ctr, :inBase, :inEnd, :l,
|
|
59
|
+
# :outEnd, :r and :t
|
|
60
|
+
# The default is :bestFit
|
|
61
|
+
# @param [Symbol] label_position the postion you want to use.
|
|
62
|
+
def d_lbl_pos=(label_position)
|
|
63
|
+
return unless @chart_type == Pie3DChart
|
|
64
|
+
Axlsx::RestrictionValidator.validate 'DLbls#d_lbl_pos', [:bestFit, :b, :ctr, :inBase, :inEnd, :l, :outEnd, :r, :t], label_position
|
|
65
|
+
@d_lbl_pos = label_position
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
# serializes the data labels
|
|
70
|
+
# @return [String]
|
|
71
|
+
def to_xml_string(str = '')
|
|
72
|
+
validate_attributes_for_chart_type
|
|
73
|
+
str << '<c:dLbls>'
|
|
74
|
+
%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|
|
|
75
|
+
next unless instance_values.keys.include?(key) && instance_values[key] != nil
|
|
76
|
+
str << "<c:#{Axlsx::camel(key, false)} val='#{instance_values[key]}' />"
|
|
77
|
+
end
|
|
78
|
+
str << '</c:dLbls>'
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# nills out d_lbl_pos and show_leader_lines as these attributes, while valid in the spec actually chrash excel for any chart type other than pie charts.
|
|
82
|
+
def validate_attributes_for_chart_type
|
|
83
|
+
return if @chart_type == Pie3DChart
|
|
84
|
+
@d_lbl_pos = nil
|
|
85
|
+
@show_leader_lines = nil
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
module Axlsx
|
|
3
|
+
require 'axlsx/drawing/d_lbls.rb'
|
|
4
|
+
require 'axlsx/drawing/title.rb'
|
|
5
|
+
require 'axlsx/drawing/series_title.rb'
|
|
6
|
+
require 'axlsx/drawing/series.rb'
|
|
7
|
+
require 'axlsx/drawing/pie_series.rb'
|
|
8
|
+
require 'axlsx/drawing/bar_series.rb'
|
|
9
|
+
require 'axlsx/drawing/line_series.rb'
|
|
10
|
+
require 'axlsx/drawing/scatter_series.rb'
|
|
11
|
+
|
|
12
|
+
require 'axlsx/drawing/scaling.rb'
|
|
13
|
+
require 'axlsx/drawing/axis.rb'
|
|
14
|
+
|
|
15
|
+
require 'axlsx/drawing/str_val.rb'
|
|
16
|
+
require 'axlsx/drawing/num_val.rb'
|
|
17
|
+
require 'axlsx/drawing/str_data.rb'
|
|
18
|
+
require 'axlsx/drawing/num_data.rb'
|
|
19
|
+
require 'axlsx/drawing/num_data_source.rb'
|
|
20
|
+
require 'axlsx/drawing/ax_data_source.rb'
|
|
21
|
+
|
|
22
|
+
require 'axlsx/drawing/ser_axis.rb'
|
|
23
|
+
require 'axlsx/drawing/cat_axis.rb'
|
|
24
|
+
require 'axlsx/drawing/val_axis.rb'
|
|
25
|
+
require 'axlsx/drawing/axes.rb'
|
|
26
|
+
|
|
27
|
+
require 'axlsx/drawing/marker.rb'
|
|
28
|
+
|
|
29
|
+
require 'axlsx/drawing/one_cell_anchor.rb'
|
|
30
|
+
require 'axlsx/drawing/two_cell_anchor.rb'
|
|
31
|
+
require 'axlsx/drawing/graphic_frame.rb'
|
|
32
|
+
|
|
33
|
+
require 'axlsx/drawing/view_3D.rb'
|
|
34
|
+
require 'axlsx/drawing/chart.rb'
|
|
35
|
+
require 'axlsx/drawing/pie_3D_chart.rb'
|
|
36
|
+
require 'axlsx/drawing/bar_3D_chart.rb'
|
|
37
|
+
require 'axlsx/drawing/line_chart.rb'
|
|
38
|
+
require 'axlsx/drawing/line_3D_chart.rb'
|
|
39
|
+
require 'axlsx/drawing/scatter_chart.rb'
|
|
40
|
+
|
|
41
|
+
require 'axlsx/drawing/picture_locking.rb'
|
|
42
|
+
require 'axlsx/drawing/pic.rb'
|
|
43
|
+
require 'axlsx/drawing/hyperlink.rb'
|
|
44
|
+
|
|
45
|
+
require 'axlsx/drawing/vml_drawing.rb'
|
|
46
|
+
require 'axlsx/drawing/vml_shape.rb'
|
|
47
|
+
|
|
48
|
+
# A Drawing is a canvas for charts and images. Each worksheet has a single drawing that manages anchors.
|
|
49
|
+
# 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.
|
|
50
|
+
# @note The recommended way to manage drawings is to use the Worksheet.add_chart and Worksheet.add_image methods.
|
|
51
|
+
# @see Worksheet#add_chart
|
|
52
|
+
# @see Worksheet#add_image
|
|
53
|
+
# @see Chart
|
|
54
|
+
# see examples/example.rb for an example of how to create a chart.
|
|
55
|
+
class Drawing
|
|
56
|
+
|
|
57
|
+
# The worksheet that owns the drawing
|
|
58
|
+
# @return [Worksheet]
|
|
59
|
+
attr_reader :worksheet
|
|
60
|
+
|
|
61
|
+
# A collection of anchors for this drawing
|
|
62
|
+
# only TwoCellAnchors are supported in this version
|
|
63
|
+
# @return [SimpleTypedList]
|
|
64
|
+
attr_reader :anchors
|
|
65
|
+
|
|
66
|
+
# Creates a new Drawing object
|
|
67
|
+
# @param [Worksheet] worksheet The worksheet that owns this drawing
|
|
68
|
+
def initialize(worksheet)
|
|
69
|
+
DataTypeValidator.validate "Drawing.worksheet", Worksheet, worksheet
|
|
70
|
+
@worksheet = worksheet
|
|
71
|
+
@worksheet.workbook.drawings << self
|
|
72
|
+
@anchors = SimpleTypedList.new [TwoCellAnchor, OneCellAnchor]
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
# Adds an image to the chart If th end_at option is specified we create a two cell anchor. By default we use a one cell anchor.
|
|
77
|
+
# @note The recommended way to manage images is to use Worksheet.add_image. Please refer to that method for documentation.
|
|
78
|
+
# @see Worksheet#add_image
|
|
79
|
+
# @return [Pic]
|
|
80
|
+
def add_image(options={})
|
|
81
|
+
if options[:end_at]
|
|
82
|
+
TwoCellAnchor.new(self, options).add_pic(options)
|
|
83
|
+
else
|
|
84
|
+
OneCellAnchor.new(self, options)
|
|
85
|
+
end
|
|
86
|
+
@anchors.last.object
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Adds a chart to the drawing.
|
|
90
|
+
# @note The recommended way to manage charts is to use Worksheet.add_chart. Please refer to that method for documentation.
|
|
91
|
+
# @see Worksheet#add_chart
|
|
92
|
+
def add_chart(chart_type, options={})
|
|
93
|
+
TwoCellAnchor.new(self, options)
|
|
94
|
+
@anchors.last.add_chart(chart_type, options)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# An array of charts that are associated with this drawing's anchors
|
|
98
|
+
# @return [Array]
|
|
99
|
+
def charts
|
|
100
|
+
charts = @anchors.select { |a| a.object.is_a?(GraphicFrame) }
|
|
101
|
+
charts.map { |a| a.object.chart }
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# An array of hyperlink objects associated with this drawings images
|
|
105
|
+
# @return [Array]
|
|
106
|
+
def hyperlinks
|
|
107
|
+
links = self.images.select { |a| a.hyperlink.is_a?(Hyperlink) }
|
|
108
|
+
links.map { |a| a.hyperlink }
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# An array of image objects that are associated with this drawing's anchors
|
|
112
|
+
# @return [Array]
|
|
113
|
+
def images
|
|
114
|
+
images = @anchors.select { |a| a.object.is_a?(Pic) }
|
|
115
|
+
images.map { |a| a.object }
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# The index of this drawing in the owning workbooks's drawings collection.
|
|
119
|
+
# @return [Integer]
|
|
120
|
+
def index
|
|
121
|
+
@worksheet.workbook.drawings.index(self)
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# The part name for this drawing
|
|
125
|
+
# @return [String]
|
|
126
|
+
def pn
|
|
127
|
+
"#{DRAWING_PN % (index+1)}"
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
# The relational part name for this drawing
|
|
131
|
+
# #NOTE This should be rewritten to return an Axlsx::Relationship object.
|
|
132
|
+
# @return [String]
|
|
133
|
+
def rels_pn
|
|
134
|
+
"#{DRAWING_RELS_PN % (index+1)}"
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
# A list of objects this drawing holds.
|
|
138
|
+
# @return [Array]
|
|
139
|
+
def child_objects
|
|
140
|
+
charts + images + hyperlinks
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# The drawing's relationships.
|
|
144
|
+
# @return [Relationships]
|
|
145
|
+
def relationships
|
|
146
|
+
r = Relationships.new
|
|
147
|
+
child_objects.each { |child| r << child.relationship }
|
|
148
|
+
r
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
# Serializes the object
|
|
152
|
+
# @param [String] str
|
|
153
|
+
# @return [String]
|
|
154
|
+
def to_xml_string(str = '')
|
|
155
|
+
str << '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'
|
|
156
|
+
str << '<xdr:wsDr xmlns:xdr="' << XML_NS_XDR << '" xmlns:a="' << XML_NS_A << '">'
|
|
157
|
+
anchors.each { |anchor| anchor.to_xml_string(str) }
|
|
158
|
+
str << '</xdr:wsDr>'
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
end
|
|
162
|
+
end
|