axlsx-alt 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.yardopts +9 -0
- data/.yardopts_guide +19 -0
- data/CHANGELOG.md +244 -0
- data/LICENSE +22 -0
- data/README.md +180 -0
- data/Rakefile +29 -0
- data/examples/2010_comments.rb +17 -0
- data/examples/anchor_swapping.rb +28 -0
- data/examples/auto_filter.rb +25 -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 +89 -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 +67 -0
- data/examples/example.rb +885 -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 +171 -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/area_chart.rb +99 -0
- data/lib/axlsx/drawing/area_series.rb +110 -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_chart.rb +143 -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 +276 -0
- data/lib/axlsx/drawing/d_lbls.rb +90 -0
- data/lib/axlsx/drawing/drawing.rb +167 -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 +110 -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 +34 -0
- data/lib/axlsx/drawing/one_cell_anchor.rb +99 -0
- data/lib/axlsx/drawing/pic.rb +211 -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 +98 -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 +34 -0
- data/lib/axlsx/drawing/title.rb +96 -0
- data/lib/axlsx/drawing/two_cell_anchor.rb +97 -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 +358 -0
- data/lib/axlsx/rels/relationship.rb +137 -0
- data/lib/axlsx/rels/relationships.rb +32 -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 +86 -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 +400 -0
- data/lib/axlsx/util/mime_type_utils.rb +11 -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/validators.rb +312 -0
- data/lib/axlsx/version.rb +3 -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 +379 -0
- data/lib/axlsx/workbook/workbook_view.rb +80 -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 +478 -0
- data/lib/axlsx/workbook/worksheet/cell_serializer.rb +164 -0
- data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -0
- data/lib/axlsx/workbook/worksheet/cfvos.rb +18 -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 +23 -0
- data/lib/axlsx/workbook/worksheet/comment.rb +90 -0
- data/lib/axlsx/workbook/worksheet/comments.rb +97 -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 +37 -0
- data/lib/axlsx/workbook/worksheet/outline_pr.rb +33 -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 +289 -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 +37 -0
- data/lib/axlsx/workbook/worksheet/rich_text.rb +55 -0
- data/lib/axlsx/workbook/worksheet/rich_text_run.rb +250 -0
- data/lib/axlsx/workbook/worksheet/row.rb +161 -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 +87 -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 +34 -0
- data/lib/axlsx/workbook/worksheet/worksheet.rb +756 -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_area_chart.rb +39 -0
- data/test/drawing/tc_area_series.rb +71 -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_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 +123 -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 +71 -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 +103 -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 +56 -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 +30 -0
- data/test/drawing/tc_title.rb +54 -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 +103 -0
- data/test/tc_helper.rb +12 -0
- data/test/tc_package.rb +245 -0
- data/test/util/tc_mime_type_utils.rb +13 -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 +210 -0
- data/test/workbook/tc_defined_name.rb +49 -0
- data/test/workbook/tc_shared_strings_table.rb +59 -0
- data/test/workbook/tc_workbook.rb +160 -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 +387 -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_outline_pr.rb +19 -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 +135 -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 +122 -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 +49 -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 +67 -0
- data/test/workbook/worksheet/tc_table_style_info.rb +53 -0
- data/test/workbook/worksheet/tc_worksheet.rb +597 -0
- data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +55 -0
- metadata +601 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
module Axlsx
|
|
3
|
+
# A relationship defines a reference between package parts.
|
|
4
|
+
# @note Packages automatically manage relationships.
|
|
5
|
+
class Relationship
|
|
6
|
+
|
|
7
|
+
class << self
|
|
8
|
+
# Keeps track of all instances of this class.
|
|
9
|
+
# @return [Array]
|
|
10
|
+
def instances
|
|
11
|
+
Thread.current[:axlsx_relationship_cached_instances] ||= []
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Initialize cached instances.
|
|
15
|
+
#
|
|
16
|
+
# This should be called before serializing a package (see {Package#serialize} and
|
|
17
|
+
# {Package#to_stream}) to make sure that serialization is idempotent (i.e.
|
|
18
|
+
# Relationship instances are generated with the same IDs everytime the package
|
|
19
|
+
# is serialized).
|
|
20
|
+
def initialize_cached_instances
|
|
21
|
+
Thread.current[:axlsx_relationship_cached_instances] = []
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Clear cached instances.
|
|
25
|
+
#
|
|
26
|
+
# This should be called after serializing a package (see {Package#serialize} and
|
|
27
|
+
# {Package#to_stream}) to free the memory allocated for cache.
|
|
28
|
+
#
|
|
29
|
+
# Also, calling this avoids memory leaks (cached instances lingering around
|
|
30
|
+
# forever).
|
|
31
|
+
def clear_cached_instances
|
|
32
|
+
Thread.current[:axlsx_relationship_cached_instances] = nil
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Generate and return a unique id (eg. `rId123`) Used for setting {#Id}.
|
|
36
|
+
#
|
|
37
|
+
# The generated id depends on the number of cached instances, so using
|
|
38
|
+
# {clear_cached_instances} will automatically reset the generated ids, too.
|
|
39
|
+
# @return [String]
|
|
40
|
+
def next_free_id
|
|
41
|
+
"rId#{instances.size + 1}"
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# The id of the relationship (eg. "rId123"). Most instances get their own unique id.
|
|
46
|
+
# However, some instances need to share the same id – see {#should_use_same_id_as?}
|
|
47
|
+
# for details.
|
|
48
|
+
# @return [String]
|
|
49
|
+
attr_reader :Id
|
|
50
|
+
|
|
51
|
+
# The location of the relationship target
|
|
52
|
+
# @return [String]
|
|
53
|
+
attr_reader :Target
|
|
54
|
+
|
|
55
|
+
# The type of relationship
|
|
56
|
+
# @note Supported types are defined as constants in Axlsx:
|
|
57
|
+
# @see XML_NS_R
|
|
58
|
+
# @see TABLE_R
|
|
59
|
+
# @see PIVOT_TABLE_R
|
|
60
|
+
# @see WORKBOOK_R
|
|
61
|
+
# @see WORKSHEET_R
|
|
62
|
+
# @see APP_R
|
|
63
|
+
# @see RELS_R
|
|
64
|
+
# @see CORE_R
|
|
65
|
+
# @see STYLES_R
|
|
66
|
+
# @see CHART_R
|
|
67
|
+
# @see DRAWING_R
|
|
68
|
+
# @return [String]
|
|
69
|
+
attr_reader :Type
|
|
70
|
+
|
|
71
|
+
# The target mode of the relationship
|
|
72
|
+
# used for hyperlink type relationships to mark the relationship to an external resource
|
|
73
|
+
# TargetMode can be specified during initialization by passing in a :target_mode option
|
|
74
|
+
# Target mode must be :external for now.
|
|
75
|
+
attr_reader :TargetMode
|
|
76
|
+
|
|
77
|
+
# The source object the relations belongs to (e.g. a hyperlink, drawing, ...). Needed when
|
|
78
|
+
# looking up the relationship for a specific object (see {Relationships#for}).
|
|
79
|
+
attr_reader :source_obj
|
|
80
|
+
|
|
81
|
+
# Initializes a new relationship.
|
|
82
|
+
# @param [Object] source_obj see {#source_obj}
|
|
83
|
+
# @param [String] type The type of the relationship
|
|
84
|
+
# @param [String] target The target for the relationship
|
|
85
|
+
# @option [Symbol] :target_mode only accepts :external.
|
|
86
|
+
def initialize(source_obj, type, target, options={})
|
|
87
|
+
@source_obj = source_obj
|
|
88
|
+
self.Target=target
|
|
89
|
+
self.Type=type
|
|
90
|
+
self.TargetMode = options[:target_mode] if options[:target_mode]
|
|
91
|
+
@Id = if (existing = self.class.instances.find{ |i| should_use_same_id_as?(i) })
|
|
92
|
+
existing.Id
|
|
93
|
+
else
|
|
94
|
+
self.class.next_free_id
|
|
95
|
+
end
|
|
96
|
+
self.class.instances << self
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# @see Target
|
|
100
|
+
def Target=(v) Axlsx::validate_string v; @Target = v end
|
|
101
|
+
# @see Type
|
|
102
|
+
def Type=(v) Axlsx::validate_relationship_type v; @Type = v end
|
|
103
|
+
|
|
104
|
+
# @see TargetMode
|
|
105
|
+
def TargetMode=(v) RestrictionValidator.validate 'Relationship.TargetMode', [:External, :Internal], v; @TargetMode = v; end
|
|
106
|
+
|
|
107
|
+
# serialize relationship
|
|
108
|
+
# @param [String] str
|
|
109
|
+
# @return [String]
|
|
110
|
+
def to_xml_string(str = '')
|
|
111
|
+
h = self.instance_values.reject{|k, _| k == "source_obj"}
|
|
112
|
+
str << '<Relationship '
|
|
113
|
+
str << (h.map { |key, value| '' << key.to_s << '="' << Axlsx::coder.encode(value.to_s) << '"'}.join(' '))
|
|
114
|
+
str << '/>'
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# Whether this relationship should use the same id as `other`.
|
|
118
|
+
#
|
|
119
|
+
# Instances designating the same relationship need to use the same id. We can not simply
|
|
120
|
+
# compare the {#Target} attribute, though: `foo/bar.xml`, `../foo/bar.xml`,
|
|
121
|
+
# `../../foo/bar.xml` etc. are all different but probably mean the same file (this
|
|
122
|
+
# is especially an issue for relationships in the context of pivot tables). So lets
|
|
123
|
+
# just ignore this attribute for now (except when {#TargetMode} is set to `:External` –
|
|
124
|
+
# then {#Target} will be an absolute URL and thus can safely be compared).
|
|
125
|
+
#
|
|
126
|
+
# @todo Implement comparison of {#Target} based on normalized path names.
|
|
127
|
+
# @param other [Relationship]
|
|
128
|
+
def should_use_same_id_as?(other)
|
|
129
|
+
result = self.source_obj == other.source_obj && self.Type == other.Type && self.TargetMode == other.TargetMode
|
|
130
|
+
if self.TargetMode == :External
|
|
131
|
+
result &&= self.Target == other.Target
|
|
132
|
+
end
|
|
133
|
+
result
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
end
|
|
137
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
module Axlsx
|
|
3
|
+
require 'axlsx/rels/relationship.rb'
|
|
4
|
+
|
|
5
|
+
# Relationships are a collection of Relations that define how package parts are related.
|
|
6
|
+
# @note The package automatically manages releationships.
|
|
7
|
+
class Relationships < SimpleTypedList
|
|
8
|
+
|
|
9
|
+
# Creates a new Relationships collection based on SimpleTypedList
|
|
10
|
+
def initialize
|
|
11
|
+
super Relationship
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# The relationship instance for the given source object, or nil if none exists.
|
|
15
|
+
# @see Relationship#source_obj
|
|
16
|
+
# @return [Relationship]
|
|
17
|
+
def for(source_obj)
|
|
18
|
+
find{ |rel| rel.source_obj == source_obj }
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# serialize relationships
|
|
22
|
+
# @param [String] str
|
|
23
|
+
# @return [String]
|
|
24
|
+
def to_xml_string(str = '')
|
|
25
|
+
str << '<?xml version="1.0" encoding="UTF-8"?>'
|
|
26
|
+
str << ('<Relationships xmlns="' << RELS_R << '">')
|
|
27
|
+
each{ |rel| rel.to_xml_string(str) }
|
|
28
|
+
str << '</Relationships>'
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
module Axlsx
|
|
3
|
+
# This class details a border used in Office Open XML spreadsheet styles.
|
|
4
|
+
class Border
|
|
5
|
+
|
|
6
|
+
include Axlsx::SerializedAttributes
|
|
7
|
+
include Axlsx::OptionsParser
|
|
8
|
+
|
|
9
|
+
# Creates a new Border object
|
|
10
|
+
# @option options [Boolean] diagonal_up
|
|
11
|
+
# @option options [Boolean] diagonal_down
|
|
12
|
+
# @option options [Boolean] outline
|
|
13
|
+
# @example - Making a border
|
|
14
|
+
# p = Axlsx::Package.new
|
|
15
|
+
# red_border = p.workbook.styles.add_style :border => { :style => :thin, :color => "FFFF0000" }
|
|
16
|
+
# ws = p.workbook.add_worksheet
|
|
17
|
+
# ws.add_row [1,2,3], :style => red_border
|
|
18
|
+
# p.serialize('red_border.xlsx')
|
|
19
|
+
#
|
|
20
|
+
# @note The recommended way to manage borders is with Style#add_style
|
|
21
|
+
# @see Style#add_style
|
|
22
|
+
def initialize(options={})
|
|
23
|
+
@prs = SimpleTypedList.new BorderPr
|
|
24
|
+
parse_options options
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
serializable_attributes :diagonal_up, :diagonal_down, :outline
|
|
28
|
+
|
|
29
|
+
# @return [Boolean] The diagonal up property for the border that indicates if the border should include a diagonal line from the bottom left to the top right of the cell.
|
|
30
|
+
attr_reader :diagonal_up
|
|
31
|
+
alias :diagonalUp :diagonal_up
|
|
32
|
+
|
|
33
|
+
# @return [Boolean] The diagonal down property for the border that indicates if the border should include a diagonal line from the top left to the top right of the cell.
|
|
34
|
+
attr_reader :diagonal_down
|
|
35
|
+
alias :diagonalDown :diagonal_down
|
|
36
|
+
|
|
37
|
+
# @return [Boolean] The outline property for the border indicating that top, left, right and bottom borders should only be applied to the outside border of a range of cells.
|
|
38
|
+
attr_reader :outline
|
|
39
|
+
|
|
40
|
+
# @return [SimpleTypedList] A list of BorderPr objects for this border.
|
|
41
|
+
attr_reader :prs
|
|
42
|
+
|
|
43
|
+
# @see diagonalUp
|
|
44
|
+
def diagonal_up=(v) Axlsx::validate_boolean v; @diagonal_up = v end
|
|
45
|
+
alias :diagonalUp= :diagonal_up=
|
|
46
|
+
|
|
47
|
+
# @see diagonalDown
|
|
48
|
+
def diagonal_down=(v) Axlsx::validate_boolean v; @diagonal_down = v end
|
|
49
|
+
alias :diagonalDown= :diagonal_down=
|
|
50
|
+
|
|
51
|
+
# @see outline
|
|
52
|
+
def outline=(v) Axlsx::validate_boolean v; @outline = v end
|
|
53
|
+
|
|
54
|
+
# Serializes the object
|
|
55
|
+
# @param [String] str
|
|
56
|
+
# @return [String]
|
|
57
|
+
def to_xml_string(str = '')
|
|
58
|
+
str << '<border '
|
|
59
|
+
serialized_attributes str
|
|
60
|
+
str << '>'
|
|
61
|
+
# enforces order
|
|
62
|
+
[:start, :end, :left, :right, :top, :bottom, :diagonal, :vertical, :horizontal].each do |k|
|
|
63
|
+
@prs.select { |pr| pr.name == k }.each do |part|
|
|
64
|
+
part.to_xml_string(str)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
str << '</border>'
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
module Axlsx
|
|
3
|
+
# A border part.
|
|
4
|
+
class BorderPr
|
|
5
|
+
include Axlsx::OptionsParser
|
|
6
|
+
# @return [Color] The color of this border part.
|
|
7
|
+
attr_reader :color
|
|
8
|
+
|
|
9
|
+
# @return [Symbol] The syle of this border part.
|
|
10
|
+
# @note
|
|
11
|
+
# The following are allowed
|
|
12
|
+
# :none
|
|
13
|
+
# :thin
|
|
14
|
+
# :medium
|
|
15
|
+
# :dashed
|
|
16
|
+
# :dotted
|
|
17
|
+
# :thick
|
|
18
|
+
# :double
|
|
19
|
+
# :hair
|
|
20
|
+
# :mediumDashed
|
|
21
|
+
# :dashDot
|
|
22
|
+
# :mediumDashDot
|
|
23
|
+
# :dashDotDot
|
|
24
|
+
# :mediumDashDotDot
|
|
25
|
+
# :slantDashDot
|
|
26
|
+
attr_reader :style
|
|
27
|
+
|
|
28
|
+
# @return [Symbol] The name of this border part
|
|
29
|
+
# @note
|
|
30
|
+
# The following are allowed
|
|
31
|
+
# :start
|
|
32
|
+
# :end
|
|
33
|
+
# :left
|
|
34
|
+
# :right
|
|
35
|
+
# :top
|
|
36
|
+
# :bottom
|
|
37
|
+
# :diagonal
|
|
38
|
+
# :vertical
|
|
39
|
+
# :horizontal
|
|
40
|
+
attr_reader :name
|
|
41
|
+
|
|
42
|
+
# Creates a new Border Part Object
|
|
43
|
+
# @option options [Color] color
|
|
44
|
+
# @option options [Symbol] name
|
|
45
|
+
# @option options [Symbol] style
|
|
46
|
+
# @see Axlsx::Border
|
|
47
|
+
def initialize(options={})
|
|
48
|
+
parse_options(options)
|
|
49
|
+
#options.each do |o|
|
|
50
|
+
# self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
|
|
51
|
+
#end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# @see name
|
|
55
|
+
def name=(v) RestrictionValidator.validate "BorderPr.name", [:start, :end, :left, :right, :top, :bottom, :diagonal, :vertical, :horizontal], v; @name = v end
|
|
56
|
+
# @see color
|
|
57
|
+
def color=(v) DataTypeValidator.validate(:color, Color, v); @color = v end
|
|
58
|
+
# @see style
|
|
59
|
+
def style=(v) RestrictionValidator.validate "BorderPr.style", [:none, :thin, :medium, :dashed, :dotted, :thick, :double, :hair, :mediumDashed, :dashDot, :mediumDashDot, :dashDotDot, :mediumDashDotDot, :slantDashDot], v; @style = v end
|
|
60
|
+
|
|
61
|
+
# Serializes the object
|
|
62
|
+
# @param [String] str
|
|
63
|
+
# @return [String]
|
|
64
|
+
def to_xml_string(str = '')
|
|
65
|
+
str << ('<' << @name.to_s << ' style="' << @style.to_s << '">')
|
|
66
|
+
@color.to_xml_string(str) if @color.is_a?(Color)
|
|
67
|
+
str << ('</' << @name.to_s << '>')
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
module Axlsx
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
# CellAlignment stores information about the cell alignment of a style Xf Object.
|
|
6
|
+
# @note Using Styles#add_style is the recommended way to manage cell alignment.
|
|
7
|
+
# @see Styles#add_style
|
|
8
|
+
class CellAlignment
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
include Axlsx::SerializedAttributes
|
|
12
|
+
include Axlsx::OptionsParser
|
|
13
|
+
|
|
14
|
+
serializable_attributes :horizontal, :vertical, :text_rotation, :wrap_text, :indent, :relative_indent, :justify_last_line, :shrink_to_fit, :reading_order
|
|
15
|
+
# Create a new cell_alignment object
|
|
16
|
+
# @option options [Symbol] horizontal
|
|
17
|
+
# @option options [Symbol] vertical
|
|
18
|
+
# @option options [Integer] text_rotation
|
|
19
|
+
# @option options [Boolean] wrap_text
|
|
20
|
+
# @option options [Integer] indent
|
|
21
|
+
# @option options [Integer] relative_indent
|
|
22
|
+
# @option options [Boolean] justify_last_line
|
|
23
|
+
# @option options [Boolean] shrink_to_fit
|
|
24
|
+
# @option options [Integer] reading_order
|
|
25
|
+
def initialize(options={})
|
|
26
|
+
parse_options options
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
# The horizontal alignment of the cell.
|
|
32
|
+
# @note
|
|
33
|
+
# The horizontal cell alignement style must be one of
|
|
34
|
+
# :general
|
|
35
|
+
# :left
|
|
36
|
+
# :center
|
|
37
|
+
# :right
|
|
38
|
+
# :fill
|
|
39
|
+
# :justify
|
|
40
|
+
# :centerContinuous
|
|
41
|
+
# :distributed
|
|
42
|
+
# @return [Symbol]
|
|
43
|
+
attr_reader :horizontal
|
|
44
|
+
|
|
45
|
+
# The vertical alignment of the cell.
|
|
46
|
+
# @note
|
|
47
|
+
# The vertical cell allingment style must be one of the following:
|
|
48
|
+
# :top
|
|
49
|
+
# :center
|
|
50
|
+
# :bottom
|
|
51
|
+
# :justify
|
|
52
|
+
# :distributed
|
|
53
|
+
# @return [Symbol]
|
|
54
|
+
attr_reader :vertical
|
|
55
|
+
|
|
56
|
+
# The textRotation of the cell.
|
|
57
|
+
# @return [Integer]
|
|
58
|
+
attr_reader :text_rotation
|
|
59
|
+
alias :textRotation :text_rotation
|
|
60
|
+
|
|
61
|
+
# Indicate if the text of the cell should wrap
|
|
62
|
+
# @return [Boolean]
|
|
63
|
+
attr_reader :wrap_text
|
|
64
|
+
alias :wrapText :wrap_text
|
|
65
|
+
|
|
66
|
+
# The amount of indent
|
|
67
|
+
# @return [Integer]
|
|
68
|
+
attr_reader :indent
|
|
69
|
+
|
|
70
|
+
# The amount of relativeIndent
|
|
71
|
+
# @return [Integer]
|
|
72
|
+
attr_reader :relative_indent
|
|
73
|
+
alias :relativeIndent :relative_indent
|
|
74
|
+
|
|
75
|
+
# Indicate if the last line should be justified.
|
|
76
|
+
# @return [Boolean]
|
|
77
|
+
attr_reader :justify_last_line
|
|
78
|
+
alias :justifyLastLine :justify_last_line
|
|
79
|
+
|
|
80
|
+
# Indicate if the text should be shrunk to the fit in the cell.
|
|
81
|
+
# @return [Boolean]
|
|
82
|
+
attr_reader :shrink_to_fit
|
|
83
|
+
alias :shrinkToFit :shrink_to_fit
|
|
84
|
+
|
|
85
|
+
# The reading order of the text
|
|
86
|
+
# 0 Context Dependent
|
|
87
|
+
# 1 Left-to-Right
|
|
88
|
+
# 2 Right-to-Left
|
|
89
|
+
# @return [Integer]
|
|
90
|
+
attr_reader :reading_order
|
|
91
|
+
alias :readingOrder :reading_order
|
|
92
|
+
|
|
93
|
+
# @see horizontal
|
|
94
|
+
def horizontal=(v) Axlsx::validate_horizontal_alignment v; @horizontal = v end
|
|
95
|
+
# @see vertical
|
|
96
|
+
def vertical=(v) Axlsx::validate_vertical_alignment v; @vertical = v end
|
|
97
|
+
# @see textRotation
|
|
98
|
+
def text_rotation=(v) Axlsx::validate_unsigned_int v; @text_rotation = v end
|
|
99
|
+
alias :textRotation= :text_rotation=
|
|
100
|
+
|
|
101
|
+
# @see wrapText
|
|
102
|
+
def wrap_text=(v) Axlsx::validate_boolean v; @wrap_text = v end
|
|
103
|
+
alias :wrapText= :wrap_text=
|
|
104
|
+
|
|
105
|
+
# @see indent
|
|
106
|
+
def indent=(v) Axlsx::validate_unsigned_int v; @indent = v end
|
|
107
|
+
|
|
108
|
+
# @see relativeIndent
|
|
109
|
+
def relative_indent=(v) Axlsx::validate_int v; @relative_indent = v end
|
|
110
|
+
alias :relativeIndent= :relative_indent=
|
|
111
|
+
|
|
112
|
+
# @see justifyLastLine
|
|
113
|
+
def justify_last_line=(v) Axlsx::validate_boolean v; @justify_last_line = v end
|
|
114
|
+
alias :justifyLastLine= :justify_last_line=
|
|
115
|
+
|
|
116
|
+
# @see shrinkToFit
|
|
117
|
+
def shrink_to_fit=(v) Axlsx::validate_boolean v; @shrink_to_fit = v end
|
|
118
|
+
alias :shrinkToFit= :shrink_to_fit=
|
|
119
|
+
|
|
120
|
+
# @see readingOrder
|
|
121
|
+
def reading_order=(v) Axlsx::validate_unsigned_int v; @reading_order = v end
|
|
122
|
+
alias :readingOrder= :reading_order=
|
|
123
|
+
|
|
124
|
+
# Serializes the object
|
|
125
|
+
# @param [String] str
|
|
126
|
+
# @return [String]
|
|
127
|
+
def to_xml_string(str = '')
|
|
128
|
+
serialized_tag('alignment', str)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
end
|
|
132
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
module Axlsx
|
|
3
|
+
# CellProtection stores information about locking or hiding cells in spreadsheet.
|
|
4
|
+
# @note Using Styles#add_style is the recommended way to manage cell protection.
|
|
5
|
+
# @see Styles#add_style
|
|
6
|
+
class CellProtection
|
|
7
|
+
|
|
8
|
+
include Axlsx::OptionsParser
|
|
9
|
+
include Axlsx::SerializedAttributes
|
|
10
|
+
|
|
11
|
+
serializable_attributes :hidden, :locked
|
|
12
|
+
|
|
13
|
+
# specifies locking for cells that have the style containing this protection
|
|
14
|
+
# @return [Boolean]
|
|
15
|
+
attr_reader :hidden
|
|
16
|
+
|
|
17
|
+
# specifies if the cells that have the style containing this protection
|
|
18
|
+
# @return [Boolean]
|
|
19
|
+
attr_reader :locked
|
|
20
|
+
|
|
21
|
+
# Creates a new CellProtection
|
|
22
|
+
# @option options [Boolean] hidden value for hidden protection
|
|
23
|
+
# @option options [Boolean] locked value for locked protection
|
|
24
|
+
def initialize(options={})
|
|
25
|
+
parse_options options
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# @see hidden
|
|
29
|
+
def hidden=(v) Axlsx::validate_boolean v; @hidden = v end
|
|
30
|
+
# @see locked
|
|
31
|
+
def locked=(v) Axlsx::validate_boolean v; @locked = v end
|
|
32
|
+
|
|
33
|
+
# Serializes the object
|
|
34
|
+
# @param [String] str
|
|
35
|
+
# @return [String]
|
|
36
|
+
def to_xml_string(str = '')
|
|
37
|
+
serialized_tag('protection', str)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
end
|