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,52 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
module Axlsx
|
|
3
|
+
|
|
4
|
+
#This class specifies data for a particular data point. It is used for both numCache and numLit object
|
|
5
|
+
class NumData
|
|
6
|
+
|
|
7
|
+
include Axlsx::OptionsParser
|
|
8
|
+
|
|
9
|
+
# creates a new NumVal object
|
|
10
|
+
# @option options [String] formatCode
|
|
11
|
+
# @option options [Array] :data
|
|
12
|
+
# @see StrData
|
|
13
|
+
def initialize(options={})
|
|
14
|
+
@format_code = "General"
|
|
15
|
+
@pt = SimpleTypedList.new NumVal
|
|
16
|
+
parse_options options
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# A string representing the format code to apply. For more information see see the SpreadsheetML numFmt element's (§18.8.30) formatCode attribute.
|
|
20
|
+
# @return [String]
|
|
21
|
+
attr_reader :format_code
|
|
22
|
+
|
|
23
|
+
# Creates the val objects for this data set. I am not overly confident this is going to play nicely with time and data types.
|
|
24
|
+
# @param [Array] values An array of cells or values.
|
|
25
|
+
def data=(values=[])
|
|
26
|
+
@tag_name = values.first.is_a?(Cell) ? :numCache : :numLit
|
|
27
|
+
values.each do |value|
|
|
28
|
+
value = value.is_formula? ? 0 : value.value if value.is_a?(Cell)
|
|
29
|
+
@pt << NumVal.new(:v => value)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# @see format_code
|
|
34
|
+
def format_code=(v='General')
|
|
35
|
+
Axlsx::validate_string(v)
|
|
36
|
+
@format_code = v
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# serialize the object
|
|
40
|
+
def to_xml_string(str = "")
|
|
41
|
+
str << '<c:' << @tag_name.to_s << '>'
|
|
42
|
+
str << '<c:formatCode>' << format_code.to_s << '</c:formatCode>'
|
|
43
|
+
str << '<c:ptCount val="' << @pt.size.to_s << '"/>'
|
|
44
|
+
@pt.each_with_index do |num_val, index|
|
|
45
|
+
num_val.to_xml_string index, str
|
|
46
|
+
end
|
|
47
|
+
str << '</c:' << @tag_name.to_s << '>'
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
module Axlsx
|
|
2
|
+
|
|
3
|
+
# A numeric data source for use by charts.
|
|
4
|
+
class NumDataSource
|
|
5
|
+
|
|
6
|
+
include Axlsx::OptionsParser
|
|
7
|
+
|
|
8
|
+
# creates a new NumDataSource object
|
|
9
|
+
# @option options [Array] data An array of Cells or Numeric objects
|
|
10
|
+
# @option options [Symbol] tag_name see tag_name
|
|
11
|
+
def initialize(options={})
|
|
12
|
+
# override these three in child classes
|
|
13
|
+
@data_type ||= NumData
|
|
14
|
+
@tag_name ||= :val
|
|
15
|
+
@ref_tag_name ||= :numRef
|
|
16
|
+
|
|
17
|
+
@f = nil
|
|
18
|
+
@data = @data_type.new(options)
|
|
19
|
+
if options[:data] && options[:data].first.is_a?(Cell)
|
|
20
|
+
@f = Axlsx::cell_range(options[:data])
|
|
21
|
+
end
|
|
22
|
+
parse_options options
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
# The tag name to use when serializing this data source.
|
|
27
|
+
# Only items defined in allowed_tag_names are allowed
|
|
28
|
+
# @return [Symbol]
|
|
29
|
+
attr_reader :tag_name
|
|
30
|
+
|
|
31
|
+
attr_reader :data
|
|
32
|
+
|
|
33
|
+
# allowed element tag names
|
|
34
|
+
# @return [Array]
|
|
35
|
+
def self.allowed_tag_names
|
|
36
|
+
[:yVal, :val]
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# sets the tag name for this data source
|
|
40
|
+
# @param [Symbol] v One of the allowed_tag_names
|
|
41
|
+
def tag_name=(v)
|
|
42
|
+
Axlsx::RestrictionValidator.validate "#{self.class.name}.tag_name", self.class.allowed_tag_names, v
|
|
43
|
+
@tag_name = v
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# serialize the object
|
|
47
|
+
# @param [String] str
|
|
48
|
+
def to_xml_string(str="")
|
|
49
|
+
str << '<c:' << tag_name.to_s << '>'
|
|
50
|
+
if @f
|
|
51
|
+
str << '<c:' << @ref_tag_name.to_s << '>'
|
|
52
|
+
str << '<c:f>' << @f.to_s << '</c:f>'
|
|
53
|
+
end
|
|
54
|
+
@data.to_xml_string str
|
|
55
|
+
if @f
|
|
56
|
+
str << '</c:' << @ref_tag_name.to_s << '>'
|
|
57
|
+
end
|
|
58
|
+
str << '</c:' << tag_name.to_s << '>'
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
module Axlsx
|
|
3
|
+
|
|
4
|
+
#This class specifies data for a particular data point.
|
|
5
|
+
class NumVal < StrVal
|
|
6
|
+
|
|
7
|
+
# A string representing the format code to apply.
|
|
8
|
+
# For more information see see the SpreadsheetML numFmt element's (§18.8.30) formatCode attribute.
|
|
9
|
+
# @return [String]
|
|
10
|
+
attr_reader :format_code
|
|
11
|
+
|
|
12
|
+
# creates a new NumVal object
|
|
13
|
+
# @option options [String] formatCode
|
|
14
|
+
# @option options [Integer] v
|
|
15
|
+
def initialize(options={})
|
|
16
|
+
@format_code = "General"
|
|
17
|
+
super(options)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# @see format_code
|
|
21
|
+
def format_code=(v)
|
|
22
|
+
Axlsx::validate_string(v)
|
|
23
|
+
@format_code = v
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# serialize the object
|
|
27
|
+
def to_xml_string(idx, str = "")
|
|
28
|
+
Axlsx::validate_unsigned_int(idx)
|
|
29
|
+
str << '<c:pt idx="' << idx.to_s << '" formatCode="' << format_code << '"><c:v>' << v.to_s << '</c:v></c:pt>'
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
module Axlsx
|
|
3
|
+
# This class details a single cell anchor for drawings.
|
|
4
|
+
# @note The recommended way to manage drawings, images and charts is Worksheet#add_chart or Worksheet#add_image.
|
|
5
|
+
# @see Worksheet#add_chart
|
|
6
|
+
# @see Worksheet#add_image
|
|
7
|
+
class OneCellAnchor
|
|
8
|
+
|
|
9
|
+
include Axlsx::OptionsParser
|
|
10
|
+
|
|
11
|
+
# Creates a new OneCellAnchor object and an Pic associated with it.
|
|
12
|
+
# @param [Drawing] drawing
|
|
13
|
+
# @option options [Array] start_at the col, row to start at
|
|
14
|
+
# @option options [Integer] width
|
|
15
|
+
# @option options [Integer] height
|
|
16
|
+
# @option options [String] image_src the file location of the image you will render
|
|
17
|
+
# @option options [String] name the name attribute for the rendered image
|
|
18
|
+
# @option options [String] descr the description of the image rendered
|
|
19
|
+
def initialize(drawing, options={})
|
|
20
|
+
@drawing = drawing
|
|
21
|
+
@width = 0
|
|
22
|
+
@height = 0
|
|
23
|
+
drawing.anchors << self
|
|
24
|
+
@from = Marker.new
|
|
25
|
+
parse_options options
|
|
26
|
+
@object = Pic.new(self, options)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# A marker that defines the from cell anchor. The default from column and row are 0 and 0 respectively
|
|
30
|
+
# @return [Marker]
|
|
31
|
+
attr_reader :from
|
|
32
|
+
|
|
33
|
+
# The object this anchor hosts
|
|
34
|
+
# @return [Pic]
|
|
35
|
+
attr_reader :object
|
|
36
|
+
|
|
37
|
+
# The drawing that holds this anchor
|
|
38
|
+
# @return [Drawing]
|
|
39
|
+
attr_reader :drawing
|
|
40
|
+
|
|
41
|
+
# the width of the graphic object in pixels.
|
|
42
|
+
# this is converted to EMU at a 92 ppi resolution
|
|
43
|
+
# @return [Integer]
|
|
44
|
+
attr_reader :width
|
|
45
|
+
|
|
46
|
+
# the height of the graphic object in pixels
|
|
47
|
+
# this is converted to EMU at a 92 ppi resolution
|
|
48
|
+
# @return [Integer]
|
|
49
|
+
attr_reader :height
|
|
50
|
+
|
|
51
|
+
# sets the starting position for the anchor.
|
|
52
|
+
# You can provide a String like "A1", an array like [0,0] or a cell object for the x parameter.
|
|
53
|
+
# We just 'figure it out' for you.
|
|
54
|
+
# @param [Array, String, Cell, Integer] x Accepts many inputs for defining the starting position of the cell.
|
|
55
|
+
# @param [Integer] y When x is an integer, this value is used for the row index at which the anchor starts.
|
|
56
|
+
def start_at(x, y=0)
|
|
57
|
+
from.coord x, y
|
|
58
|
+
end
|
|
59
|
+
#
|
|
60
|
+
# @see height
|
|
61
|
+
def height=(v) Axlsx::validate_unsigned_int(v); @height = v; end
|
|
62
|
+
|
|
63
|
+
# @see width
|
|
64
|
+
def width=(v) Axlsx::validate_unsigned_int(v); @width = v; end
|
|
65
|
+
|
|
66
|
+
# The index of this anchor in the drawing
|
|
67
|
+
# @return [Integer]
|
|
68
|
+
def index
|
|
69
|
+
@drawing.anchors.index(self)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Serializes the object
|
|
73
|
+
# @param [String] str
|
|
74
|
+
# @return [String]
|
|
75
|
+
def to_xml_string(str = '')
|
|
76
|
+
str << '<xdr:oneCellAnchor>'
|
|
77
|
+
str << '<xdr:from>'
|
|
78
|
+
from.to_xml_string(str)
|
|
79
|
+
str << '</xdr:from>'
|
|
80
|
+
str << '<xdr:ext cx="' << ext[:cx].to_s << '" cy="' << ext[:cy].to_s << '"/>'
|
|
81
|
+
@object.to_xml_string(str)
|
|
82
|
+
str << '<xdr:clientData/>'
|
|
83
|
+
str << '</xdr:oneCellAnchor>'
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
private
|
|
87
|
+
|
|
88
|
+
# converts the pixel width and height to EMU units and returns a hash of
|
|
89
|
+
# !{:cx=>[Integer], :cy=>[Integer]
|
|
90
|
+
# @return [Hash]
|
|
91
|
+
def ext
|
|
92
|
+
cy = @height * 914400 / 96
|
|
93
|
+
cx = @width * 914400 / 96
|
|
94
|
+
{:cy=>cy, :cx=>cx}
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
end
|
|
98
|
+
end
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
module Axlsx
|
|
3
|
+
# a Pic object represents an image in your worksheet
|
|
4
|
+
# Worksheet#add_image is the recommended way to manage images in your sheets
|
|
5
|
+
# @see Worksheet#add_image
|
|
6
|
+
class Pic
|
|
7
|
+
|
|
8
|
+
include Axlsx::OptionsParser
|
|
9
|
+
|
|
10
|
+
# Creates a new Pic(ture) object
|
|
11
|
+
# @param [Anchor] anchor the anchor that holds this image
|
|
12
|
+
# @option options [String] name
|
|
13
|
+
# @option options [String] descr
|
|
14
|
+
# @option options [String] image_src
|
|
15
|
+
# @option options [Array] start_at
|
|
16
|
+
# @option options [Intger] width
|
|
17
|
+
# @option options [Intger] height
|
|
18
|
+
def initialize(anchor, options={})
|
|
19
|
+
@anchor = anchor
|
|
20
|
+
@hyperlink = nil
|
|
21
|
+
@anchor.drawing.worksheet.workbook.images << self
|
|
22
|
+
parse_options options
|
|
23
|
+
start_at(*options[:start_at]) if options[:start_at]
|
|
24
|
+
yield self if block_given?
|
|
25
|
+
@picture_locking = PictureLocking.new(options)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# allowed file extenstions
|
|
29
|
+
ALLOWED_EXTENSIONS = ['gif', 'jpeg', 'png', 'jpg']
|
|
30
|
+
|
|
31
|
+
# The name to use for this picture
|
|
32
|
+
# @return [String]
|
|
33
|
+
attr_reader :name
|
|
34
|
+
|
|
35
|
+
# A description of the picture
|
|
36
|
+
# @return [String]
|
|
37
|
+
attr_reader :descr
|
|
38
|
+
|
|
39
|
+
# The path to the image you want to include
|
|
40
|
+
# Only local images are supported at this time.
|
|
41
|
+
# @return [String]
|
|
42
|
+
attr_reader :image_src
|
|
43
|
+
|
|
44
|
+
# The anchor for this image
|
|
45
|
+
# @return [OneCellAnchor]
|
|
46
|
+
attr_reader :anchor
|
|
47
|
+
|
|
48
|
+
# The picture locking attributes for this picture
|
|
49
|
+
attr_reader :picture_locking
|
|
50
|
+
|
|
51
|
+
attr_reader :hyperlink
|
|
52
|
+
|
|
53
|
+
# sets or updates a hyperlink for this image.
|
|
54
|
+
# @param [String] v The href value for the hyper link
|
|
55
|
+
# @option options @see Hyperlink#initialize All options available to the Hyperlink class apply - however href will be overridden with the v parameter value.
|
|
56
|
+
def hyperlink=(v, options={})
|
|
57
|
+
options[:href] = v
|
|
58
|
+
if @hyperlink.is_a?(Hyperlink)
|
|
59
|
+
options.each do |o|
|
|
60
|
+
@hyperlink.send("#{o[0]}=", o[1]) if @hyperlink.respond_to? "#{o[0]}="
|
|
61
|
+
end
|
|
62
|
+
else
|
|
63
|
+
@hyperlink = Hyperlink.new(self, options)
|
|
64
|
+
end
|
|
65
|
+
@hyperlink
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def image_src=(v)
|
|
69
|
+
Axlsx::validate_string(v)
|
|
70
|
+
RestrictionValidator.validate 'Pic.image_src', ALLOWED_EXTENSIONS, File.extname(v.downcase).delete('.')
|
|
71
|
+
raise ArgumentError, "File does not exist" unless File.exist?(v)
|
|
72
|
+
@image_src = v
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# @see name
|
|
76
|
+
def name=(v) Axlsx::validate_string(v); @name = v; end
|
|
77
|
+
|
|
78
|
+
# @see descr
|
|
79
|
+
def descr=(v) Axlsx::validate_string(v); @descr = v; end
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
# The file name of image_src without any path information
|
|
83
|
+
# @return [String]
|
|
84
|
+
def file_name
|
|
85
|
+
File.basename(image_src) unless image_src.nil?
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# returns the extension of image_src without the preceeding '.'
|
|
89
|
+
# @return [String]
|
|
90
|
+
def extname
|
|
91
|
+
File.extname(image_src).delete('.') unless image_src.nil?
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# The index of this image in the workbooks images collections
|
|
95
|
+
# @return [Index]
|
|
96
|
+
def index
|
|
97
|
+
@anchor.drawing.worksheet.workbook.images.index(self)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# The part name for this image used in serialization and relationship building
|
|
101
|
+
# @return [String]
|
|
102
|
+
def pn
|
|
103
|
+
"#{IMAGE_PN % [(index+1), extname]}"
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# The relationship object for this pic.
|
|
107
|
+
# @return [Relationship]
|
|
108
|
+
def relationship
|
|
109
|
+
Relationship.new(self, IMAGE_R, "../#{pn}")
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# providing access to the anchor's width attribute
|
|
113
|
+
# @param [Integer] v
|
|
114
|
+
# @see OneCellAnchor.width
|
|
115
|
+
def width
|
|
116
|
+
return unless @anchor.is_a?(OneCellAnchor)
|
|
117
|
+
@anchor.width
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# @see width
|
|
121
|
+
def width=(v)
|
|
122
|
+
use_one_cell_anchor unless @anchor.is_a?(OneCellAnchor)
|
|
123
|
+
@anchor.width = v
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
# providing access to update the anchor's height attribute
|
|
127
|
+
# @param [Integer] v
|
|
128
|
+
# @see OneCellAnchor.width
|
|
129
|
+
# @note this is a noop if you are using a TwoCellAnchor
|
|
130
|
+
def height
|
|
131
|
+
@anchor.height
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# @see height
|
|
135
|
+
# @note This is a noop if you are using a TwoCellAnchor
|
|
136
|
+
def height=(v)
|
|
137
|
+
use_one_cell_anchor unless @anchor.is_a?(OneCellAnchor)
|
|
138
|
+
@anchor.height = v
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# This is a short cut method to set the start anchor position
|
|
142
|
+
# If you need finer granularity in positioning use
|
|
143
|
+
# graphic_frame.anchor.from.colOff / rowOff
|
|
144
|
+
# @param [Integer] x The column
|
|
145
|
+
# @param [Integer] y The row
|
|
146
|
+
# @return [Marker]
|
|
147
|
+
def start_at(x, y=nil)
|
|
148
|
+
@anchor.start_at x, y
|
|
149
|
+
@anchor.from
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
# noop if not using a two cell anchor
|
|
153
|
+
# @param [Integer] x The column
|
|
154
|
+
# @param [Integer] y The row
|
|
155
|
+
# @return [Marker]
|
|
156
|
+
def end_at(x, y=nil)
|
|
157
|
+
use_two_cell_anchor unless @anchor.is_a?(TwoCellAnchor)
|
|
158
|
+
@anchor.end_at x, y
|
|
159
|
+
@anchor.to
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# Serializes the object
|
|
163
|
+
# @param [String] str
|
|
164
|
+
# @return [String]
|
|
165
|
+
def to_xml_string(str = '')
|
|
166
|
+
str << '<xdr:pic>'
|
|
167
|
+
str << '<xdr:nvPicPr>'
|
|
168
|
+
str << '<xdr:cNvPr id="2" name="' << name.to_s << '" descr="' << descr.to_s << '">'
|
|
169
|
+
@hyperlink.to_xml_string(str) if @hyperlink.is_a?(Hyperlink)
|
|
170
|
+
str << '</xdr:cNvPr><xdr:cNvPicPr>'
|
|
171
|
+
picture_locking.to_xml_string(str)
|
|
172
|
+
str << '</xdr:cNvPicPr></xdr:nvPicPr>'
|
|
173
|
+
str << '<xdr:blipFill>'
|
|
174
|
+
str << '<a:blip xmlns:r ="' << XML_NS_R << '" r:embed="' << relationship.Id << '"/>'
|
|
175
|
+
str << '<a:stretch><a:fillRect/></a:stretch></xdr:blipFill><xdr:spPr>'
|
|
176
|
+
str << '<a:xfrm><a:off x="0" y="0"/><a:ext cx="2336800" cy="2161540"/></a:xfrm>'
|
|
177
|
+
str << '<a:prstGeom prst="rect"><a:avLst/></a:prstGeom></xdr:spPr></xdr:pic>'
|
|
178
|
+
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
private
|
|
182
|
+
|
|
183
|
+
# Changes the anchor to a one cell anchor.
|
|
184
|
+
def use_one_cell_anchor
|
|
185
|
+
return if @anchor.is_a?(OneCellAnchor)
|
|
186
|
+
new_anchor = OneCellAnchor.new(@anchor.drawing, :start_at => [@anchor.from.col, @anchor.from.row])
|
|
187
|
+
swap_anchor(new_anchor)
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
#changes the anchor type to a two cell anchor
|
|
191
|
+
def use_two_cell_anchor
|
|
192
|
+
return if @anchor.is_a?(TwoCellAnchor)
|
|
193
|
+
new_anchor = TwoCellAnchor.new(@anchor.drawing, :start_at => [@anchor.from.col, @anchor.from.row])
|
|
194
|
+
swap_anchor(new_anchor)
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
# refactoring of swapping code, law of demeter be damned!
|
|
198
|
+
def swap_anchor(new_anchor)
|
|
199
|
+
new_anchor.drawing.anchors.delete(new_anchor)
|
|
200
|
+
@anchor.drawing.anchors[@anchor.drawing.anchors.index(@anchor)] = new_anchor
|
|
201
|
+
new_anchor.instance_variable_set "@object", @anchor.object
|
|
202
|
+
@anchor = new_anchor
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
end
|