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,187 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
module Axlsx
|
|
3
|
+
|
|
4
|
+
# the access class defines common properties and values for a chart axis.
|
|
5
|
+
class Axis
|
|
6
|
+
|
|
7
|
+
include Axlsx::OptionsParser
|
|
8
|
+
|
|
9
|
+
# Creates an Axis object
|
|
10
|
+
# @option options [Axis] cross_axis the perpendicular axis
|
|
11
|
+
# @option options [Symbol] ax_pos
|
|
12
|
+
# @option options [Symbol] crosses
|
|
13
|
+
# @option options [Symbol] tick_lbl_pos
|
|
14
|
+
# @raise [ArgumentError] If axi_id or cross_ax are not unsigned integers
|
|
15
|
+
def initialize(options={})
|
|
16
|
+
@id = rand(8 ** 8)
|
|
17
|
+
@format_code = "General"
|
|
18
|
+
@delete = @label_rotation = 0
|
|
19
|
+
@scaling = Scaling.new(:orientation=>:minMax)
|
|
20
|
+
@title = @color = nil
|
|
21
|
+
self.ax_pos = :b
|
|
22
|
+
self.tick_lbl_pos = :nextTo
|
|
23
|
+
self.format_code = "General"
|
|
24
|
+
self.crosses = :autoZero
|
|
25
|
+
self.gridlines = true
|
|
26
|
+
parse_options options
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# the fill color to use in the axis shape properties. This should be a 6 character long hex string
|
|
30
|
+
# e.g. FF0000 for red
|
|
31
|
+
# @return [String]
|
|
32
|
+
attr_reader :color
|
|
33
|
+
|
|
34
|
+
# the id of the axis.
|
|
35
|
+
# @return [Integer]
|
|
36
|
+
attr_reader :id
|
|
37
|
+
alias :axID :id
|
|
38
|
+
|
|
39
|
+
# The perpendicular axis
|
|
40
|
+
# @return [Integer]
|
|
41
|
+
attr_reader :cross_axis
|
|
42
|
+
alias :crossAx :cross_axis
|
|
43
|
+
|
|
44
|
+
# The scaling of the axis
|
|
45
|
+
# @see Scaling
|
|
46
|
+
# @return [Scaling]
|
|
47
|
+
attr_reader :scaling
|
|
48
|
+
|
|
49
|
+
# The position of the axis
|
|
50
|
+
# must be one of [:l, :r, :t, :b]
|
|
51
|
+
# @return [Symbol]
|
|
52
|
+
attr_reader :ax_pos
|
|
53
|
+
alias :axPos :ax_pos
|
|
54
|
+
|
|
55
|
+
# the position of the tick labels
|
|
56
|
+
# must be one of [:nextTo, :high, :low]
|
|
57
|
+
# @return [Symbol]
|
|
58
|
+
attr_reader :tick_lbl_pos
|
|
59
|
+
alias :tickLblPos :tick_lbl_pos
|
|
60
|
+
|
|
61
|
+
# The number format format code for this axis
|
|
62
|
+
# default :General
|
|
63
|
+
# @return [String]
|
|
64
|
+
attr_reader :format_code
|
|
65
|
+
|
|
66
|
+
# specifies how the perpendicular axis is crossed
|
|
67
|
+
# must be one of [:autoZero, :min, :max]
|
|
68
|
+
# @return [Symbol]
|
|
69
|
+
attr_reader :crosses
|
|
70
|
+
|
|
71
|
+
# specifies how the degree of label rotation
|
|
72
|
+
# @return [Integer]
|
|
73
|
+
attr_reader :label_rotation
|
|
74
|
+
|
|
75
|
+
# specifies if gridlines should be shown in the chart
|
|
76
|
+
# @return [Boolean]
|
|
77
|
+
attr_reader :gridlines
|
|
78
|
+
|
|
79
|
+
# specifies if gridlines should be shown in the chart
|
|
80
|
+
# @return [Boolean]
|
|
81
|
+
attr_reader :delete
|
|
82
|
+
|
|
83
|
+
# the title for the axis. This can be a cell or a fixed string.
|
|
84
|
+
attr_reader :title
|
|
85
|
+
|
|
86
|
+
# The color for this axis. This value is used when rendering the axis line in the chart.
|
|
87
|
+
# colors should be in 6 character rbg format
|
|
88
|
+
# @return [String] the rbg color assinged.
|
|
89
|
+
# @see color
|
|
90
|
+
def color=(color_rgb)
|
|
91
|
+
@color = color_rgb
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# The crossing axis for this axis
|
|
95
|
+
# @param [Axis] axis
|
|
96
|
+
def cross_axis=(axis)
|
|
97
|
+
DataTypeValidator.validate "#{self.class}.cross_axis", [Axis], axis
|
|
98
|
+
@cross_axis = axis
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# The position of the axis
|
|
102
|
+
# must be one of [:l, :r, :t, :b]
|
|
103
|
+
def ax_pos=(v) RestrictionValidator.validate "#{self.class}.ax_pos", [:l, :r, :b, :t], v; @ax_pos = v; end
|
|
104
|
+
alias :axPos= :ax_pos=
|
|
105
|
+
|
|
106
|
+
# the position of the tick labels
|
|
107
|
+
# must be one of [:nextTo, :high, :low1]
|
|
108
|
+
def tick_lbl_pos=(v) RestrictionValidator.validate "#{self.class}.tick_lbl_pos", [:nextTo, :high, :low, :none], v; @tick_lbl_pos = v; end
|
|
109
|
+
alias :tickLblPos= :tick_lbl_pos=
|
|
110
|
+
|
|
111
|
+
# The number format format code for this axis
|
|
112
|
+
# default :General
|
|
113
|
+
def format_code=(v) Axlsx::validate_string(v); @format_code = v; end
|
|
114
|
+
|
|
115
|
+
# Specify if gridlines should be shown for this axis
|
|
116
|
+
# default true
|
|
117
|
+
def gridlines=(v) Axlsx::validate_boolean(v); @gridlines = v; end
|
|
118
|
+
|
|
119
|
+
# Specify if axis should be removed from the chart
|
|
120
|
+
# default false
|
|
121
|
+
def delete=(v) Axlsx::validate_boolean(v); @delete = v; end
|
|
122
|
+
|
|
123
|
+
# specifies how the perpendicular axis is crossed
|
|
124
|
+
# must be one of [:autoZero, :min, :max]
|
|
125
|
+
def crosses=(v) RestrictionValidator.validate "#{self.class}.crosses", [:autoZero, :min, :max], v; @crosses = v; end
|
|
126
|
+
|
|
127
|
+
# Specify the degree of label rotation to apply to labels
|
|
128
|
+
# default true
|
|
129
|
+
def label_rotation=(v)
|
|
130
|
+
Axlsx::validate_int(v)
|
|
131
|
+
adjusted = v.to_i * 60000
|
|
132
|
+
Axlsx::validate_angle(adjusted)
|
|
133
|
+
@label_rotation = adjusted
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
# The title object for the chart.
|
|
137
|
+
# @param [String, Cell] v
|
|
138
|
+
# @return [Title]
|
|
139
|
+
def title=(v)
|
|
140
|
+
DataTypeValidator.validate "#{self.class}.title", [String, Cell], v
|
|
141
|
+
@title ||= Title.new
|
|
142
|
+
if v.is_a?(String)
|
|
143
|
+
@title.text = v
|
|
144
|
+
elsif v.is_a?(Cell)
|
|
145
|
+
@title.cell = v
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# Serializes the object
|
|
150
|
+
# @param [String] str
|
|
151
|
+
# @return [String]
|
|
152
|
+
def to_xml_string(str = '')
|
|
153
|
+
str << '<c:axId val="' << @id.to_s << '"/>'
|
|
154
|
+
@scaling.to_xml_string str
|
|
155
|
+
str << '<c:delete val="'<< @delete.to_s << '"/>'
|
|
156
|
+
str << '<c:axPos val="' << @ax_pos.to_s << '"/>'
|
|
157
|
+
str << '<c:majorGridlines>'
|
|
158
|
+
# TODO shape properties need to be extracted into a class
|
|
159
|
+
if gridlines == false
|
|
160
|
+
str << '<c:spPr>'
|
|
161
|
+
str << '<a:ln>'
|
|
162
|
+
str << '<a:noFill/>'
|
|
163
|
+
str << '</a:ln>'
|
|
164
|
+
str << '</c:spPr>'
|
|
165
|
+
end
|
|
166
|
+
str << '</c:majorGridlines>'
|
|
167
|
+
@title.to_xml_string(str) unless @title == nil
|
|
168
|
+
str << '<c:numFmt formatCode="' << @format_code << '" sourceLinked="1"/>'
|
|
169
|
+
str << '<c:majorTickMark val="none"/>'
|
|
170
|
+
str << '<c:minorTickMark val="none"/>'
|
|
171
|
+
str << '<c:tickLblPos val="' << @tick_lbl_pos.to_s << '"/>'
|
|
172
|
+
# TODO - this is also being used for series colors
|
|
173
|
+
# time to extract this into a class spPr - Shape Properties
|
|
174
|
+
if @color
|
|
175
|
+
str << '<c:spPr><a:ln><a:solidFill>'
|
|
176
|
+
str << '<a:srgbClr val="' << @color << '"/>'
|
|
177
|
+
str << '</a:solidFill></a:ln></c:spPr>'
|
|
178
|
+
end
|
|
179
|
+
# some potential value in implementing this in full. Very detailed!
|
|
180
|
+
str << '<c:txPr><a:bodyPr rot="' << @label_rotation.to_s << '"/><a:lstStyle/><a:p><a:pPr><a:defRPr/></a:pPr><a:endParaRPr/></a:p></c:txPr>'
|
|
181
|
+
str << '<c:crossAx val="' << @cross_axis.id.to_s << '"/>'
|
|
182
|
+
str << '<c:crosses val="' << @crosses.to_s << '"/>'
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
end
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
module Axlsx
|
|
3
|
+
|
|
4
|
+
# The Bar3DChart is a three dimentional barchart (who would have guessed?) that you can add to your worksheet.
|
|
5
|
+
# @see Worksheet#add_chart
|
|
6
|
+
# @see Chart#add_series
|
|
7
|
+
# @see Package#serialize
|
|
8
|
+
# @see README for an example
|
|
9
|
+
class Bar3DChart < Chart
|
|
10
|
+
|
|
11
|
+
# the category axis
|
|
12
|
+
# @return [CatAxis]
|
|
13
|
+
def cat_axis
|
|
14
|
+
axes[:cat_axis]
|
|
15
|
+
end
|
|
16
|
+
alias :catAxis :cat_axis
|
|
17
|
+
|
|
18
|
+
# the value axis
|
|
19
|
+
# @return [ValAxis]
|
|
20
|
+
def val_axis
|
|
21
|
+
axes[:val_axis]
|
|
22
|
+
end
|
|
23
|
+
alias :valAxis :val_axis
|
|
24
|
+
|
|
25
|
+
# The direction of the bars in the chart
|
|
26
|
+
# must be one of [:bar, :col]
|
|
27
|
+
# @return [Symbol]
|
|
28
|
+
def bar_dir
|
|
29
|
+
@bar_dir ||= :bar
|
|
30
|
+
end
|
|
31
|
+
alias :barDir :bar_dir
|
|
32
|
+
|
|
33
|
+
# space between bar or column clusters, as a percentage of the bar or column width.
|
|
34
|
+
# @return [String]
|
|
35
|
+
attr_reader :gap_depth
|
|
36
|
+
alias :gapDepth :gap_depth
|
|
37
|
+
|
|
38
|
+
# space between bar or column clusters, as a percentage of the bar or column width.
|
|
39
|
+
# @return [String]
|
|
40
|
+
def gap_width
|
|
41
|
+
@gap_width ||= 150
|
|
42
|
+
end
|
|
43
|
+
alias :gapWidth :gap_width
|
|
44
|
+
|
|
45
|
+
#grouping for a column, line, or area chart.
|
|
46
|
+
# must be one of [:percentStacked, :clustered, :standard, :stacked]
|
|
47
|
+
# @return [Symbol]
|
|
48
|
+
def grouping
|
|
49
|
+
@grouping ||= :clustered
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# The shabe of the bars or columns
|
|
53
|
+
# must be one of [:cone, :coneToMax, :box, :cylinder, :pyramid, :pyramidToMax]
|
|
54
|
+
# @return [Symbol]
|
|
55
|
+
def shape
|
|
56
|
+
@shape ||= :box
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# validation regex for gap amount percent
|
|
60
|
+
GAP_AMOUNT_PERCENT = /0*(([0-9])|([1-9][0-9])|([1-4][0-9][0-9])|500)%/
|
|
61
|
+
|
|
62
|
+
# Creates a new bar chart object
|
|
63
|
+
# @param [GraphicFrame] frame The workbook that owns this chart.
|
|
64
|
+
# @option options [Cell, String] title
|
|
65
|
+
# @option options [Boolean] show_legend
|
|
66
|
+
# @option options [Symbol] bar_dir
|
|
67
|
+
# @option options [Symbol] grouping
|
|
68
|
+
# @option options [String] gap_width
|
|
69
|
+
# @option options [String] gap_depth
|
|
70
|
+
# @option options [Symbol] shape
|
|
71
|
+
# @option options [Integer] rot_x
|
|
72
|
+
# @option options [String] h_percent
|
|
73
|
+
# @option options [Integer] rot_y
|
|
74
|
+
# @option options [String] depth_percent
|
|
75
|
+
# @option options [Boolean] r_ang_ax
|
|
76
|
+
# @option options [Integer] perspective
|
|
77
|
+
# @see Chart
|
|
78
|
+
# @see View3D
|
|
79
|
+
def initialize(frame, options={})
|
|
80
|
+
@vary_colors = true
|
|
81
|
+
@gap_width, @gap_depth, @shape = nil, nil, nil
|
|
82
|
+
super(frame, options)
|
|
83
|
+
@series_type = BarSeries
|
|
84
|
+
@view_3D = View3D.new({:r_ang_ax=>1}.merge(options))
|
|
85
|
+
@d_lbls = nil
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# The direction of the bars in the chart
|
|
89
|
+
# must be one of [:bar, :col]
|
|
90
|
+
def bar_dir=(v)
|
|
91
|
+
RestrictionValidator.validate "Bar3DChart.bar_dir", [:bar, :col], v
|
|
92
|
+
@bar_dir = v
|
|
93
|
+
end
|
|
94
|
+
alias :barDir= :bar_dir=
|
|
95
|
+
|
|
96
|
+
#grouping for a column, line, or area chart.
|
|
97
|
+
# must be one of [:percentStacked, :clustered, :standard, :stacked]
|
|
98
|
+
def grouping=(v)
|
|
99
|
+
RestrictionValidator.validate "Bar3DChart.grouping", [:percentStacked, :clustered, :standard, :stacked], v
|
|
100
|
+
@grouping = v
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# space between bar or column clusters, as a percentage of the bar or column width.
|
|
104
|
+
def gap_width=(v)
|
|
105
|
+
RegexValidator.validate "Bar3DChart.gap_width", GAP_AMOUNT_PERCENT, v
|
|
106
|
+
@gap_width=(v)
|
|
107
|
+
end
|
|
108
|
+
alias :gapWidth= :gap_width=
|
|
109
|
+
|
|
110
|
+
# space between bar or column clusters, as a percentage of the bar or column width.
|
|
111
|
+
def gap_depth=(v)
|
|
112
|
+
RegexValidator.validate "Bar3DChart.gap_didth", GAP_AMOUNT_PERCENT, v
|
|
113
|
+
@gap_depth=(v)
|
|
114
|
+
end
|
|
115
|
+
alias :gapDepth= :gap_depth=
|
|
116
|
+
|
|
117
|
+
# The shabe of the bars or columns
|
|
118
|
+
# must be one of [:cone, :coneToMax, :box, :cylinder, :pyramid, :pyramidToMax]
|
|
119
|
+
def shape=(v)
|
|
120
|
+
RestrictionValidator.validate "Bar3DChart.shape", [:cone, :coneToMax, :box, :cylinder, :pyramid, :pyramidToMax], v
|
|
121
|
+
@shape = v
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# Serializes the object
|
|
125
|
+
# @param [String] str
|
|
126
|
+
# @return [String]
|
|
127
|
+
def to_xml_string(str = '')
|
|
128
|
+
super(str) do |str_inner|
|
|
129
|
+
str_inner << '<c:bar3DChart>'
|
|
130
|
+
str_inner << '<c:barDir val="' << bar_dir.to_s << '"/>'
|
|
131
|
+
str_inner << '<c:grouping val="' << grouping.to_s << '"/>'
|
|
132
|
+
str_inner << '<c:varyColors val="' << vary_colors.to_s << '"/>'
|
|
133
|
+
@series.each { |ser| ser.to_xml_string(str_inner) }
|
|
134
|
+
@d_lbls.to_xml_string(str_inner) if @d_lbls
|
|
135
|
+
str_inner << '<c:gapWidth val="' << @gap_width.to_s << '"/>' unless @gap_width.nil?
|
|
136
|
+
str_inner << '<c:gapDepth val="' << @gap_depth.to_s << '"/>' unless @gap_depth.nil?
|
|
137
|
+
str_inner << '<c:shape val="' << @shape.to_s << '"/>' unless @shape.nil?
|
|
138
|
+
axes.to_xml_string(str_inner, :ids => true)
|
|
139
|
+
str_inner << '</c:bar3DChart>'
|
|
140
|
+
axes.to_xml_string(str_inner)
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# A hash of axes used by this chart. Bar charts have a value and
|
|
145
|
+
# category axes specified via axes[:val_axes] and axes[:cat_axis]
|
|
146
|
+
# @return [Axes]
|
|
147
|
+
def axes
|
|
148
|
+
@axes ||= Axes.new(:cat_axis => CatAxis, :val_axis => ValAxis)
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
module Axlsx
|
|
3
|
+
# A BarSeries defines the title, data and labels for bar charts
|
|
4
|
+
# @note The recommended way to manage series is to use Chart#add_series
|
|
5
|
+
# @see Worksheet#add_chart
|
|
6
|
+
# @see Chart#add_series
|
|
7
|
+
class BarSeries < Series
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
# The data for this series.
|
|
11
|
+
# @return [NumDataSource]
|
|
12
|
+
attr_reader :data
|
|
13
|
+
|
|
14
|
+
# The labels for this series.
|
|
15
|
+
# @return [Array, SimpleTypedList]
|
|
16
|
+
attr_reader :labels
|
|
17
|
+
|
|
18
|
+
# The shabe of the bars or columns
|
|
19
|
+
# must be one of [:percentStacked, :clustered, :standard, :stacked]
|
|
20
|
+
# @return [Symbol]
|
|
21
|
+
attr_reader :shape
|
|
22
|
+
|
|
23
|
+
# An array of rgb colors to apply to your bar chart.
|
|
24
|
+
attr_reader :colors
|
|
25
|
+
|
|
26
|
+
# Creates a new series
|
|
27
|
+
# @option options [Array, SimpleTypedList] data
|
|
28
|
+
# @option options [Array, SimpleTypedList] labels
|
|
29
|
+
# @option options [String] title
|
|
30
|
+
# @option options [String] shape
|
|
31
|
+
# @option options [String] colors an array of colors to use when rendering each data point
|
|
32
|
+
# @param [Chart] chart
|
|
33
|
+
def initialize(chart, options={})
|
|
34
|
+
@shape = :box
|
|
35
|
+
@colors = []
|
|
36
|
+
super(chart, options)
|
|
37
|
+
self.labels = AxDataSource.new({:data => options[:labels]}) unless options[:labels].nil?
|
|
38
|
+
self.data = NumDataSource.new(options) unless options[:data].nil?
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# @see colors
|
|
42
|
+
def colors=(v) DataTypeValidator.validate "BarSeries.colors", [Array], v; @colors = v end
|
|
43
|
+
|
|
44
|
+
# The shabe of the bars or columns
|
|
45
|
+
# must be one of [:cone, :coneToMax, :box, :cylinder, :pyramid, :pyramidToMax]
|
|
46
|
+
def shape=(v)
|
|
47
|
+
RestrictionValidator.validate "BarSeries.shape", [:cone, :coneToMax, :box, :cylinder, :pyramid, :pyramidToMax], v
|
|
48
|
+
@shape = v
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Serializes the object
|
|
52
|
+
# @param [String] str
|
|
53
|
+
# @return [String]
|
|
54
|
+
def to_xml_string(str = '')
|
|
55
|
+
super(str) do |str_inner|
|
|
56
|
+
|
|
57
|
+
colors.each_with_index do |c, index|
|
|
58
|
+
str_inner << '<c:dPt>'
|
|
59
|
+
str_inner << '<c:idx val="' << index.to_s << '"/>'
|
|
60
|
+
str_inner << '<c:spPr><a:solidFill>'
|
|
61
|
+
str_inner << '<a:srgbClr val="' << c << '"/>'
|
|
62
|
+
str_inner << '</a:solidFill></c:spPr></c:dPt>'
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
@labels.to_xml_string(str_inner) unless @labels.nil?
|
|
66
|
+
@data.to_xml_string(str_inner) unless @data.nil?
|
|
67
|
+
# this is actually only required for shapes other than box
|
|
68
|
+
str_inner << '<c:shape val="' << shape.to_s << '"></c:shape>'
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
private
|
|
73
|
+
|
|
74
|
+
# assigns the data for this series
|
|
75
|
+
def data=(v) DataTypeValidator.validate "Series.data", [NumDataSource], v; @data = v; end
|
|
76
|
+
|
|
77
|
+
# assigns the labels for this series
|
|
78
|
+
def labels=(v) DataTypeValidator.validate "Series.labels", [AxDataSource], v; @labels = v; end
|
|
79
|
+
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
end
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
module Axlsx
|
|
3
|
+
#A CatAxis object defines a chart category axis
|
|
4
|
+
class CatAxis < Axis
|
|
5
|
+
|
|
6
|
+
# Creates a new CatAxis object
|
|
7
|
+
# @option options [Integer] tick_lbl_skip
|
|
8
|
+
# @option options [Integer] tick_mark_skip
|
|
9
|
+
def initialize(options={})
|
|
10
|
+
@tick_lbl_skip = 1
|
|
11
|
+
@tick_mark_skip = 1
|
|
12
|
+
self.auto = 1
|
|
13
|
+
self.lbl_algn = :ctr
|
|
14
|
+
self.lbl_offset = "100"
|
|
15
|
+
super(options)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# 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.
|
|
19
|
+
# @return [Boolean]
|
|
20
|
+
attr_reader :auto
|
|
21
|
+
|
|
22
|
+
# specifies how the perpendicular axis is crossed
|
|
23
|
+
# must be one of [:ctr, :l, :r]
|
|
24
|
+
# @return [Symbol]
|
|
25
|
+
attr_reader :lbl_algn
|
|
26
|
+
alias :lblAlgn :lbl_algn
|
|
27
|
+
|
|
28
|
+
# The offset of the labels
|
|
29
|
+
# must be between a string between 0 and 1000
|
|
30
|
+
# @return [Integer]
|
|
31
|
+
attr_reader :lbl_offset
|
|
32
|
+
alias :lblOffset :lbl_offset
|
|
33
|
+
|
|
34
|
+
# The number of tick lables to skip between labels
|
|
35
|
+
# @return [Integer]
|
|
36
|
+
attr_reader :tick_lbl_skip
|
|
37
|
+
alias :tickLblSkip :tick_lbl_skip
|
|
38
|
+
|
|
39
|
+
# The number of tickmarks to be skipped before the next one is rendered.
|
|
40
|
+
# @return [Boolean]
|
|
41
|
+
attr_reader :tick_mark_skip
|
|
42
|
+
alias :tickMarkSkip :tick_mark_skip
|
|
43
|
+
|
|
44
|
+
# regex for validating label offset
|
|
45
|
+
LBL_OFFSET_REGEX = /0*(([0-9])|([1-9][0-9])|([1-9][0-9][0-9])|1000)/
|
|
46
|
+
|
|
47
|
+
# @see tick_lbl_skip
|
|
48
|
+
def tick_lbl_skip=(v) Axlsx::validate_unsigned_int(v); @tick_lbl_skip = v; end
|
|
49
|
+
alias :tickLblSkip= :tick_lbl_skip=
|
|
50
|
+
|
|
51
|
+
# @see tick_mark_skip
|
|
52
|
+
def tick_mark_skip=(v) Axlsx::validate_unsigned_int(v); @tick_mark_skip = v; end
|
|
53
|
+
alias :tickMarkSkip= :tick_mark_skip=
|
|
54
|
+
|
|
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.
|
|
56
|
+
def auto=(v) Axlsx::validate_boolean(v); @auto = v; end
|
|
57
|
+
|
|
58
|
+
# specifies how the perpendicular axis is crossed
|
|
59
|
+
# must be one of [:ctr, :l, :r]
|
|
60
|
+
def lbl_algn=(v) RestrictionValidator.validate "#{self.class}.lbl_algn", [:ctr, :l, :r], v; @lbl_algn = v; end
|
|
61
|
+
alias :lblAlgn= :lbl_algn=
|
|
62
|
+
|
|
63
|
+
# The offset of the labels
|
|
64
|
+
# must be between a string between 0 and 1000
|
|
65
|
+
def lbl_offset=(v) RegexValidator.validate "#{self.class}.lbl_offset", LBL_OFFSET_REGEX, v; @lbl_offset = v; end
|
|
66
|
+
alias :lblOffset= :lbl_offset=
|
|
67
|
+
|
|
68
|
+
# Serializes the object
|
|
69
|
+
# @param [String] str
|
|
70
|
+
# @return [String]
|
|
71
|
+
def to_xml_string(str = '')
|
|
72
|
+
str << '<c:catAx>'
|
|
73
|
+
super(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 << '"/>'
|
|
79
|
+
str << '</c:catAx>'
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
end
|