l_axlsx 2.0.1
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.
- data/.yardopts +9 -0
- data/.yardopts_guide +19 -0
- data/CHANGELOG.md +239 -0
- data/LICENSE +22 -0
- data/README.md +259 -0
- data/Rakefile +30 -0
- data/examples/2010_comments.rb +17 -0
- data/examples/IMAGE1UP.JPEG +0 -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 +828 -0
- data/examples/extractive.rb +45 -0
- data/examples/image1.jpeg +0 -0
- data/examples/ios_preview.rb +14 -0
- data/examples/merge_cells.rb +17 -0
- data/examples/no_grid_with_borders.rb +18 -0
- data/examples/page_setup.rb +11 -0
- data/examples/pivot_table.rb +39 -0
- data/examples/pivot_test.rb +63 -0
- data/examples/sheet_protection.rb +10 -0
- data/examples/skydrive/real_example.rb +63 -0
- data/examples/split.rb +16 -0
- data/examples/styles.rb +66 -0
- data/examples/underline.rb +13 -0
- data/examples/wrap_text.rb +21 -0
- data/lib/axlsx.rb +166 -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 +190 -0
- data/lib/axlsx/drawing/bar_3D_chart.rb +151 -0
- data/lib/axlsx/drawing/bar_series.rb +82 -0
- data/lib/axlsx/drawing/bubble_chart.rb +59 -0
- data/lib/axlsx/drawing/bubble_series.rb +63 -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 +164 -0
- data/lib/axlsx/drawing/graphic_frame.rb +54 -0
- data/lib/axlsx/drawing/hyperlink.rb +100 -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 +93 -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 +204 -0
- data/lib/axlsx/drawing/picture_locking.rb +42 -0
- data/lib/axlsx/drawing/pie_3D_chart.rb +47 -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 +363 -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 +132 -0
- data/lib/axlsx/stylesheet/cell_protection.rb +41 -0
- data/lib/axlsx/stylesheet/cell_style.rb +72 -0
- data/lib/axlsx/stylesheet/color.rb +76 -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 +77 -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 +77 -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 +397 -0
- data/lib/axlsx/util/options_parser.rb +16 -0
- data/lib/axlsx/util/parser.rb +44 -0
- data/lib/axlsx/util/serialized_attributes.rb +89 -0
- data/lib/axlsx/util/simple_typed_list.rb +179 -0
- data/lib/axlsx/util/storage.rb +146 -0
- data/lib/axlsx/util/string.rb +7 -0
- data/lib/axlsx/util/validators.rb +307 -0
- data/lib/axlsx/version.rb +5 -0
- data/lib/axlsx/workbook/defined_name.rb +128 -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 +361 -0
- data/lib/axlsx/workbook/workbook_view.rb +78 -0
- data/lib/axlsx/workbook/workbook_views.rb +22 -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 +244 -0
- data/lib/axlsx/workbook/worksheet/break.rb +35 -0
- data/lib/axlsx/workbook/worksheet/cell.rb +471 -0
- data/lib/axlsx/workbook/worksheet/cell_serializer.rb +154 -0
- data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -0
- data/lib/axlsx/workbook/worksheet/cfvos.rb +15 -0
- data/lib/axlsx/workbook/worksheet/col.rb +141 -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 +91 -0
- data/lib/axlsx/workbook/worksheet/comments.rb +82 -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 +129 -0
- data/lib/axlsx/workbook/worksheet/data_validation.rb +246 -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 +52 -0
- data/lib/axlsx/workbook/worksheet/icon_set.rb +81 -0
- data/lib/axlsx/workbook/worksheet/merged_cells.rb +35 -0
- data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -0
- data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -0
- data/lib/axlsx/workbook/worksheet/page_setup.rb +240 -0
- data/lib/axlsx/workbook/worksheet/pane.rb +139 -0
- data/lib/axlsx/workbook/worksheet/pivot_table.rb +266 -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 +39 -0
- data/lib/axlsx/workbook/worksheet/protected_range.rb +47 -0
- data/lib/axlsx/workbook/worksheet/protected_ranges.rb +34 -0
- data/lib/axlsx/workbook/worksheet/rich_text.rb +35 -0
- data/lib/axlsx/workbook/worksheet/rich_text_run.rb +254 -0
- data/lib/axlsx/workbook/worksheet/row.rb +154 -0
- data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -0
- data/lib/axlsx/workbook/worksheet/selection.rb +101 -0
- data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -0
- data/lib/axlsx/workbook/worksheet/sheet_data.rb +27 -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 +118 -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 +49 -0
- data/lib/axlsx/workbook/worksheet/tables.rb +31 -0
- data/lib/axlsx/workbook/worksheet/worksheet.rb +798 -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 +112 -0
- data/test/drawing/tc_bar_3D_chart.rb +71 -0
- data/test/drawing/tc_bar_series.rb +37 -0
- data/test/drawing/tc_bubble_chart.rb +44 -0
- data/test/drawing/tc_bubble_series.rb +21 -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 +23 -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 +38 -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 +233 -0
- data/test/util/tc_serialized_attributes.rb +19 -0
- data/test/util/tc_simple_typed_list.rb +77 -0
- data/test/util/tc_validators.rb +186 -0
- data/test/workbook/tc_defined_name.rb +49 -0
- data/test/workbook/tc_shared_strings_table.rb +44 -0
- data/test/workbook/tc_workbook.rb +139 -0
- data/test/workbook/tc_workbook_view.rb +50 -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 +345 -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_rich_text.rb +44 -0
- data/test/workbook/worksheet/tc_rich_text_run.rb +172 -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 +563 -0
- data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +55 -0
- metadata +583 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
module Axlsx
|
|
3
|
+
|
|
4
|
+
# A BubbleSeries defines the x/y position and bubble size of data in the chart
|
|
5
|
+
# @note The recommended way to manage series is to use Chart#add_series
|
|
6
|
+
# @see Worksheet#add_chart
|
|
7
|
+
# @see Chart#add_series
|
|
8
|
+
# @see examples/example.rb
|
|
9
|
+
class BubbleSeries < Series
|
|
10
|
+
|
|
11
|
+
# The x data for this series.
|
|
12
|
+
# @return [AxDataSource]
|
|
13
|
+
attr_reader :xData
|
|
14
|
+
|
|
15
|
+
# The y data for this series.
|
|
16
|
+
# @return [NumDataSource]
|
|
17
|
+
attr_reader :yData
|
|
18
|
+
|
|
19
|
+
# The bubble size for this series.
|
|
20
|
+
# @return [NumDataSource]
|
|
21
|
+
attr_reader :bubbleSize
|
|
22
|
+
|
|
23
|
+
# The fill color for this series.
|
|
24
|
+
# Red, green, and blue is expressed as sequence of hex digits, RRGGBB. A perceptual gamma of 2.2 is used.
|
|
25
|
+
# @return [String]
|
|
26
|
+
attr_reader :color
|
|
27
|
+
|
|
28
|
+
# Creates a new BubbleSeries
|
|
29
|
+
def initialize(chart, options={})
|
|
30
|
+
@xData, @yData, @bubbleSize = nil
|
|
31
|
+
super(chart, options)
|
|
32
|
+
@xData = AxDataSource.new(:tag_name => :xVal, :data => options[:xData]) unless options[:xData].nil?
|
|
33
|
+
@yData = NumDataSource.new({:tag_name => :yVal, :data => options[:yData]}) unless options[:yData].nil?
|
|
34
|
+
@bubbleSize = NumDataSource.new({:tag_name => :bubbleSize, :data => options[:bubbleSize]}) unless options[:bubbleSize].nil?
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# @see color
|
|
38
|
+
def color=(v)
|
|
39
|
+
@color = v
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Serializes the object
|
|
43
|
+
# @param [String] str
|
|
44
|
+
# @return [String]
|
|
45
|
+
def to_xml_string(str = '')
|
|
46
|
+
super(str) do
|
|
47
|
+
# needs to override the super color here to push in ln/and something else!
|
|
48
|
+
if color
|
|
49
|
+
str << '<c:spPr><a:solidFill>'
|
|
50
|
+
str << ('<a:srgbClr val="' << color << '"/>')
|
|
51
|
+
str << '</a:solidFill>'
|
|
52
|
+
str << '<a:ln><a:solidFill>'
|
|
53
|
+
str << ('<a:srgbClr val="' << color << '"/></a:solidFill></a:ln>')
|
|
54
|
+
str << '</c:spPr>'
|
|
55
|
+
end
|
|
56
|
+
@xData.to_xml_string(str) unless @xData.nil?
|
|
57
|
+
@yData.to_xml_string(str) unless @yData.nil?
|
|
58
|
+
@bubbleSize.to_xml_string(str) unless @bubbleSize.nil?
|
|
59
|
+
end
|
|
60
|
+
str
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
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
|
|
@@ -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 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
|