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,141 @@
|
|
|
1
|
+
module Axlsx
|
|
2
|
+
# Pane options for a worksheet.
|
|
3
|
+
#
|
|
4
|
+
# @note The recommended way to manage the pane options is via SheetView#pane
|
|
5
|
+
# @see SheetView#pane
|
|
6
|
+
class Pane
|
|
7
|
+
|
|
8
|
+
include Axlsx::OptionsParser
|
|
9
|
+
include Axlsx::SerializedAttributes
|
|
10
|
+
# Creates a new {Pane} object
|
|
11
|
+
# @option options [Symbol] active_pane Active Pane
|
|
12
|
+
# @option options [Symbol] state Split State
|
|
13
|
+
# @option options [Cell, String] top_left_cell Top Left Visible Cell
|
|
14
|
+
# @option options [Integer] x_split Horizontal Split Position
|
|
15
|
+
# @option options [Integer] y_split Vertical Split Position
|
|
16
|
+
def initialize(options={})
|
|
17
|
+
#defaults
|
|
18
|
+
@active_pane = @state = @top_left_cell = nil
|
|
19
|
+
@x_split = @y_split = 0
|
|
20
|
+
parse_options options
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
serializable_attributes :active_pane, :state, :top_left_cell, :x_split, :y_split
|
|
24
|
+
|
|
25
|
+
# Active Pane
|
|
26
|
+
# The pane that is active.
|
|
27
|
+
# Options are
|
|
28
|
+
# * bottom_left: Bottom left pane, when both vertical and horizontal
|
|
29
|
+
# splits are applied. This value is also used when only
|
|
30
|
+
# a horizontal split has been applied, dividing the pane
|
|
31
|
+
# into upper and lower regions. In that case, this value
|
|
32
|
+
# specifies the bottom pane.
|
|
33
|
+
# * bottom_right: Bottom right pane, when both vertical and horizontal
|
|
34
|
+
# splits are applied.
|
|
35
|
+
# * top_left: Top left pane, when both vertical and horizontal splits
|
|
36
|
+
# are applied. This value is also used when only a horizontal
|
|
37
|
+
# split has been applied, dividing the pane into upper and lower
|
|
38
|
+
# regions. In that case, this value specifies the top pane.
|
|
39
|
+
# This value is also used when only a vertical split has
|
|
40
|
+
# been applied, dividing the pane into right and left
|
|
41
|
+
# regions. In that case, this value specifies the left pane
|
|
42
|
+
# * top_right: Top right pane, when both vertical and horizontal
|
|
43
|
+
# splits are applied. This value is also used when only
|
|
44
|
+
# a vertical split has been applied, dividing the pane
|
|
45
|
+
# into right and left regions. In that case, this value
|
|
46
|
+
# specifies the right pane.
|
|
47
|
+
# @see type
|
|
48
|
+
# @return [Symbol]
|
|
49
|
+
# default nil
|
|
50
|
+
attr_reader :active_pane
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
# Split State
|
|
54
|
+
# Indicates whether the pane has horizontal / vertical
|
|
55
|
+
# splits, and whether those splits are frozen.
|
|
56
|
+
# Options are
|
|
57
|
+
# * frozen: Panes are frozen, but were not split being frozen. In
|
|
58
|
+
# this state, when the panes are unfrozen again, a single
|
|
59
|
+
# pane results, with no split. In this state, the split
|
|
60
|
+
# bars are not adjustable.
|
|
61
|
+
# * frozen_split: Panes are frozen and were split before being frozen. In
|
|
62
|
+
# this state, when the panes are unfrozen again, the split
|
|
63
|
+
# remains, but is adjustable.
|
|
64
|
+
# * split: Panes are split, but not frozen. In this state, the split
|
|
65
|
+
# bars are adjustable by the user.
|
|
66
|
+
# @see type
|
|
67
|
+
# @return [Symbol]
|
|
68
|
+
# default nil
|
|
69
|
+
attr_reader :state
|
|
70
|
+
|
|
71
|
+
# Top Left Visible Cell
|
|
72
|
+
# Location of the top left visible cell in the bottom
|
|
73
|
+
# right pane (when in Left-To-Right mode).
|
|
74
|
+
# @see type
|
|
75
|
+
# @return [String]
|
|
76
|
+
# default nil
|
|
77
|
+
attr_reader :top_left_cell
|
|
78
|
+
|
|
79
|
+
# Horizontal Split Position
|
|
80
|
+
# Horizontal position of the split, in 1/20th of a point; 0 (zero)
|
|
81
|
+
# if none. If the pane is frozen, this value indicates the number
|
|
82
|
+
# of columns visible in the top pane.
|
|
83
|
+
# @see type
|
|
84
|
+
# @return [Integer]
|
|
85
|
+
# default 0
|
|
86
|
+
attr_reader :x_split
|
|
87
|
+
|
|
88
|
+
# Vertical Split Position
|
|
89
|
+
# Vertical position of the split, in 1/20th of a point; 0 (zero)
|
|
90
|
+
# if none. If the pane is frozen, this value indicates the number
|
|
91
|
+
# of rows visible in the left pane.
|
|
92
|
+
# @see type
|
|
93
|
+
# @return [Integer]
|
|
94
|
+
# default 0
|
|
95
|
+
attr_reader :y_split
|
|
96
|
+
|
|
97
|
+
# @see active_pane
|
|
98
|
+
def active_pane=(v)
|
|
99
|
+
Axlsx::validate_pane_type(v)
|
|
100
|
+
@active_pane = Axlsx::camel(v.to_s, false)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# @see state
|
|
104
|
+
def state=(v)
|
|
105
|
+
Axlsx::validate_split_state_type(v)
|
|
106
|
+
@state = Axlsx::camel(v.to_s, false)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# @see top_left_cell
|
|
110
|
+
def top_left_cell=(v)
|
|
111
|
+
cell = (v.class == Axlsx::Cell ? v.r_abs : v)
|
|
112
|
+
Axlsx::validate_string(cell)
|
|
113
|
+
@top_left_cell = cell
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# @see x_split
|
|
117
|
+
def x_split=(v); Axlsx::validate_unsigned_int(v); @x_split = v end
|
|
118
|
+
|
|
119
|
+
# @see y_split
|
|
120
|
+
def y_split=(v); Axlsx::validate_unsigned_int(v); @y_split = v end
|
|
121
|
+
|
|
122
|
+
# Serializes the data validation
|
|
123
|
+
# @param [String] str
|
|
124
|
+
# @return [String]
|
|
125
|
+
def to_xml_string(str = '')
|
|
126
|
+
finalize
|
|
127
|
+
str << '<pane '
|
|
128
|
+
serialized_attributes str
|
|
129
|
+
str << '/>'
|
|
130
|
+
end
|
|
131
|
+
private
|
|
132
|
+
|
|
133
|
+
def finalize
|
|
134
|
+
if @state == 'frozen' && @top_left_cell.nil?
|
|
135
|
+
row = @y_split || 0
|
|
136
|
+
column = @x_split || 0
|
|
137
|
+
@top_left_cell = "#{('A'..'ZZ').to_a[column]}#{row+1}"
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
end
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
module Axlsx
|
|
3
|
+
# Table
|
|
4
|
+
# @note Worksheet#add_pivot_table is the recommended way to create tables for your worksheets.
|
|
5
|
+
# @see README for examples
|
|
6
|
+
class PivotTable
|
|
7
|
+
|
|
8
|
+
include Axlsx::OptionsParser
|
|
9
|
+
|
|
10
|
+
# Creates a new PivotTable object
|
|
11
|
+
# @param [String] ref The reference to where the pivot table lives like 'G4:L17'.
|
|
12
|
+
# @param [String] range The reference to the pivot table data like 'A1:D31'.
|
|
13
|
+
# @param [Worksheet] sheet The sheet containing the table data.
|
|
14
|
+
# @option options [Cell, String] name
|
|
15
|
+
# @option options [TableStyle] style
|
|
16
|
+
def initialize(ref, range, sheet, options={})
|
|
17
|
+
@ref = ref
|
|
18
|
+
self.range = range
|
|
19
|
+
@sheet = sheet
|
|
20
|
+
@sheet.workbook.pivot_tables << self
|
|
21
|
+
@name = "PivotTable#{index+1}"
|
|
22
|
+
@data_sheet = nil
|
|
23
|
+
@rows = []
|
|
24
|
+
@columns = []
|
|
25
|
+
@data = []
|
|
26
|
+
@pages = []
|
|
27
|
+
@subtotal = nil
|
|
28
|
+
parse_options options
|
|
29
|
+
yield self if block_given?
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# The reference to the table data
|
|
33
|
+
# @return [String]
|
|
34
|
+
attr_reader :ref
|
|
35
|
+
|
|
36
|
+
# The name of the table.
|
|
37
|
+
# @return [String]
|
|
38
|
+
attr_reader :name
|
|
39
|
+
|
|
40
|
+
# The name of the sheet.
|
|
41
|
+
# @return [String]
|
|
42
|
+
attr_reader :sheet
|
|
43
|
+
|
|
44
|
+
# The sheet used as data source for the pivot table
|
|
45
|
+
# @return [Worksheet]
|
|
46
|
+
attr_writer :data_sheet
|
|
47
|
+
|
|
48
|
+
# @see #data_sheet
|
|
49
|
+
def data_sheet
|
|
50
|
+
@data_sheet || @sheet
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# The range where the data for this pivot table lives.
|
|
54
|
+
# @return [String]
|
|
55
|
+
attr_reader :range
|
|
56
|
+
|
|
57
|
+
# (see #range)
|
|
58
|
+
def range=(v)
|
|
59
|
+
DataTypeValidator.validate "#{self.class}.range", [String], v
|
|
60
|
+
if v.is_a?(String)
|
|
61
|
+
@range = v
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# The rows
|
|
66
|
+
# @return [Array]
|
|
67
|
+
attr_reader :rows
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
# (see #rows)
|
|
71
|
+
def rows=(v)
|
|
72
|
+
DataTypeValidator.validate "#{self.class}.rows", [Array], v
|
|
73
|
+
v.each do |ref|
|
|
74
|
+
DataTypeValidator.validate "#{self.class}.rows[]", [String], ref
|
|
75
|
+
end
|
|
76
|
+
@rows = v
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# The columns
|
|
80
|
+
# @return [Array]
|
|
81
|
+
attr_reader :columns
|
|
82
|
+
|
|
83
|
+
# (see #columns)
|
|
84
|
+
def columns=(v)
|
|
85
|
+
DataTypeValidator.validate "#{self.class}.columns", [Array], v
|
|
86
|
+
v.each do |ref|
|
|
87
|
+
DataTypeValidator.validate "#{self.class}.columns[]", [String], ref
|
|
88
|
+
end
|
|
89
|
+
@columns = v
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# The data
|
|
93
|
+
# @return [Array]
|
|
94
|
+
attr_reader :data
|
|
95
|
+
|
|
96
|
+
# (see #data)
|
|
97
|
+
def data=(v)
|
|
98
|
+
DataTypeValidator.validate "#{self.class}.data", [Array], v
|
|
99
|
+
@data = []
|
|
100
|
+
v.each do |data_field|
|
|
101
|
+
if data_field.is_a? String
|
|
102
|
+
data_field = {:ref => data_field}
|
|
103
|
+
end
|
|
104
|
+
data_field.values.each do |value|
|
|
105
|
+
DataTypeValidator.validate "#{self.class}.data[]", [String], value
|
|
106
|
+
end
|
|
107
|
+
@data << data_field
|
|
108
|
+
end
|
|
109
|
+
@data
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# The pages
|
|
113
|
+
# @return [String]
|
|
114
|
+
attr_reader :pages
|
|
115
|
+
|
|
116
|
+
# (see #pages)
|
|
117
|
+
def pages=(v)
|
|
118
|
+
DataTypeValidator.validate "#{self.class}.pages", [Array], v
|
|
119
|
+
v.each do |ref|
|
|
120
|
+
DataTypeValidator.validate "#{self.class}.pages[]", [String], ref
|
|
121
|
+
end
|
|
122
|
+
@pages = v
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# The index of this chart in the workbooks charts collection
|
|
126
|
+
# @return [Integer]
|
|
127
|
+
def index
|
|
128
|
+
@sheet.workbook.pivot_tables.index(self)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# The part name for this table
|
|
132
|
+
# @return [String]
|
|
133
|
+
def pn
|
|
134
|
+
"#{PIVOT_TABLE_PN % (index+1)}"
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
# The relationship part name of this pivot table
|
|
138
|
+
# @return [String]
|
|
139
|
+
def rels_pn
|
|
140
|
+
"#{PIVOT_TABLE_RELS_PN % (index+1)}"
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# The cache_definition for this pivot table
|
|
144
|
+
# @return [PivotTableCacheDefinition]
|
|
145
|
+
def cache_definition
|
|
146
|
+
@cache_definition ||= PivotTableCacheDefinition.new(self)
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# The relationships for this pivot table.
|
|
150
|
+
# @return [Relationships]
|
|
151
|
+
def relationships
|
|
152
|
+
r = Relationships.new
|
|
153
|
+
r << Relationship.new(cache_definition, PIVOT_TABLE_CACHE_DEFINITION_R, "../#{cache_definition.pn}")
|
|
154
|
+
r
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
# Serializes the object
|
|
158
|
+
# @param [String] str
|
|
159
|
+
# @return [String]
|
|
160
|
+
def to_xml_string(str = '')
|
|
161
|
+
str << '<?xml version="1.0" encoding="UTF-8"?>'
|
|
162
|
+
str << '<pivotTableDefinition xmlns="' << XML_NS << '" name="' << name << '" cacheId="' << cache_definition.cache_id.to_s << '" dataOnRows="1" applyNumberFormats="0" applyBorderFormats="0" applyFontFormats="0" applyPatternFormats="0" applyAlignmentFormats="0" applyWidthHeightFormats="1" dataCaption="Data" showMultipleLabel="0" showMemberPropertyTips="0" useAutoFormatting="1" indent="0" compact="0" compactData="0" gridDropZones="1" multipleFieldFilters="0">'
|
|
163
|
+
str << '<location firstDataCol="1" firstDataRow="1" firstHeaderRow="1" ref="' << ref << '"/>'
|
|
164
|
+
str << '<pivotFields count="' << header_cells_count.to_s << '">'
|
|
165
|
+
header_cell_values.each do |cell_value|
|
|
166
|
+
str << pivot_field_for(cell_value)
|
|
167
|
+
end
|
|
168
|
+
str << '</pivotFields>'
|
|
169
|
+
if rows.empty?
|
|
170
|
+
str << '<rowFields count="1"><field x="-2"/></rowFields>'
|
|
171
|
+
str << '<rowItems count="2"><i><x/></i> <i i="1"><x v="1"/></i></rowItems>'
|
|
172
|
+
else
|
|
173
|
+
str << '<rowFields count="' << rows.size.to_s << '">'
|
|
174
|
+
rows.each do |row_value|
|
|
175
|
+
str << '<field x="' << header_index_of(row_value).to_s << '"/>'
|
|
176
|
+
end
|
|
177
|
+
str << '</rowFields>'
|
|
178
|
+
str << '<rowItems count="' << rows.size.to_s << '">'
|
|
179
|
+
rows.size.times do |i|
|
|
180
|
+
str << '<i/>'
|
|
181
|
+
end
|
|
182
|
+
str << '</rowItems>'
|
|
183
|
+
end
|
|
184
|
+
if columns.empty?
|
|
185
|
+
str << '<colItems count="1"><i/></colItems>'
|
|
186
|
+
else
|
|
187
|
+
str << '<colFields count="' << columns.size.to_s << '">'
|
|
188
|
+
columns.each do |column_value|
|
|
189
|
+
str << '<field x="' << header_index_of(column_value).to_s << '"/>'
|
|
190
|
+
end
|
|
191
|
+
str << '</colFields>'
|
|
192
|
+
end
|
|
193
|
+
unless pages.empty?
|
|
194
|
+
str << '<pageFields count="' << pages.size.to_s << '">'
|
|
195
|
+
pages.each do |page_value|
|
|
196
|
+
str << '<pageField fld="' << header_index_of(page_value).to_s << '"/>'
|
|
197
|
+
end
|
|
198
|
+
str << '</pageFields>'
|
|
199
|
+
end
|
|
200
|
+
unless data.empty?
|
|
201
|
+
str << "<dataFields count=\"#{data.size}\">"
|
|
202
|
+
data.each do |datum_value|
|
|
203
|
+
str << "<dataField name='#{@subtotal} of #{datum_value[:ref]}' fld='#{header_index_of(datum_value[:ref])}' baseField='0' baseItem='0'"
|
|
204
|
+
str << " subtotal='#{datum_value[:subtotal]}' " if datum_value[:subtotal]
|
|
205
|
+
str << "/>"
|
|
206
|
+
end
|
|
207
|
+
str << '</dataFields>'
|
|
208
|
+
end
|
|
209
|
+
str << '</pivotTableDefinition>'
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
# References for header cells
|
|
213
|
+
# @return [Array]
|
|
214
|
+
def header_cell_refs
|
|
215
|
+
Axlsx::range_to_a(header_range).first
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
# The header cells for the pivot table
|
|
219
|
+
# @return [Array]
|
|
220
|
+
def header_cells
|
|
221
|
+
data_sheet[header_range]
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
# The values in the header cells collection
|
|
225
|
+
# @return [Array]
|
|
226
|
+
def header_cell_values
|
|
227
|
+
header_cells.map(&:value)
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
# The number of cells in the header_cells collection
|
|
231
|
+
# @return [Integer]
|
|
232
|
+
def header_cells_count
|
|
233
|
+
header_cells.count
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
# The index of a given value in the header cells
|
|
237
|
+
# @return [Integer]
|
|
238
|
+
def header_index_of(value)
|
|
239
|
+
header_cell_values.index(value)
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
private
|
|
243
|
+
|
|
244
|
+
def pivot_field_for(cell_ref)
|
|
245
|
+
if rows.include? cell_ref
|
|
246
|
+
'<pivotField axis="axisRow" compact="0" outline="0" subtotalTop="0" showAll="0" includeNewItemsInFilter="1">' <<
|
|
247
|
+
'<items count="1"><item t="default"/></items>' <<
|
|
248
|
+
'</pivotField>'
|
|
249
|
+
elsif columns.include? cell_ref
|
|
250
|
+
'<pivotField axis="axisCol" compact="0" outline="0" subtotalTop="0" showAll="0" includeNewItemsInFilter="1">' <<
|
|
251
|
+
'<items count="1"><item t="default"/></items>' <<
|
|
252
|
+
'</pivotField>'
|
|
253
|
+
elsif pages.include? cell_ref
|
|
254
|
+
'<pivotField axis="axisCol" compact="0" outline="0" subtotalTop="0" showAll="0" includeNewItemsInFilter="1">' <<
|
|
255
|
+
'<items count="1"><item t="default"/></items>' <<
|
|
256
|
+
'</pivotField>'
|
|
257
|
+
elsif data_refs.include? cell_ref
|
|
258
|
+
'<pivotField dataField="1" compact="0" outline="0" subtotalTop="0" showAll="0" includeNewItemsInFilter="1">' <<
|
|
259
|
+
'</pivotField>'
|
|
260
|
+
else
|
|
261
|
+
'<pivotField compact="0" outline="0" subtotalTop="0" showAll="0" includeNewItemsInFilter="1">' <<
|
|
262
|
+
'</pivotField>'
|
|
263
|
+
end
|
|
264
|
+
end
|
|
265
|
+
def data_refs
|
|
266
|
+
data.map { |hash| hash[:ref] }
|
|
267
|
+
end
|
|
268
|
+
def header_range
|
|
269
|
+
range.gsub(/^(\w+?)(\d+)\:(\w+?)\d+$/, '\1\2:\3\2')
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
end
|
|
273
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
module Axlsx
|
|
3
|
+
# Table
|
|
4
|
+
# @note Worksheet#add_pivot_table is the recommended way to create tables for your worksheets.
|
|
5
|
+
# @see README for examples
|
|
6
|
+
class PivotTableCacheDefinition
|
|
7
|
+
|
|
8
|
+
include Axlsx::OptionsParser
|
|
9
|
+
|
|
10
|
+
# Creates a new PivotTable object
|
|
11
|
+
# @param [String] pivot_table The pivot table this cache definition is in
|
|
12
|
+
def initialize(pivot_table)
|
|
13
|
+
@pivot_table = pivot_table
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# # The reference to the pivot table data
|
|
17
|
+
# # @return [PivotTable]
|
|
18
|
+
attr_reader :pivot_table
|
|
19
|
+
|
|
20
|
+
# The index of this chart in the workbooks charts collection
|
|
21
|
+
# @return [Integer]
|
|
22
|
+
def index
|
|
23
|
+
pivot_table.sheet.workbook.pivot_tables.index(pivot_table)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# The part name for this table
|
|
27
|
+
# @return [String]
|
|
28
|
+
def pn
|
|
29
|
+
"#{PIVOT_TABLE_CACHE_DEFINITION_PN % (index+1)}"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# The identifier for this cache
|
|
33
|
+
# @return [Integer]
|
|
34
|
+
def cache_id
|
|
35
|
+
index + 1
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# The relationship id for this pivot table cache definition.
|
|
39
|
+
# @see Relationship#Id
|
|
40
|
+
# @return [String]
|
|
41
|
+
def rId
|
|
42
|
+
pivot_table.relationships.for(self).Id
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Serializes the object
|
|
46
|
+
# @param [String] str
|
|
47
|
+
# @return [String]
|
|
48
|
+
def to_xml_string(str = '')
|
|
49
|
+
str << '<?xml version="1.0" encoding="UTF-8"?>'
|
|
50
|
+
str << '<pivotCacheDefinition xmlns="' << XML_NS << '" xmlns:r="' << XML_NS_R << '" invalid="1" refreshOnLoad="1" recordCount="0">'
|
|
51
|
+
str << '<cacheSource type="worksheet">'
|
|
52
|
+
str << '<worksheetSource ref="' << pivot_table.range << '" sheet="' << pivot_table.data_sheet.name << '"/>'
|
|
53
|
+
str << '</cacheSource>'
|
|
54
|
+
str << '<cacheFields count="' << pivot_table.header_cells_count.to_s << '">'
|
|
55
|
+
pivot_table.header_cells.each do |cell|
|
|
56
|
+
str << '<cacheField name="' << cell.value << '" numFmtId="0">'
|
|
57
|
+
str << '<sharedItems count="0">'
|
|
58
|
+
str << '</sharedItems>'
|
|
59
|
+
str << '</cacheField>'
|
|
60
|
+
end
|
|
61
|
+
str << '</cacheFields>'
|
|
62
|
+
str << '</pivotCacheDefinition>'
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
end
|
|
66
|
+
end
|