caxlsx 3.0.4 → 3.2.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 +4 -4
- data/.yardopts +9 -9
- data/.yardopts_guide +18 -18
- data/CHANGELOG.md +354 -334
- data/LICENSE +21 -21
- data/README.md +168 -170
- data/Rakefile +29 -29
- data/examples/generate.rb +15 -15
- data/lib/axlsx/content_type/abstract_content_type.rb +32 -32
- data/lib/axlsx/content_type/content_type.rb +26 -26
- data/lib/axlsx/content_type/default.rb +25 -25
- data/lib/axlsx/content_type/override.rb +25 -25
- data/lib/axlsx/doc_props/app.rb +235 -235
- data/lib/axlsx/doc_props/core.rb +39 -39
- data/lib/axlsx/drawing/area_chart.rb +99 -99
- data/lib/axlsx/drawing/area_series.rb +110 -110
- data/lib/axlsx/drawing/ax_data_source.rb +26 -26
- data/lib/axlsx/drawing/axes.rb +61 -61
- data/lib/axlsx/drawing/axis.rb +190 -190
- data/lib/axlsx/drawing/bar_3D_chart.rb +148 -151
- data/lib/axlsx/drawing/bar_chart.rb +138 -143
- data/lib/axlsx/drawing/bar_series.rb +97 -80
- data/lib/axlsx/drawing/bubble_chart.rb +59 -59
- data/lib/axlsx/drawing/bubble_series.rb +63 -63
- data/lib/axlsx/drawing/cat_axis.rb +85 -85
- data/lib/axlsx/drawing/chart.rb +276 -276
- data/lib/axlsx/drawing/d_lbls.rb +90 -90
- data/lib/axlsx/drawing/drawing.rb +167 -167
- data/lib/axlsx/drawing/graphic_frame.rb +54 -54
- data/lib/axlsx/drawing/hyperlink.rb +100 -100
- data/lib/axlsx/drawing/line_3D_chart.rb +68 -68
- data/lib/axlsx/drawing/line_chart.rb +99 -99
- data/lib/axlsx/drawing/line_series.rb +110 -110
- data/lib/axlsx/drawing/marker.rb +84 -84
- data/lib/axlsx/drawing/num_data.rb +52 -52
- data/lib/axlsx/drawing/num_data_source.rb +62 -62
- data/lib/axlsx/drawing/num_val.rb +34 -34
- data/lib/axlsx/drawing/one_cell_anchor.rb +99 -99
- data/lib/axlsx/drawing/pic.rb +211 -211
- data/lib/axlsx/drawing/picture_locking.rb +42 -42
- data/lib/axlsx/drawing/pie_3D_chart.rb +47 -47
- data/lib/axlsx/drawing/pie_series.rb +74 -74
- data/lib/axlsx/drawing/scaling.rb +60 -60
- data/lib/axlsx/drawing/scatter_chart.rb +74 -74
- data/lib/axlsx/drawing/scatter_series.rb +129 -98
- data/lib/axlsx/drawing/ser_axis.rb +45 -45
- data/lib/axlsx/drawing/series.rb +69 -69
- data/lib/axlsx/drawing/series_title.rb +25 -25
- data/lib/axlsx/drawing/str_data.rb +42 -42
- data/lib/axlsx/drawing/str_val.rb +34 -34
- data/lib/axlsx/drawing/title.rb +97 -97
- data/lib/axlsx/drawing/two_cell_anchor.rb +97 -97
- data/lib/axlsx/drawing/val_axis.rb +37 -37
- data/lib/axlsx/drawing/view_3D.rb +115 -115
- data/lib/axlsx/drawing/vml_drawing.rb +42 -42
- data/lib/axlsx/drawing/vml_shape.rb +66 -66
- data/lib/axlsx/package.rb +388 -363
- data/lib/axlsx/rels/relationship.rb +130 -130
- data/lib/axlsx/rels/relationships.rb +32 -32
- data/lib/axlsx/stylesheet/border.rb +73 -71
- data/lib/axlsx/stylesheet/border_pr.rb +71 -71
- data/lib/axlsx/stylesheet/cell_alignment.rb +132 -132
- data/lib/axlsx/stylesheet/cell_protection.rb +41 -41
- data/lib/axlsx/stylesheet/cell_style.rb +72 -72
- data/lib/axlsx/stylesheet/color.rb +76 -76
- data/lib/axlsx/stylesheet/dxf.rb +79 -79
- data/lib/axlsx/stylesheet/fill.rb +35 -35
- data/lib/axlsx/stylesheet/font.rb +156 -156
- data/lib/axlsx/stylesheet/gradient_fill.rb +103 -103
- data/lib/axlsx/stylesheet/gradient_stop.rb +37 -37
- data/lib/axlsx/stylesheet/num_fmt.rb +86 -86
- data/lib/axlsx/stylesheet/pattern_fill.rb +73 -73
- data/lib/axlsx/stylesheet/styles.rb +494 -420
- data/lib/axlsx/stylesheet/table_style.rb +54 -54
- data/lib/axlsx/stylesheet/table_style_element.rb +77 -77
- data/lib/axlsx/stylesheet/table_styles.rb +46 -46
- data/lib/axlsx/stylesheet/xf.rb +147 -147
- data/lib/axlsx/util/accessors.rb +64 -64
- data/lib/axlsx/util/constants.rb +410 -401
- data/lib/axlsx/util/mime_type_utils.rb +11 -11
- data/lib/axlsx/util/options_parser.rb +16 -16
- data/lib/axlsx/util/serialized_attributes.rb +89 -89
- data/lib/axlsx/util/simple_typed_list.rb +179 -179
- data/lib/axlsx/util/storage.rb +146 -146
- data/lib/axlsx/util/validators.rb +312 -312
- data/lib/axlsx/util/zip_command.rb +73 -73
- data/lib/axlsx/version.rb +5 -5
- data/lib/axlsx/workbook/defined_name.rb +128 -128
- data/lib/axlsx/workbook/defined_names.rb +21 -21
- data/lib/axlsx/workbook/shared_strings_table.rb +77 -77
- data/lib/axlsx/workbook/workbook.rb +395 -370
- data/lib/axlsx/workbook/workbook_view.rb +80 -80
- data/lib/axlsx/workbook/workbook_views.rb +22 -22
- data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -77
- data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -94
- data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +244 -244
- data/lib/axlsx/workbook/worksheet/break.rb +35 -35
- data/lib/axlsx/workbook/worksheet/cell.rb +506 -505
- data/lib/axlsx/workbook/worksheet/cell_serializer.rb +164 -164
- data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -60
- data/lib/axlsx/workbook/worksheet/cfvos.rb +18 -18
- data/lib/axlsx/workbook/worksheet/col.rb +145 -145
- data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -35
- data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -110
- data/lib/axlsx/workbook/worksheet/cols.rb +23 -23
- data/lib/axlsx/workbook/worksheet/comment.rb +91 -91
- data/lib/axlsx/workbook/worksheet/comments.rb +82 -82
- data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -82
- data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -220
- data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -25
- data/lib/axlsx/workbook/worksheet/data_bar.rb +129 -129
- data/lib/axlsx/workbook/worksheet/data_validation.rb +246 -246
- data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -28
- data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -30
- data/lib/axlsx/workbook/worksheet/dimension.rb +64 -64
- data/lib/axlsx/workbook/worksheet/header_footer.rb +52 -52
- data/lib/axlsx/workbook/worksheet/icon_set.rb +81 -81
- data/lib/axlsx/workbook/worksheet/merged_cells.rb +37 -37
- data/lib/axlsx/workbook/worksheet/outline_pr.rb +33 -33
- data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -97
- data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -44
- data/lib/axlsx/workbook/worksheet/page_setup.rb +240 -240
- data/lib/axlsx/workbook/worksheet/pane.rb +139 -139
- data/lib/axlsx/workbook/worksheet/pivot_table.rb +296 -289
- data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -66
- data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -24
- data/lib/axlsx/workbook/worksheet/print_options.rb +39 -39
- data/lib/axlsx/workbook/worksheet/protected_range.rb +47 -47
- data/lib/axlsx/workbook/worksheet/protected_ranges.rb +37 -37
- data/lib/axlsx/workbook/worksheet/rich_text.rb +55 -55
- data/lib/axlsx/workbook/worksheet/rich_text_run.rb +250 -250
- data/lib/axlsx/workbook/worksheet/row.rb +164 -162
- data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -33
- data/lib/axlsx/workbook/worksheet/selection.rb +101 -101
- data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -29
- data/lib/axlsx/workbook/worksheet/sheet_data.rb +27 -27
- data/lib/axlsx/workbook/worksheet/sheet_pr.rb +87 -87
- data/lib/axlsx/workbook/worksheet/sheet_protection.rb +118 -118
- data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -213
- data/lib/axlsx/workbook/worksheet/table.rb +102 -102
- data/lib/axlsx/workbook/worksheet/table_style_info.rb +49 -49
- data/lib/axlsx/workbook/worksheet/tables.rb +34 -34
- data/lib/axlsx/workbook/worksheet/worksheet.rb +786 -764
- data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -58
- data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -58
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -74
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -38
- data/lib/axlsx.rb +185 -170
- data/lib/caxlsx.rb +2 -2
- data/lib/schema/dc.xsd +118 -118
- data/lib/schema/dcmitype.xsd +51 -51
- data/lib/schema/dcterms.xsd +331 -331
- data/lib/schema/dml-chartDrawing.xsd +146 -146
- data/lib/schema/dml-compatibility.xsd +14 -14
- data/lib/schema/dml-lockedCanvas.xsd +11 -11
- data/lib/schema/dml-main.xsd +3048 -3048
- data/lib/schema/dml-picture.xsd +23 -23
- data/lib/schema/dml-spreadsheetDrawing.xsd +185 -185
- data/lib/schema/dml-wordprocessingDrawing.xsd +185 -185
- data/lib/schema/shared-additionalCharacteristics.xsd +28 -28
- data/lib/schema/shared-bibliography.xsd +144 -144
- data/lib/schema/shared-commonSimpleTypes.xsd +166 -166
- data/lib/schema/shared-customXmlDataProperties.xsd +25 -25
- data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -18
- data/lib/schema/shared-documentPropertiesCustom.xsd +59 -59
- data/lib/schema/shared-documentPropertiesExtended.xsd +56 -56
- data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -195
- data/lib/schema/shared-relationshipReference.xsd +25 -25
- data/lib/schema/vml-main.xsd +569 -569
- data/lib/schema/vml-officeDrawing.xsd +509 -509
- data/lib/schema/vml-presentationDrawing.xsd +12 -12
- data/lib/schema/vml-spreadsheetDrawing.xsd +108 -108
- data/lib/schema/vml-wordprocessingDrawing.xsd +96 -96
- data/lib/schema/xml.xsd +116 -116
- data/test/benchmark.rb +72 -72
- data/test/content_type/tc_content_type.rb +76 -76
- data/test/content_type/tc_default.rb +16 -16
- data/test/content_type/tc_override.rb +14 -14
- data/test/doc_props/tc_app.rb +43 -43
- data/test/doc_props/tc_core.rb +42 -42
- data/test/drawing/tc_area_chart.rb +39 -39
- data/test/drawing/tc_area_series.rb +71 -71
- data/test/drawing/tc_axes.rb +7 -7
- data/test/drawing/tc_axis.rb +112 -112
- data/test/drawing/tc_bar_3D_chart.rb +86 -71
- data/test/drawing/tc_bar_chart.rb +86 -71
- data/test/drawing/tc_bar_series.rb +46 -37
- data/test/drawing/tc_bubble_chart.rb +44 -44
- data/test/drawing/tc_bubble_series.rb +21 -21
- data/test/drawing/tc_cat_axis.rb +31 -31
- data/test/drawing/tc_cat_axis_data.rb +27 -27
- data/test/drawing/tc_chart.rb +123 -123
- data/test/drawing/tc_d_lbls.rb +57 -57
- data/test/drawing/tc_data_source.rb +23 -23
- data/test/drawing/tc_drawing.rb +80 -80
- data/test/drawing/tc_graphic_frame.rb +27 -27
- data/test/drawing/tc_hyperlink.rb +64 -64
- data/test/drawing/tc_line_3d_chart.rb +47 -47
- data/test/drawing/tc_line_chart.rb +39 -39
- data/test/drawing/tc_line_series.rb +71 -71
- data/test/drawing/tc_marker.rb +44 -44
- data/test/drawing/tc_named_axis_data.rb +27 -27
- data/test/drawing/tc_num_data.rb +31 -31
- data/test/drawing/tc_num_val.rb +29 -29
- data/test/drawing/tc_one_cell_anchor.rb +66 -66
- data/test/drawing/tc_pic.rb +103 -103
- data/test/drawing/tc_picture_locking.rb +72 -72
- data/test/drawing/tc_pie_3D_chart.rb +28 -28
- data/test/drawing/tc_pie_series.rb +33 -33
- data/test/drawing/tc_scaling.rb +36 -36
- data/test/drawing/tc_scatter_chart.rb +48 -48
- data/test/drawing/tc_scatter_series.rb +74 -56
- data/test/drawing/tc_ser_axis.rb +31 -31
- data/test/drawing/tc_series.rb +23 -23
- data/test/drawing/tc_series_title.rb +54 -54
- data/test/drawing/tc_str_data.rb +18 -18
- data/test/drawing/tc_str_val.rb +30 -30
- data/test/drawing/tc_title.rb +70 -70
- data/test/drawing/tc_two_cell_anchor.rb +36 -36
- data/test/drawing/tc_val_axis.rb +24 -24
- data/test/drawing/tc_view_3D.rb +54 -54
- data/test/drawing/tc_vml_drawing.rb +25 -25
- data/test/drawing/tc_vml_shape.rb +106 -106
- data/test/profile.rb +24 -24
- data/test/rels/tc_relationship.rb +52 -52
- data/test/rels/tc_relationships.rb +37 -37
- data/test/stylesheet/tc_border.rb +37 -37
- data/test/stylesheet/tc_border_pr.rb +32 -32
- data/test/stylesheet/tc_cell_alignment.rb +81 -81
- data/test/stylesheet/tc_cell_protection.rb +29 -29
- data/test/stylesheet/tc_cell_style.rb +57 -57
- data/test/stylesheet/tc_color.rb +43 -43
- data/test/stylesheet/tc_dxf.rb +81 -81
- data/test/stylesheet/tc_fill.rb +18 -18
- data/test/stylesheet/tc_font.rb +133 -133
- data/test/stylesheet/tc_gradient_fill.rb +72 -72
- data/test/stylesheet/tc_gradient_stop.rb +31 -31
- data/test/stylesheet/tc_num_fmt.rb +30 -30
- data/test/stylesheet/tc_pattern_fill.rb +43 -43
- data/test/stylesheet/tc_styles.rb +309 -261
- data/test/stylesheet/tc_table_style.rb +44 -44
- data/test/stylesheet/tc_table_style_element.rb +45 -45
- data/test/stylesheet/tc_table_styles.rb +29 -29
- data/test/stylesheet/tc_xf.rb +120 -120
- data/test/tc_axlsx.rb +109 -109
- data/test/tc_helper.rb +10 -12
- data/test/tc_package.rb +317 -264
- data/test/util/tc_mime_type_utils.rb +13 -13
- data/test/util/tc_serialized_attributes.rb +19 -19
- data/test/util/tc_simple_typed_list.rb +77 -77
- data/test/util/tc_validators.rb +210 -210
- data/test/workbook/tc_defined_name.rb +49 -49
- data/test/workbook/tc_shared_strings_table.rb +59 -59
- data/test/workbook/tc_workbook.rb +165 -160
- data/test/workbook/tc_workbook_view.rb +50 -50
- data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -38
- data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -76
- data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -50
- data/test/workbook/worksheet/tc_break.rb +49 -49
- data/test/workbook/worksheet/tc_cell.rb +465 -453
- data/test/workbook/worksheet/tc_cfvo.rb +31 -31
- data/test/workbook/worksheet/tc_col.rb +93 -93
- data/test/workbook/worksheet/tc_color_scale.rb +58 -58
- data/test/workbook/worksheet/tc_comment.rb +72 -72
- data/test/workbook/worksheet/tc_comments.rb +57 -57
- data/test/workbook/worksheet/tc_conditional_formatting.rb +224 -224
- data/test/workbook/worksheet/tc_data_bar.rb +46 -46
- data/test/workbook/worksheet/tc_data_validation.rb +265 -265
- data/test/workbook/worksheet/tc_date_time_converter.rb +124 -124
- data/test/workbook/worksheet/tc_header_footer.rb +151 -151
- data/test/workbook/worksheet/tc_icon_set.rb +45 -45
- data/test/workbook/worksheet/tc_outline_pr.rb +19 -19
- data/test/workbook/worksheet/tc_page_margins.rb +97 -97
- data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -15
- data/test/workbook/worksheet/tc_page_setup.rb +143 -143
- data/test/workbook/worksheet/tc_pane.rb +54 -54
- data/test/workbook/worksheet/tc_pivot_table.rb +180 -135
- data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +62 -54
- data/test/workbook/worksheet/tc_print_options.rb +72 -72
- data/test/workbook/worksheet/tc_protected_range.rb +17 -17
- data/test/workbook/worksheet/tc_rich_text.rb +44 -44
- data/test/workbook/worksheet/tc_rich_text_run.rb +173 -173
- data/test/workbook/worksheet/tc_row.rb +160 -139
- data/test/workbook/worksheet/tc_selection.rb +55 -55
- data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -18
- data/test/workbook/worksheet/tc_sheet_format_pr.rb +88 -88
- data/test/workbook/worksheet/tc_sheet_pr.rb +49 -49
- data/test/workbook/worksheet/tc_sheet_protection.rb +117 -117
- data/test/workbook/worksheet/tc_sheet_view.rb +214 -214
- data/test/workbook/worksheet/tc_table.rb +77 -67
- data/test/workbook/worksheet/tc_table_style_info.rb +53 -53
- data/test/workbook/worksheet/tc_worksheet.rb +632 -601
- data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +55 -55
- metadata +11 -11
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
module Axlsx
|
|
2
|
-
|
|
3
|
-
# the SheetCalcPr object for the worksheet
|
|
4
|
-
# This object contains calculation properties for the worksheet.
|
|
5
|
-
class SheetCalcPr
|
|
6
|
-
include Axlsx::OptionsParser
|
|
7
|
-
include Axlsx::SerializedAttributes
|
|
8
|
-
include Axlsx::Accessors
|
|
9
|
-
# creates a new SheetCalcPr
|
|
10
|
-
# @param [Hash] options Options for this object
|
|
11
|
-
# @option [Boolean] full_calc_on_load @see full_calc_on_load
|
|
12
|
-
def initialize(options={})
|
|
13
|
-
@full_calc_on_load = true
|
|
14
|
-
parse_options options
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
boolean_attr_accessor :full_calc_on_load
|
|
18
|
-
|
|
19
|
-
serializable_attributes :full_calc_on_load
|
|
20
|
-
|
|
21
|
-
# Serialize the object
|
|
22
|
-
# @param [String] str the string to append this objects serialized
|
|
23
|
-
# content to.
|
|
24
|
-
# @return [String]
|
|
25
|
-
def to_xml_string(str='')
|
|
26
|
-
str << "<sheetCalcPr #{serialized_attributes}/>"
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
1
|
+
module Axlsx
|
|
2
|
+
|
|
3
|
+
# the SheetCalcPr object for the worksheet
|
|
4
|
+
# This object contains calculation properties for the worksheet.
|
|
5
|
+
class SheetCalcPr
|
|
6
|
+
include Axlsx::OptionsParser
|
|
7
|
+
include Axlsx::SerializedAttributes
|
|
8
|
+
include Axlsx::Accessors
|
|
9
|
+
# creates a new SheetCalcPr
|
|
10
|
+
# @param [Hash] options Options for this object
|
|
11
|
+
# @option [Boolean] full_calc_on_load @see full_calc_on_load
|
|
12
|
+
def initialize(options={})
|
|
13
|
+
@full_calc_on_load = true
|
|
14
|
+
parse_options options
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
boolean_attr_accessor :full_calc_on_load
|
|
18
|
+
|
|
19
|
+
serializable_attributes :full_calc_on_load
|
|
20
|
+
|
|
21
|
+
# Serialize the object
|
|
22
|
+
# @param [String] str the string to append this objects serialized
|
|
23
|
+
# content to.
|
|
24
|
+
# @return [String]
|
|
25
|
+
def to_xml_string(str='')
|
|
26
|
+
str << "<sheetCalcPr #{serialized_attributes}/>"
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
module Axlsx
|
|
2
|
-
|
|
3
|
-
# This class manages the serialization of rows for worksheets
|
|
4
|
-
class SheetData
|
|
5
|
-
|
|
6
|
-
# Creates a new SheetData object
|
|
7
|
-
# @param [Worksheet] worksheet The worksheet that owns this sheet data.
|
|
8
|
-
def initialize(worksheet)
|
|
9
|
-
raise ArgumentError, "you must provide a worksheet" unless worksheet.is_a?(Worksheet)
|
|
10
|
-
@worksheet = worksheet
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
attr_reader :worksheet
|
|
14
|
-
|
|
15
|
-
# Serialize the sheet data
|
|
16
|
-
# @param [String] str the string this objects serializaton will be concacted to.
|
|
17
|
-
# @return [String]
|
|
18
|
-
def to_xml_string(str = '')
|
|
19
|
-
str << '<sheetData>'
|
|
20
|
-
worksheet.rows.each_with_index do |row, index|
|
|
21
|
-
row.to_xml_string(index, str)
|
|
22
|
-
end
|
|
23
|
-
str << '</sheetData>'
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
end
|
|
27
|
-
end
|
|
1
|
+
module Axlsx
|
|
2
|
+
|
|
3
|
+
# This class manages the serialization of rows for worksheets
|
|
4
|
+
class SheetData
|
|
5
|
+
|
|
6
|
+
# Creates a new SheetData object
|
|
7
|
+
# @param [Worksheet] worksheet The worksheet that owns this sheet data.
|
|
8
|
+
def initialize(worksheet)
|
|
9
|
+
raise ArgumentError, "you must provide a worksheet" unless worksheet.is_a?(Worksheet)
|
|
10
|
+
@worksheet = worksheet
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
attr_reader :worksheet
|
|
14
|
+
|
|
15
|
+
# Serialize the sheet data
|
|
16
|
+
# @param [String] str the string this objects serializaton will be concacted to.
|
|
17
|
+
# @return [String]
|
|
18
|
+
def to_xml_string(str = '')
|
|
19
|
+
str << '<sheetData>'
|
|
20
|
+
worksheet.rows.each_with_index do |row, index|
|
|
21
|
+
row.to_xml_string(index, str)
|
|
22
|
+
end
|
|
23
|
+
str << '</sheetData>'
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -1,87 +1,87 @@
|
|
|
1
|
-
module Axlsx
|
|
2
|
-
|
|
3
|
-
# The SheetPr class manages serialization of a worksheet's sheetPr element.
|
|
4
|
-
class SheetPr
|
|
5
|
-
include Axlsx::OptionsParser
|
|
6
|
-
include Axlsx::Accessors
|
|
7
|
-
include Axlsx::SerializedAttributes
|
|
8
|
-
|
|
9
|
-
serializable_attributes :sync_horizontal,
|
|
10
|
-
:sync_vertical,
|
|
11
|
-
:transition_evaluation,
|
|
12
|
-
:transition_entry,
|
|
13
|
-
:published,
|
|
14
|
-
:filter_mode,
|
|
15
|
-
:enable_format_conditions_calculation,
|
|
16
|
-
:code_name,
|
|
17
|
-
:sync_ref
|
|
18
|
-
|
|
19
|
-
# These attributes are all boolean so I'm doing a bit of a hand
|
|
20
|
-
# waving magic show to set up the attriubte accessors
|
|
21
|
-
boolean_attr_accessor :sync_horizontal,
|
|
22
|
-
:sync_vertical,
|
|
23
|
-
:transition_evaluation,
|
|
24
|
-
:transition_entry,
|
|
25
|
-
:published,
|
|
26
|
-
:filter_mode,
|
|
27
|
-
:enable_format_conditions_calculation
|
|
28
|
-
|
|
29
|
-
string_attr_accessor :code_name, :sync_ref
|
|
30
|
-
|
|
31
|
-
# Creates a new SheetPr object
|
|
32
|
-
# @param [Worksheet] worksheet The worksheet that owns this SheetPr object
|
|
33
|
-
def initialize(worksheet, options={})
|
|
34
|
-
raise ArgumentError, "you must provide a worksheet" unless worksheet.is_a?(Worksheet)
|
|
35
|
-
@worksheet = worksheet
|
|
36
|
-
@outline_pr = nil
|
|
37
|
-
parse_options options
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
# The worksheet these properties apply to!
|
|
41
|
-
# @return [Worksheet]
|
|
42
|
-
attr_reader :worksheet
|
|
43
|
-
|
|
44
|
-
# The tab color of the sheet.
|
|
45
|
-
# @return [Color]
|
|
46
|
-
attr_reader :tab_color
|
|
47
|
-
|
|
48
|
-
# Serialize the object
|
|
49
|
-
# @param [String] str serialized output will be appended to this object if provided.
|
|
50
|
-
# @return [String]
|
|
51
|
-
def to_xml_string(str = '')
|
|
52
|
-
update_properties
|
|
53
|
-
str << "<sheetPr #{serialized_attributes}>"
|
|
54
|
-
tab_color.to_xml_string(str, 'tabColor') if tab_color
|
|
55
|
-
outline_pr.to_xml_string(str) if @outline_pr
|
|
56
|
-
page_setup_pr.to_xml_string(str)
|
|
57
|
-
str << "</sheetPr>"
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
# The PageSetUpPr for this sheet pr object
|
|
61
|
-
# @return [PageSetUpPr]
|
|
62
|
-
def page_setup_pr
|
|
63
|
-
@page_setup_pr ||= PageSetUpPr.new
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
# The OutlinePr for this sheet pr object
|
|
67
|
-
# @return [OutlinePr]
|
|
68
|
-
def outline_pr
|
|
69
|
-
@outline_pr ||= OutlinePr.new
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
# @see tab_color
|
|
73
|
-
def tab_color=(v)
|
|
74
|
-
@tab_color ||= Color.new(:rgb => v)
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
private
|
|
78
|
-
|
|
79
|
-
def update_properties
|
|
80
|
-
page_setup_pr.fit_to_page = worksheet.fit_to_page?
|
|
81
|
-
if worksheet.auto_filter.columns.size > 0
|
|
82
|
-
self.filter_mode = 1
|
|
83
|
-
self.enable_format_conditions_calculation = 1
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
end
|
|
1
|
+
module Axlsx
|
|
2
|
+
|
|
3
|
+
# The SheetPr class manages serialization of a worksheet's sheetPr element.
|
|
4
|
+
class SheetPr
|
|
5
|
+
include Axlsx::OptionsParser
|
|
6
|
+
include Axlsx::Accessors
|
|
7
|
+
include Axlsx::SerializedAttributes
|
|
8
|
+
|
|
9
|
+
serializable_attributes :sync_horizontal,
|
|
10
|
+
:sync_vertical,
|
|
11
|
+
:transition_evaluation,
|
|
12
|
+
:transition_entry,
|
|
13
|
+
:published,
|
|
14
|
+
:filter_mode,
|
|
15
|
+
:enable_format_conditions_calculation,
|
|
16
|
+
:code_name,
|
|
17
|
+
:sync_ref
|
|
18
|
+
|
|
19
|
+
# These attributes are all boolean so I'm doing a bit of a hand
|
|
20
|
+
# waving magic show to set up the attriubte accessors
|
|
21
|
+
boolean_attr_accessor :sync_horizontal,
|
|
22
|
+
:sync_vertical,
|
|
23
|
+
:transition_evaluation,
|
|
24
|
+
:transition_entry,
|
|
25
|
+
:published,
|
|
26
|
+
:filter_mode,
|
|
27
|
+
:enable_format_conditions_calculation
|
|
28
|
+
|
|
29
|
+
string_attr_accessor :code_name, :sync_ref
|
|
30
|
+
|
|
31
|
+
# Creates a new SheetPr object
|
|
32
|
+
# @param [Worksheet] worksheet The worksheet that owns this SheetPr object
|
|
33
|
+
def initialize(worksheet, options={})
|
|
34
|
+
raise ArgumentError, "you must provide a worksheet" unless worksheet.is_a?(Worksheet)
|
|
35
|
+
@worksheet = worksheet
|
|
36
|
+
@outline_pr = nil
|
|
37
|
+
parse_options options
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# The worksheet these properties apply to!
|
|
41
|
+
# @return [Worksheet]
|
|
42
|
+
attr_reader :worksheet
|
|
43
|
+
|
|
44
|
+
# The tab color of the sheet.
|
|
45
|
+
# @return [Color]
|
|
46
|
+
attr_reader :tab_color
|
|
47
|
+
|
|
48
|
+
# Serialize the object
|
|
49
|
+
# @param [String] str serialized output will be appended to this object if provided.
|
|
50
|
+
# @return [String]
|
|
51
|
+
def to_xml_string(str = '')
|
|
52
|
+
update_properties
|
|
53
|
+
str << "<sheetPr #{serialized_attributes}>"
|
|
54
|
+
tab_color.to_xml_string(str, 'tabColor') if tab_color
|
|
55
|
+
outline_pr.to_xml_string(str) if @outline_pr
|
|
56
|
+
page_setup_pr.to_xml_string(str)
|
|
57
|
+
str << "</sheetPr>"
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# The PageSetUpPr for this sheet pr object
|
|
61
|
+
# @return [PageSetUpPr]
|
|
62
|
+
def page_setup_pr
|
|
63
|
+
@page_setup_pr ||= PageSetUpPr.new
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# The OutlinePr for this sheet pr object
|
|
67
|
+
# @return [OutlinePr]
|
|
68
|
+
def outline_pr
|
|
69
|
+
@outline_pr ||= OutlinePr.new
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# @see tab_color
|
|
73
|
+
def tab_color=(v)
|
|
74
|
+
@tab_color ||= Color.new(:rgb => v)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
private
|
|
78
|
+
|
|
79
|
+
def update_properties
|
|
80
|
+
page_setup_pr.fit_to_page = worksheet.fit_to_page?
|
|
81
|
+
if worksheet.auto_filter.columns.size > 0
|
|
82
|
+
self.filter_mode = 1
|
|
83
|
+
self.enable_format_conditions_calculation = 1
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
@@ -1,118 +1,118 @@
|
|
|
1
|
-
# encoding: UTF-8
|
|
2
|
-
module Axlsx
|
|
3
|
-
|
|
4
|
-
# The SheetProtection object manages worksheet protection options per sheet.
|
|
5
|
-
class SheetProtection
|
|
6
|
-
|
|
7
|
-
include Axlsx::OptionsParser
|
|
8
|
-
include Axlsx::SerializedAttributes
|
|
9
|
-
include Axlsx::Accessors
|
|
10
|
-
|
|
11
|
-
# Creates a new SheetProtection instance
|
|
12
|
-
# @option options [Boolean] sheet @see SheetProtection#sheet
|
|
13
|
-
# @option options [Boolean] objects @see SheetProtection#objects
|
|
14
|
-
# @option options [Boolean] scenarios @see SheetProtection#scenarios
|
|
15
|
-
# @option options [Boolean] format_cells @see SheetProtection#objects
|
|
16
|
-
# @option options [Boolean] format_columns @see SheetProtection#format_columns
|
|
17
|
-
# @option options [Boolean] format_rows @see SheetProtection#format_rows
|
|
18
|
-
# @option options [Boolean] insert_columns @see SheetProtection#insert_columns
|
|
19
|
-
# @option options [Boolean] insert_rows @see SheetProtection#insert_rows
|
|
20
|
-
# @option options [Boolean] insert_hyperlinks @see SheetProtection#insert_hyperlinks
|
|
21
|
-
# @option options [Boolean] delete_columns @see SheetProtection#delete_columns
|
|
22
|
-
# @option options [Boolean] delete_rows @see SheetProtection#delete_rows
|
|
23
|
-
# @option options [Boolean] select_locked_cells @see SheetProtection#select_locked_cells
|
|
24
|
-
# @option options [Boolean] sort @see SheetProtection#sort
|
|
25
|
-
# @option options [Boolean] auto_filter @see SheetProtection#auto_filter
|
|
26
|
-
# @option options [Boolean] pivot_tables @see SheetProtection#pivot_tables
|
|
27
|
-
# @option options [Boolean] select_unlocked_cells @see SheetProtection#select_unlocked_cells
|
|
28
|
-
# @option options [String] password. The password required for unlocking. @see SheetProtection#password=
|
|
29
|
-
def initialize(options={})
|
|
30
|
-
@objects = @scenarios = @select_locked_cells = @select_unlocked_cells = false
|
|
31
|
-
@sheet = @format_cells = @format_rows = @format_columns = @insert_columns = @insert_rows = @insert_hyperlinks = @delete_columns = @delete_rows = @sort = @auto_filter = @pivot_tables = true
|
|
32
|
-
@password = nil
|
|
33
|
-
parse_options options
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
boolean_attr_accessor :sheet, :objects, :scenarios, :format_cells, :format_columns, :format_rows,
|
|
37
|
-
:insert_columns, :insert_rows, :insert_hyperlinks, :delete_columns, :delete_rows,
|
|
38
|
-
:select_locked_cells, :sort, :auto_filter, :pivot_tables, :select_unlocked_cells
|
|
39
|
-
|
|
40
|
-
serializable_attributes :sheet, :objects, :scenarios, :format_cells, :format_columns, :format_rows,
|
|
41
|
-
:insert_columns, :insert_rows, :insert_hyperlinks, :delete_columns, :delete_rows,
|
|
42
|
-
:select_locked_cells, :sort, :auto_filter, :pivot_tables, :select_unlocked_cells, :salt, :password
|
|
43
|
-
|
|
44
|
-
# Specifies the salt which was prepended to the user-supplied password before it was hashed using the hashing algorithm
|
|
45
|
-
# @return [String]
|
|
46
|
-
attr_reader :salt_value
|
|
47
|
-
|
|
48
|
-
# Password hash
|
|
49
|
-
# @return [String]
|
|
50
|
-
# default nil
|
|
51
|
-
attr_reader :password
|
|
52
|
-
|
|
53
|
-
# This block is intended to implement the salt_value, hash_value and spin count as per the ECMA-376 standard.
|
|
54
|
-
# However, it does not seem to actually work in EXCEL - instead they are using their old retro algorithm shown below
|
|
55
|
-
# defined in the transitional portion of the speck. I am leaving this code in in the hope that someday Ill be able to
|
|
56
|
-
# figure out why it does not work, and if Excel even supports it.
|
|
57
|
-
# def propper_password=(v)
|
|
58
|
-
# @algorithm_name = v == nil ? nil : 'SHA-1'
|
|
59
|
-
# @salt_value = @spin_count = @hash_value = v if v == nil
|
|
60
|
-
# return if v == nil
|
|
61
|
-
# require 'digest/sha1'
|
|
62
|
-
# @spin_count = 10000
|
|
63
|
-
# @salt_value = Digest::SHA1.hexdigest(rand(36**8).to_s(36))
|
|
64
|
-
# @spin_count.times do |count|
|
|
65
|
-
# @hash_value = Digest::SHA1.hexdigest((@hash_value ||= (@salt_value + v.to_s)) + Array(count).pack('V'))
|
|
66
|
-
# end
|
|
67
|
-
# end
|
|
68
|
-
|
|
69
|
-
# encodes password for protection locking
|
|
70
|
-
def password=(v)
|
|
71
|
-
return if v == nil
|
|
72
|
-
@password = create_password_hash(v)
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
# Serialize the object
|
|
76
|
-
# @param [String] str
|
|
77
|
-
# @return [String]
|
|
78
|
-
def to_xml_string(str = '')
|
|
79
|
-
serialized_tag('sheetProtection', str)
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
private
|
|
83
|
-
# Creates a password hash for a given password
|
|
84
|
-
# @return [String]
|
|
85
|
-
def create_password_hash(password)
|
|
86
|
-
encoded_password = encode_password(password)
|
|
87
|
-
|
|
88
|
-
password_as_hex = [encoded_password].pack("v")
|
|
89
|
-
password_as_string = password_as_hex.unpack("H*").first.upcase
|
|
90
|
-
|
|
91
|
-
password_as_string[2..3] + password_as_string[0..1]
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
# Encodes a given password
|
|
95
|
-
# Based on the algorithm provided by Daniel Rentz of OpenOffice.
|
|
96
|
-
# http://www.openoffice.org/sc/excelfileformat.pdf, Revision 1.42, page 115 (21.05.2012)
|
|
97
|
-
# @return [String]
|
|
98
|
-
def encode_password(password)
|
|
99
|
-
i = 0
|
|
100
|
-
chars = password.split(//)
|
|
101
|
-
count = chars.size
|
|
102
|
-
|
|
103
|
-
chars.collect! do |char|
|
|
104
|
-
i += 1
|
|
105
|
-
char = char.unpack('c')[0] << i #ord << i
|
|
106
|
-
low_15 = char & 0x7fff
|
|
107
|
-
high_15 = char & 0x7fff << 15
|
|
108
|
-
high_15 = high_15 >> 15
|
|
109
|
-
char = low_15 | high_15
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
encoded_password = 0x0000
|
|
113
|
-
chars.each { |c| encoded_password ^= c }
|
|
114
|
-
encoded_password ^= count
|
|
115
|
-
encoded_password ^= 0xCE4B
|
|
116
|
-
end
|
|
117
|
-
end
|
|
118
|
-
end
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
module Axlsx
|
|
3
|
+
|
|
4
|
+
# The SheetProtection object manages worksheet protection options per sheet.
|
|
5
|
+
class SheetProtection
|
|
6
|
+
|
|
7
|
+
include Axlsx::OptionsParser
|
|
8
|
+
include Axlsx::SerializedAttributes
|
|
9
|
+
include Axlsx::Accessors
|
|
10
|
+
|
|
11
|
+
# Creates a new SheetProtection instance
|
|
12
|
+
# @option options [Boolean] sheet @see SheetProtection#sheet
|
|
13
|
+
# @option options [Boolean] objects @see SheetProtection#objects
|
|
14
|
+
# @option options [Boolean] scenarios @see SheetProtection#scenarios
|
|
15
|
+
# @option options [Boolean] format_cells @see SheetProtection#objects
|
|
16
|
+
# @option options [Boolean] format_columns @see SheetProtection#format_columns
|
|
17
|
+
# @option options [Boolean] format_rows @see SheetProtection#format_rows
|
|
18
|
+
# @option options [Boolean] insert_columns @see SheetProtection#insert_columns
|
|
19
|
+
# @option options [Boolean] insert_rows @see SheetProtection#insert_rows
|
|
20
|
+
# @option options [Boolean] insert_hyperlinks @see SheetProtection#insert_hyperlinks
|
|
21
|
+
# @option options [Boolean] delete_columns @see SheetProtection#delete_columns
|
|
22
|
+
# @option options [Boolean] delete_rows @see SheetProtection#delete_rows
|
|
23
|
+
# @option options [Boolean] select_locked_cells @see SheetProtection#select_locked_cells
|
|
24
|
+
# @option options [Boolean] sort @see SheetProtection#sort
|
|
25
|
+
# @option options [Boolean] auto_filter @see SheetProtection#auto_filter
|
|
26
|
+
# @option options [Boolean] pivot_tables @see SheetProtection#pivot_tables
|
|
27
|
+
# @option options [Boolean] select_unlocked_cells @see SheetProtection#select_unlocked_cells
|
|
28
|
+
# @option options [String] password. The password required for unlocking. @see SheetProtection#password=
|
|
29
|
+
def initialize(options={})
|
|
30
|
+
@objects = @scenarios = @select_locked_cells = @select_unlocked_cells = false
|
|
31
|
+
@sheet = @format_cells = @format_rows = @format_columns = @insert_columns = @insert_rows = @insert_hyperlinks = @delete_columns = @delete_rows = @sort = @auto_filter = @pivot_tables = true
|
|
32
|
+
@password = nil
|
|
33
|
+
parse_options options
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
boolean_attr_accessor :sheet, :objects, :scenarios, :format_cells, :format_columns, :format_rows,
|
|
37
|
+
:insert_columns, :insert_rows, :insert_hyperlinks, :delete_columns, :delete_rows,
|
|
38
|
+
:select_locked_cells, :sort, :auto_filter, :pivot_tables, :select_unlocked_cells
|
|
39
|
+
|
|
40
|
+
serializable_attributes :sheet, :objects, :scenarios, :format_cells, :format_columns, :format_rows,
|
|
41
|
+
:insert_columns, :insert_rows, :insert_hyperlinks, :delete_columns, :delete_rows,
|
|
42
|
+
:select_locked_cells, :sort, :auto_filter, :pivot_tables, :select_unlocked_cells, :salt, :password
|
|
43
|
+
|
|
44
|
+
# Specifies the salt which was prepended to the user-supplied password before it was hashed using the hashing algorithm
|
|
45
|
+
# @return [String]
|
|
46
|
+
attr_reader :salt_value
|
|
47
|
+
|
|
48
|
+
# Password hash
|
|
49
|
+
# @return [String]
|
|
50
|
+
# default nil
|
|
51
|
+
attr_reader :password
|
|
52
|
+
|
|
53
|
+
# This block is intended to implement the salt_value, hash_value and spin count as per the ECMA-376 standard.
|
|
54
|
+
# However, it does not seem to actually work in EXCEL - instead they are using their old retro algorithm shown below
|
|
55
|
+
# defined in the transitional portion of the speck. I am leaving this code in in the hope that someday Ill be able to
|
|
56
|
+
# figure out why it does not work, and if Excel even supports it.
|
|
57
|
+
# def propper_password=(v)
|
|
58
|
+
# @algorithm_name = v == nil ? nil : 'SHA-1'
|
|
59
|
+
# @salt_value = @spin_count = @hash_value = v if v == nil
|
|
60
|
+
# return if v == nil
|
|
61
|
+
# require 'digest/sha1'
|
|
62
|
+
# @spin_count = 10000
|
|
63
|
+
# @salt_value = Digest::SHA1.hexdigest(rand(36**8).to_s(36))
|
|
64
|
+
# @spin_count.times do |count|
|
|
65
|
+
# @hash_value = Digest::SHA1.hexdigest((@hash_value ||= (@salt_value + v.to_s)) + Array(count).pack('V'))
|
|
66
|
+
# end
|
|
67
|
+
# end
|
|
68
|
+
|
|
69
|
+
# encodes password for protection locking
|
|
70
|
+
def password=(v)
|
|
71
|
+
return if v == nil
|
|
72
|
+
@password = create_password_hash(v)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Serialize the object
|
|
76
|
+
# @param [String] str
|
|
77
|
+
# @return [String]
|
|
78
|
+
def to_xml_string(str = '')
|
|
79
|
+
serialized_tag('sheetProtection', str)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
private
|
|
83
|
+
# Creates a password hash for a given password
|
|
84
|
+
# @return [String]
|
|
85
|
+
def create_password_hash(password)
|
|
86
|
+
encoded_password = encode_password(password)
|
|
87
|
+
|
|
88
|
+
password_as_hex = [encoded_password].pack("v")
|
|
89
|
+
password_as_string = password_as_hex.unpack("H*").first.upcase
|
|
90
|
+
|
|
91
|
+
password_as_string[2..3] + password_as_string[0..1]
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# Encodes a given password
|
|
95
|
+
# Based on the algorithm provided by Daniel Rentz of OpenOffice.
|
|
96
|
+
# http://www.openoffice.org/sc/excelfileformat.pdf, Revision 1.42, page 115 (21.05.2012)
|
|
97
|
+
# @return [String]
|
|
98
|
+
def encode_password(password)
|
|
99
|
+
i = 0
|
|
100
|
+
chars = password.split(//)
|
|
101
|
+
count = chars.size
|
|
102
|
+
|
|
103
|
+
chars.collect! do |char|
|
|
104
|
+
i += 1
|
|
105
|
+
char = char.unpack('c')[0] << i #ord << i
|
|
106
|
+
low_15 = char & 0x7fff
|
|
107
|
+
high_15 = char & 0x7fff << 15
|
|
108
|
+
high_15 = high_15 >> 15
|
|
109
|
+
char = low_15 | high_15
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
encoded_password = 0x0000
|
|
113
|
+
chars.each { |c| encoded_password ^= c }
|
|
114
|
+
encoded_password ^= count
|
|
115
|
+
encoded_password ^= 0xCE4B
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|