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,24 @@
|
|
|
1
|
+
module Axlsx
|
|
2
|
+
|
|
3
|
+
# A simple, self serializing class for storing pivot tables
|
|
4
|
+
class PivotTables < SimpleTypedList
|
|
5
|
+
|
|
6
|
+
# creates a new Tables object
|
|
7
|
+
def initialize(worksheet)
|
|
8
|
+
raise ArgumentError, "you must provide a worksheet" unless worksheet.is_a?(Worksheet)
|
|
9
|
+
super PivotTable
|
|
10
|
+
@worksheet = worksheet
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# The worksheet that owns this collection of pivot tables
|
|
14
|
+
# @return [Worksheet]
|
|
15
|
+
attr_reader :worksheet
|
|
16
|
+
|
|
17
|
+
# returns the relationships required by this collection
|
|
18
|
+
def relationships
|
|
19
|
+
return [] if empty?
|
|
20
|
+
map{ |pivot_table| Relationship.new(pivot_table, PIVOT_TABLE_R, "../#{pivot_table.pn}") }
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
module Axlsx
|
|
2
|
+
# Options for printing a worksheet. All options are boolean and false by default.
|
|
3
|
+
#
|
|
4
|
+
# @note The recommended way to manage print options is via Worksheet#print_options
|
|
5
|
+
# @see Worksheet#print_options
|
|
6
|
+
# @see Worksheet#initialize
|
|
7
|
+
class PrintOptions
|
|
8
|
+
|
|
9
|
+
include Axlsx::OptionsParser
|
|
10
|
+
include Axlsx::SerializedAttributes
|
|
11
|
+
include Axlsx::Accessors
|
|
12
|
+
# Creates a new PrintOptions object
|
|
13
|
+
# @option options [Boolean] grid_lines Whether grid lines should be printed
|
|
14
|
+
# @option options [Boolean] headings Whether row and column headings should be printed
|
|
15
|
+
# @option options [Boolean] horizontal_centered Whether the content should be centered horizontally
|
|
16
|
+
# @option options [Boolean] vertical_centered Whether the content should be centered vertically
|
|
17
|
+
def initialize(options = {})
|
|
18
|
+
@grid_lines = @headings = @horizontal_centered = @vertical_centered = false
|
|
19
|
+
set(options)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
serializable_attributes :grid_lines, :headings, :horizontal_centered, :vertical_centered
|
|
23
|
+
boolean_attr_accessor :grid_lines, :headings, :horizontal_centered, :vertical_centered
|
|
24
|
+
|
|
25
|
+
# Set some or all options at once.
|
|
26
|
+
# @param [Hash] options The options to set (possible keys are :grid_lines, :headings, :horizontal_centered, and :vertical_centered).
|
|
27
|
+
def set(options)
|
|
28
|
+
parse_options options
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Serializes the page options element.
|
|
32
|
+
# @note As all attributes default to "false" according to the xml schema definition, the generated xml includes only those attributes that are set to true.
|
|
33
|
+
# @param [String] str
|
|
34
|
+
# @return [String]
|
|
35
|
+
def to_xml_string(str = '')
|
|
36
|
+
serialized_tag 'printOptions', str
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
module Axlsx
|
|
2
|
+
# The Protected Range class represents a set of cells in the worksheet
|
|
3
|
+
# @note the recommended way to manage protected ranges with via Worksheet#protect_range
|
|
4
|
+
# @see Worksheet#protect_range
|
|
5
|
+
class ProtectedRange
|
|
6
|
+
|
|
7
|
+
include Axlsx::OptionsParser
|
|
8
|
+
include Axlsx::SerializedAttributes
|
|
9
|
+
|
|
10
|
+
# Initializes a new protected range object
|
|
11
|
+
# @option [String] sqref The cell range reference to protect. This can be an absolute or a relateve range however, it only applies to the current sheet.
|
|
12
|
+
# @option [String] name An optional name for the protected name.
|
|
13
|
+
def initialize(options={})
|
|
14
|
+
parse_options options
|
|
15
|
+
yield self if block_given?
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
serializable_attributes :sqref, :name
|
|
19
|
+
# The reference for the protected range
|
|
20
|
+
# @return [String]
|
|
21
|
+
attr_reader :sqref
|
|
22
|
+
|
|
23
|
+
# The name of the protected range
|
|
24
|
+
# @return [String]
|
|
25
|
+
attr_reader :name
|
|
26
|
+
|
|
27
|
+
# @see sqref
|
|
28
|
+
def sqref=(v)
|
|
29
|
+
Axlsx.validate_string(v)
|
|
30
|
+
@sqref = v
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# @see name
|
|
34
|
+
def name=(v)
|
|
35
|
+
Axlsx.validate_string(v)
|
|
36
|
+
@name = v
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# serializes the proteted range
|
|
40
|
+
# @param [String] str if this string object is provided we append
|
|
41
|
+
# our output to that object. Use this - it helps limit the number of
|
|
42
|
+
# objects created during serialization
|
|
43
|
+
def to_xml_string(str="")
|
|
44
|
+
serialized_tag 'protectedRange', str
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
module Axlsx
|
|
2
|
+
|
|
3
|
+
# A self serializing collection of ranges that should be protected in
|
|
4
|
+
# the worksheet
|
|
5
|
+
class ProtectedRanges < SimpleTypedList
|
|
6
|
+
|
|
7
|
+
attr_reader :worksheet
|
|
8
|
+
|
|
9
|
+
def initialize(worksheet)
|
|
10
|
+
raise ArgumentError, 'You must provide a worksheet' unless worksheet.is_a?(Worksheet)
|
|
11
|
+
super ProtectedRange
|
|
12
|
+
@worksheet = worksheet
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Adds a protected range
|
|
16
|
+
# @param [Array|String] cells A string range reference or array of cells that will be protected
|
|
17
|
+
def add_range(cells)
|
|
18
|
+
sqref = if cells.is_a?(String)
|
|
19
|
+
cells
|
|
20
|
+
elsif cells.is_a?(SimpleTypedList) || cells.is_a?(Array)
|
|
21
|
+
Axlsx::cell_range(cells, false)
|
|
22
|
+
end
|
|
23
|
+
self << ProtectedRange.new(:sqref => sqref, :name => "Range#{size}")
|
|
24
|
+
last
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Serializes the protected ranges
|
|
28
|
+
# @param [String] str
|
|
29
|
+
# @return [String]
|
|
30
|
+
def to_xml_string(str = '')
|
|
31
|
+
return if empty?
|
|
32
|
+
str << '<protectedRanges>'
|
|
33
|
+
each { |range| range.to_xml_string(str) }
|
|
34
|
+
str << '</protectedRanges>'
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
module Axlsx
|
|
2
|
+
|
|
3
|
+
# A simple, self serializing class for storing TextRuns
|
|
4
|
+
class RichText < SimpleTypedList
|
|
5
|
+
|
|
6
|
+
# creates a new RichText collection
|
|
7
|
+
# @param [String] text -optional The text to use in creating the first RichTextRun
|
|
8
|
+
# @param [Object] options -optional The options to use in creating the first RichTextRun
|
|
9
|
+
# @yield [RichText] self
|
|
10
|
+
def initialize(text = nil, options={})
|
|
11
|
+
super(RichTextRun)
|
|
12
|
+
add_run(text, options) unless text.nil?
|
|
13
|
+
yield self if block_given?
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# The cell that owns this RichText collection
|
|
17
|
+
attr_reader :cell
|
|
18
|
+
|
|
19
|
+
# Assign the cell for this RichText collection
|
|
20
|
+
# @param [Cell] cell The cell which all RichTextRuns in the collection will belong to
|
|
21
|
+
def cell=(cell)
|
|
22
|
+
@cell = cell
|
|
23
|
+
each { |run| run.cell = cell }
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Calculates the longest autowidth of the RichTextRuns in this collection
|
|
27
|
+
# @return [Number]
|
|
28
|
+
def autowidth
|
|
29
|
+
widtharray = [0] # Are arrays the best way of solving this problem?
|
|
30
|
+
each { |run| run.autowidth(widtharray) }
|
|
31
|
+
widtharray.max
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Creates and adds a RichTextRun to this collectino
|
|
35
|
+
# @param [String] text The text to use in creating a new RichTextRun
|
|
36
|
+
# @param [Object] options The options to use in creating the new RichTextRun
|
|
37
|
+
def add_run(text, options={})
|
|
38
|
+
self << RichTextRun.new(text, options)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# The RichTextRuns we own
|
|
42
|
+
# @return [RichText]
|
|
43
|
+
def runs
|
|
44
|
+
self
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# renders the RichTextRuns in this collection
|
|
48
|
+
# @param [String] str
|
|
49
|
+
# @return [String]
|
|
50
|
+
def to_xml_string(str='')
|
|
51
|
+
each{ |run| run.to_xml_string(str) }
|
|
52
|
+
str
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
module Axlsx
|
|
2
|
+
|
|
3
|
+
# The RichTextRun class creates and self serializing text run.
|
|
4
|
+
class RichTextRun
|
|
5
|
+
|
|
6
|
+
include Axlsx::OptionsParser
|
|
7
|
+
|
|
8
|
+
attr_reader :value
|
|
9
|
+
|
|
10
|
+
# A list of allowed inline style attributes used for validation
|
|
11
|
+
INLINE_STYLES = [:font_name, :charset,
|
|
12
|
+
:family, :b, :i, :strike, :outline,
|
|
13
|
+
:shadow, :condense, :extend, :u,
|
|
14
|
+
:vertAlign, :sz, :color, :scheme].freeze
|
|
15
|
+
|
|
16
|
+
def initialize(value, options={})
|
|
17
|
+
self.value = value
|
|
18
|
+
parse_options(options)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def value=(value)
|
|
22
|
+
@value = value
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
attr_accessor :cell
|
|
26
|
+
|
|
27
|
+
# The inline font_name property for the cell
|
|
28
|
+
# @return [String]
|
|
29
|
+
attr_reader :font_name
|
|
30
|
+
# @see font_name
|
|
31
|
+
def font_name=(v) set_run_style :validate_string, :font_name, v; end
|
|
32
|
+
|
|
33
|
+
# The inline charset property for the cell
|
|
34
|
+
# As far as I can tell, this is pretty much ignored. However, based on the spec it should be one of the following:
|
|
35
|
+
# 0  ANSI_CHARSET
|
|
36
|
+
# 1 DEFAULT_CHARSET
|
|
37
|
+
# 2 SYMBOL_CHARSET
|
|
38
|
+
# 77 MAC_CHARSET
|
|
39
|
+
# 128 SHIFTJIS_CHARSET
|
|
40
|
+
# 129  HANGUL_CHARSET
|
|
41
|
+
# 130  JOHAB_CHARSET
|
|
42
|
+
# 134  GB2312_CHARSET
|
|
43
|
+
# 136  CHINESEBIG5_CHARSET
|
|
44
|
+
# 161  GREEK_CHARSET
|
|
45
|
+
# 162  TURKISH_CHARSET
|
|
46
|
+
# 163  VIETNAMESE_CHARSET
|
|
47
|
+
# 177  HEBREW_CHARSET
|
|
48
|
+
# 178  ARABIC_CHARSET
|
|
49
|
+
# 186  BALTIC_CHARSET
|
|
50
|
+
# 204  RUSSIAN_CHARSET
|
|
51
|
+
# 222  THAI_CHARSET
|
|
52
|
+
# 238  EASTEUROPE_CHARSET
|
|
53
|
+
# 255  OEM_CHARSET
|
|
54
|
+
# @return [String]
|
|
55
|
+
attr_reader :charset
|
|
56
|
+
# @see charset
|
|
57
|
+
def charset=(v) set_run_style :validate_unsigned_int, :charset, v; end
|
|
58
|
+
|
|
59
|
+
# The inline family property for the cell
|
|
60
|
+
# @return [Integer]
|
|
61
|
+
# 1 Roman
|
|
62
|
+
# 2 Swiss
|
|
63
|
+
# 3 Modern
|
|
64
|
+
# 4 Script
|
|
65
|
+
# 5 Decorative
|
|
66
|
+
attr_reader :family
|
|
67
|
+
# @see family
|
|
68
|
+
def family=(v)
|
|
69
|
+
set_run_style :validate_family, :family, v.to_i
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# The inline bold property for the cell
|
|
73
|
+
# @return [Boolean]
|
|
74
|
+
attr_reader :b
|
|
75
|
+
# @see b
|
|
76
|
+
def b=(v) set_run_style :validate_boolean, :b, v; end
|
|
77
|
+
|
|
78
|
+
# The inline italic property for the cell
|
|
79
|
+
# @return [Boolean]
|
|
80
|
+
attr_reader :i
|
|
81
|
+
# @see i
|
|
82
|
+
def i=(v) set_run_style :validate_boolean, :i, v; end
|
|
83
|
+
|
|
84
|
+
# The inline strike property for the cell
|
|
85
|
+
# @return [Boolean]
|
|
86
|
+
attr_reader :strike
|
|
87
|
+
# @see strike
|
|
88
|
+
def strike=(v) set_run_style :validate_boolean, :strike, v; end
|
|
89
|
+
|
|
90
|
+
# The inline outline property for the cell
|
|
91
|
+
# @return [Boolean]
|
|
92
|
+
attr_reader :outline
|
|
93
|
+
# @see outline
|
|
94
|
+
def outline=(v) set_run_style :validate_boolean, :outline, v; end
|
|
95
|
+
|
|
96
|
+
# The inline shadow property for the cell
|
|
97
|
+
# @return [Boolean]
|
|
98
|
+
attr_reader :shadow
|
|
99
|
+
# @see shadow
|
|
100
|
+
def shadow=(v) set_run_style :validate_boolean, :shadow, v; end
|
|
101
|
+
|
|
102
|
+
# The inline condense property for the cell
|
|
103
|
+
# @return [Boolean]
|
|
104
|
+
attr_reader :condense
|
|
105
|
+
# @see condense
|
|
106
|
+
def condense=(v) set_run_style :validate_boolean, :condense, v; end
|
|
107
|
+
|
|
108
|
+
# The inline extend property for the cell
|
|
109
|
+
# @return [Boolean]
|
|
110
|
+
attr_reader :extend
|
|
111
|
+
# @see extend
|
|
112
|
+
def extend=(v) set_run_style :validate_boolean, :extend, v; end
|
|
113
|
+
|
|
114
|
+
# The inline underline property for the cell.
|
|
115
|
+
# It must be one of :none, :single, :double, :singleAccounting, :doubleAccounting, true
|
|
116
|
+
# @return [Boolean]
|
|
117
|
+
# @return [String]
|
|
118
|
+
# @note true is for backwards compatability and is reassigned to :single
|
|
119
|
+
attr_reader :u
|
|
120
|
+
# @see u
|
|
121
|
+
def u=(v)
|
|
122
|
+
v = :single if (v == true || v == 1 || v == :true || v == 'true')
|
|
123
|
+
set_run_style :validate_cell_u, :u, v
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
# The inline color property for the cell
|
|
127
|
+
# @return [Color]
|
|
128
|
+
attr_reader :color
|
|
129
|
+
# @param [String] v The 8 character representation for an rgb color #FFFFFFFF"
|
|
130
|
+
def color=(v)
|
|
131
|
+
@color = v.is_a?(Color) ? v : Color.new(:rgb=>v)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# The inline sz property for the cell
|
|
135
|
+
# @return [Inteter]
|
|
136
|
+
attr_reader :sz
|
|
137
|
+
# @see sz
|
|
138
|
+
def sz=(v) set_run_style :validate_unsigned_int, :sz, v; end
|
|
139
|
+
|
|
140
|
+
# The inline vertical alignment property for the cell
|
|
141
|
+
# this must be one of [:baseline, :subscript, :superscript]
|
|
142
|
+
# @return [Symbol]
|
|
143
|
+
attr_reader :vertAlign
|
|
144
|
+
# @see vertAlign
|
|
145
|
+
def vertAlign=(v)
|
|
146
|
+
RestrictionValidator.validate :cell_vertAlign, [:baseline, :subscript, :superscript], v
|
|
147
|
+
set_run_style nil, :vertAlign, v
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
# The inline scheme property for the cell
|
|
151
|
+
# this must be one of [:none, major, minor]
|
|
152
|
+
# @return [Symbol]
|
|
153
|
+
attr_reader :scheme
|
|
154
|
+
# @see scheme
|
|
155
|
+
def scheme=(v)
|
|
156
|
+
RestrictionValidator.validate :cell_scheme, [:none, :major, :minor], v
|
|
157
|
+
set_run_style nil, :scheme, v
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
# Tries to work out the width of the longest line in the run
|
|
161
|
+
# @param [Array] widtharray this array is populated with the widths of each line in the run.
|
|
162
|
+
# @return [Array]
|
|
163
|
+
def autowidth(widtharray)
|
|
164
|
+
return if value.nil?
|
|
165
|
+
if styles.cellXfs[style].alignment && styles.cellXfs[style].alignment.wrap_text
|
|
166
|
+
first = true
|
|
167
|
+
value.to_s.split(/\r?\n/, -1).each do |line|
|
|
168
|
+
if first
|
|
169
|
+
first = false
|
|
170
|
+
else
|
|
171
|
+
widtharray << 0
|
|
172
|
+
end
|
|
173
|
+
widtharray[-1] += string_width(line, font_size)
|
|
174
|
+
end
|
|
175
|
+
else
|
|
176
|
+
widtharray[-1] += string_width(value.to_s, font_size)
|
|
177
|
+
end
|
|
178
|
+
widtharray
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
# Utility method for setting inline style attributes
|
|
182
|
+
def set_run_style(validator, attr, value)
|
|
183
|
+
return unless INLINE_STYLES.include?(attr.to_sym)
|
|
184
|
+
Axlsx.send(validator, value) unless validator.nil?
|
|
185
|
+
self.instance_variable_set :"@#{attr.to_s}", value
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
# Serializes the RichTextRun
|
|
189
|
+
# @param [String] str
|
|
190
|
+
# @return [String]
|
|
191
|
+
def to_xml_string(str = '')
|
|
192
|
+
valid = RichTextRun::INLINE_STYLES
|
|
193
|
+
data = Hash[self.instance_values.map{ |k, v| [k.to_sym, v] }]
|
|
194
|
+
data = data.select { |key, value| valid.include?(key) && !value.nil? }
|
|
195
|
+
|
|
196
|
+
str << '<r><rPr>'
|
|
197
|
+
data.keys.each do |key|
|
|
198
|
+
case key
|
|
199
|
+
when :font_name
|
|
200
|
+
str << ('<rFont val="' << font_name << '"/>')
|
|
201
|
+
when :color
|
|
202
|
+
str << data[key].to_xml_string
|
|
203
|
+
else
|
|
204
|
+
str << ('<' << key.to_s << ' val="' << xml_value(data[key]) << '"/>')
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
clean_value = Axlsx::trust_input ? @value.to_s : ::CGI.escapeHTML(Axlsx::sanitize(@value.to_s))
|
|
208
|
+
str << ('</rPr><t>' << clean_value << '</t></r>')
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
private
|
|
212
|
+
|
|
213
|
+
# Returns the width of a string according to the current style
|
|
214
|
+
# This is still not perfect...
|
|
215
|
+
# - scaling is not linear as font sizes increase
|
|
216
|
+
def string_width(string, font_size)
|
|
217
|
+
font_scale = font_size / 10.0
|
|
218
|
+
string.count(Worksheet::THIN_CHARS) * font_scale
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
# we scale the font size if bold style is applied to either the style font or
|
|
222
|
+
# the cell itself. Yes, it is a bit of a hack, but it is much better than using
|
|
223
|
+
# imagemagick and loading metrics for every character.
|
|
224
|
+
def font_size
|
|
225
|
+
return sz if sz
|
|
226
|
+
font = styles.fonts[styles.cellXfs[style].fontId] || styles.fonts[0]
|
|
227
|
+
(font.b || (defined?(@b) && @b)) ? (font.sz * 1.5) : font.sz
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
def style
|
|
231
|
+
cell.style
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
def styles
|
|
235
|
+
cell.row.worksheet.styles
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
# Converts the value to the correct XML representation (fixes issues with
|
|
239
|
+
# Numbers)
|
|
240
|
+
def xml_value value
|
|
241
|
+
if value == true
|
|
242
|
+
1
|
|
243
|
+
elsif value == false
|
|
244
|
+
0
|
|
245
|
+
else
|
|
246
|
+
value
|
|
247
|
+
end.to_s
|
|
248
|
+
end
|
|
249
|
+
end
|
|
250
|
+
end
|