caxlsx 3.4.1 → 4.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 +4 -4
- data/CHANGELOG.md +16 -1
- data/README.md +9 -11
- data/Rakefile +7 -5
- data/lib/axlsx/content_type/abstract_content_type.rb +9 -4
- data/lib/axlsx/content_type/content_type.rb +7 -5
- data/lib/axlsx/content_type/default.rb +4 -2
- data/lib/axlsx/content_type/override.rb +4 -2
- data/lib/axlsx/doc_props/app.rb +26 -24
- data/lib/axlsx/doc_props/core.rb +8 -6
- data/lib/axlsx/drawing/area_chart.rb +10 -8
- data/lib/axlsx/drawing/area_series.rb +12 -10
- data/lib/axlsx/drawing/ax_data_source.rb +2 -0
- data/lib/axlsx/drawing/axes.rb +6 -4
- data/lib/axlsx/drawing/axis.rb +21 -19
- data/lib/axlsx/drawing/bar_3D_chart.rb +14 -12
- data/lib/axlsx/drawing/bar_chart.rb +13 -11
- data/lib/axlsx/drawing/bar_series.rb +8 -6
- data/lib/axlsx/drawing/bubble_chart.rb +6 -4
- data/lib/axlsx/drawing/bubble_series.rb +8 -6
- data/lib/axlsx/drawing/cat_axis.rb +12 -10
- data/lib/axlsx/drawing/chart.rb +20 -18
- data/lib/axlsx/drawing/d_lbls.rb +7 -5
- data/lib/axlsx/drawing/drawing.rb +58 -56
- data/lib/axlsx/drawing/graphic_frame.rb +6 -4
- data/lib/axlsx/drawing/hyperlink.rb +10 -8
- data/lib/axlsx/drawing/line_3D_chart.rb +7 -5
- data/lib/axlsx/drawing/line_chart.rb +10 -8
- data/lib/axlsx/drawing/line_series.rb +12 -10
- data/lib/axlsx/drawing/marker.rb +9 -7
- data/lib/axlsx/drawing/num_data.rb +9 -7
- data/lib/axlsx/drawing/num_data_source.rb +9 -7
- data/lib/axlsx/drawing/num_val.rb +7 -5
- data/lib/axlsx/drawing/one_cell_anchor.rb +7 -5
- data/lib/axlsx/drawing/pic.rb +16 -14
- data/lib/axlsx/drawing/picture_locking.rb +3 -1
- data/lib/axlsx/drawing/pie_3D_chart.rb +5 -3
- data/lib/axlsx/drawing/pie_series.rb +8 -6
- data/lib/axlsx/drawing/scaling.rb +8 -6
- data/lib/axlsx/drawing/scatter_chart.rb +7 -5
- data/lib/axlsx/drawing/scatter_series.rb +14 -12
- data/lib/axlsx/drawing/ser_axis.rb +7 -5
- data/lib/axlsx/drawing/series.rb +6 -4
- data/lib/axlsx/drawing/series_title.rb +6 -4
- data/lib/axlsx/drawing/str_data.rb +7 -5
- data/lib/axlsx/drawing/str_val.rb +6 -4
- data/lib/axlsx/drawing/title.rb +13 -14
- data/lib/axlsx/drawing/two_cell_anchor.rb +4 -2
- data/lib/axlsx/drawing/val_axis.rb +4 -2
- data/lib/axlsx/drawing/view_3D.rb +9 -7
- data/lib/axlsx/drawing/vml_drawing.rb +18 -16
- data/lib/axlsx/drawing/vml_shape.rb +24 -22
- data/lib/axlsx/package.rb +69 -66
- data/lib/axlsx/rels/relationship.rb +10 -5
- data/lib/axlsx/rels/relationships.rb +5 -3
- data/lib/axlsx/stylesheet/border.rb +6 -4
- data/lib/axlsx/stylesheet/border_pr.rb +5 -3
- data/lib/axlsx/stylesheet/cell_alignment.rb +12 -10
- data/lib/axlsx/stylesheet/cell_protection.rb +5 -3
- data/lib/axlsx/stylesheet/cell_style.rb +10 -8
- data/lib/axlsx/stylesheet/color.rb +9 -7
- data/lib/axlsx/stylesheet/dxf.rb +5 -3
- data/lib/axlsx/stylesheet/fill.rb +3 -1
- data/lib/axlsx/stylesheet/font.rb +18 -16
- data/lib/axlsx/stylesheet/gradient_fill.rb +6 -4
- data/lib/axlsx/stylesheet/gradient_stop.rb +6 -4
- data/lib/axlsx/stylesheet/num_fmt.rb +8 -10
- data/lib/axlsx/stylesheet/pattern_fill.rb +5 -3
- data/lib/axlsx/stylesheet/styles.rb +69 -71
- data/lib/axlsx/stylesheet/table_style.rb +7 -5
- data/lib/axlsx/stylesheet/table_style_element.rb +6 -4
- data/lib/axlsx/stylesheet/table_styles.rb +6 -4
- data/lib/axlsx/stylesheet/xf.rb +18 -16
- data/lib/axlsx/util/accessors.rb +4 -2
- data/lib/axlsx/util/buffered_zip_output_stream.rb +60 -0
- data/lib/axlsx/util/constants.rb +117 -104
- data/lib/axlsx/util/mime_type_utils.rb +3 -5
- data/lib/axlsx/util/options_parser.rb +3 -1
- data/lib/axlsx/util/serialized_attributes.rb +42 -17
- data/lib/axlsx/util/simple_typed_list.rb +47 -47
- data/lib/axlsx/util/storage.rb +11 -10
- data/lib/axlsx/util/validators.rb +101 -41
- data/lib/axlsx/util/zip_command.rb +10 -10
- data/lib/axlsx/version.rb +3 -1
- data/lib/axlsx/workbook/defined_name.rb +6 -4
- data/lib/axlsx/workbook/defined_names.rb +3 -1
- data/lib/axlsx/workbook/shared_strings_table.rb +8 -6
- data/lib/axlsx/workbook/workbook.rb +78 -76
- data/lib/axlsx/workbook/workbook_view.rb +3 -1
- data/lib/axlsx/workbook/workbook_views.rb +3 -1
- data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +65 -8
- data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +7 -3
- data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +11 -7
- data/lib/axlsx/workbook/worksheet/auto_filter/sort_condition.rb +51 -0
- data/lib/axlsx/workbook/worksheet/auto_filter/sort_state.rb +56 -0
- data/lib/axlsx/workbook/worksheet/border_creator.rb +5 -3
- data/lib/axlsx/workbook/worksheet/break.rb +3 -1
- data/lib/axlsx/workbook/worksheet/cell.rb +53 -54
- data/lib/axlsx/workbook/worksheet/cell_serializer.rb +31 -27
- data/lib/axlsx/workbook/worksheet/cfvo.rb +5 -3
- data/lib/axlsx/workbook/worksheet/cfvos.rb +3 -1
- data/lib/axlsx/workbook/worksheet/col.rb +5 -3
- data/lib/axlsx/workbook/worksheet/col_breaks.rb +5 -3
- data/lib/axlsx/workbook/worksheet/color_scale.rb +12 -10
- data/lib/axlsx/workbook/worksheet/cols.rb +3 -1
- data/lib/axlsx/workbook/worksheet/comment.rb +8 -6
- data/lib/axlsx/workbook/worksheet/comments.rb +6 -4
- data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +9 -4
- data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +18 -16
- data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +3 -1
- data/lib/axlsx/workbook/worksheet/data_bar.rb +14 -13
- data/lib/axlsx/workbook/worksheet/data_validation.rb +30 -28
- data/lib/axlsx/workbook/worksheet/data_validations.rb +3 -1
- data/lib/axlsx/workbook/worksheet/date_time_converter.rb +7 -5
- data/lib/axlsx/workbook/worksheet/dimension.rb +4 -2
- data/lib/axlsx/workbook/worksheet/header_footer.rb +4 -2
- data/lib/axlsx/workbook/worksheet/icon_set.rb +23 -6
- data/lib/axlsx/workbook/worksheet/merged_cells.rb +5 -5
- data/lib/axlsx/workbook/worksheet/outline_pr.rb +6 -2
- data/lib/axlsx/workbook/worksheet/page_margins.rb +15 -10
- data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +6 -2
- data/lib/axlsx/workbook/worksheet/page_setup.rb +11 -9
- data/lib/axlsx/workbook/worksheet/pane.rb +11 -9
- data/lib/axlsx/workbook/worksheet/pivot_table.rb +20 -19
- data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +8 -6
- data/lib/axlsx/workbook/worksheet/pivot_tables.rb +2 -0
- data/lib/axlsx/workbook/worksheet/print_options.rb +3 -1
- data/lib/axlsx/workbook/worksheet/protected_range.rb +3 -1
- data/lib/axlsx/workbook/worksheet/protected_ranges.rb +5 -3
- data/lib/axlsx/workbook/worksheet/rich_text.rb +3 -1
- data/lib/axlsx/workbook/worksheet/rich_text_run.rb +16 -14
- data/lib/axlsx/workbook/worksheet/row.rb +6 -7
- data/lib/axlsx/workbook/worksheet/row_breaks.rb +6 -4
- data/lib/axlsx/workbook/worksheet/selection.rb +9 -7
- data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +6 -2
- data/lib/axlsx/workbook/worksheet/sheet_data.rb +3 -1
- data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +6 -2
- data/lib/axlsx/workbook/worksheet/sheet_pr.rb +8 -4
- data/lib/axlsx/workbook/worksheet/sheet_protection.rb +10 -8
- data/lib/axlsx/workbook/worksheet/sheet_view.rb +15 -13
- data/lib/axlsx/workbook/worksheet/table.rb +9 -7
- data/lib/axlsx/workbook/worksheet/table_style_info.rb +4 -2
- data/lib/axlsx/workbook/worksheet/tables.rb +3 -1
- data/lib/axlsx/workbook/worksheet/worksheet.rb +38 -37
- data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +4 -2
- data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +8 -2
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +6 -4
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +4 -2
- data/lib/axlsx.rb +56 -42
- data/lib/caxlsx.rb +3 -1
- metadata +49 -43
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Axlsx
|
|
2
4
|
# A simple list of merged cells
|
|
3
5
|
class MergedCells < SimpleTypedList
|
|
@@ -10,23 +12,21 @@ module Axlsx
|
|
|
10
12
|
end
|
|
11
13
|
|
|
12
14
|
# adds cells to the merged cells collection
|
|
13
|
-
# @param [Array
|
|
15
|
+
# @param [Array|String] cells The cells to add to the merged cells
|
|
14
16
|
# collection. This can be an array of actual cells or a string style
|
|
15
17
|
# range like 'A1:C1'
|
|
16
18
|
def add(cells)
|
|
17
19
|
self << if cells.is_a?(String)
|
|
18
20
|
cells
|
|
19
21
|
elsif cells.is_a?(Array)
|
|
20
|
-
Axlsx
|
|
21
|
-
elsif cells.is_a?(Row)
|
|
22
|
-
Axlsx::cell_range(cells, false)
|
|
22
|
+
Axlsx.cell_range(cells, false)
|
|
23
23
|
end
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
# serialize the object
|
|
27
27
|
# @param [String] str
|
|
28
28
|
# @return [String]
|
|
29
|
-
def to_xml_string(str = '')
|
|
29
|
+
def to_xml_string(str = +'')
|
|
30
30
|
return if empty?
|
|
31
31
|
|
|
32
32
|
str << "<mergeCells count='#{size}'>"
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Axlsx
|
|
2
4
|
# The OutlinePr class manages serialization of a worksheet's outlinePr element, which provides various
|
|
3
5
|
# options to control outlining.
|
|
@@ -25,8 +27,10 @@ module Axlsx
|
|
|
25
27
|
# Serialize the object
|
|
26
28
|
# @param [String] str serialized output will be appended to this object if provided.
|
|
27
29
|
# @return [String]
|
|
28
|
-
def to_xml_string(str = '')
|
|
29
|
-
str <<
|
|
30
|
+
def to_xml_string(str = +'')
|
|
31
|
+
str << '<outlinePr '
|
|
32
|
+
serialized_attributes(str)
|
|
33
|
+
str << '/>'
|
|
30
34
|
end
|
|
31
35
|
end
|
|
32
36
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Axlsx
|
|
2
4
|
# PageMargins specify the margins when printing a worksheet.
|
|
3
5
|
#
|
|
@@ -27,7 +29,10 @@ module Axlsx
|
|
|
27
29
|
parse_options options
|
|
28
30
|
end
|
|
29
31
|
|
|
30
|
-
|
|
32
|
+
# Possible margins to set
|
|
33
|
+
MARGIN_KEYS = [:left, :right, :top, :bottom, :header, :footer].freeze
|
|
34
|
+
|
|
35
|
+
serializable_attributes(*MARGIN_KEYS)
|
|
31
36
|
|
|
32
37
|
# Default left and right margin (in inches)
|
|
33
38
|
DEFAULT_LEFT_RIGHT = 0.75
|
|
@@ -63,34 +68,34 @@ module Axlsx
|
|
|
63
68
|
attr_reader :footer
|
|
64
69
|
|
|
65
70
|
# Set some or all margins at once.
|
|
66
|
-
# @param [Hash] margins the margins to set
|
|
71
|
+
# @param [Hash] margins the margins to set. See {MARGIN_KEYS} for a list of possible keys.
|
|
67
72
|
def set(margins)
|
|
68
73
|
margins.select do |k, v|
|
|
69
|
-
next unless
|
|
74
|
+
next unless MARGIN_KEYS.include? k
|
|
70
75
|
|
|
71
76
|
send("#{k}=", v)
|
|
72
77
|
end
|
|
73
78
|
end
|
|
74
79
|
|
|
75
80
|
# @see left
|
|
76
|
-
def left=(v); Axlsx
|
|
81
|
+
def left=(v); Axlsx.validate_unsigned_numeric(v); @left = v end
|
|
77
82
|
# @see right
|
|
78
|
-
def right=(v); Axlsx
|
|
83
|
+
def right=(v); Axlsx.validate_unsigned_numeric(v); @right = v end
|
|
79
84
|
# @see top
|
|
80
|
-
def top=(v); Axlsx
|
|
85
|
+
def top=(v); Axlsx.validate_unsigned_numeric(v); @top = v end
|
|
81
86
|
# @see bottom
|
|
82
|
-
def bottom=(v); Axlsx
|
|
87
|
+
def bottom=(v); Axlsx.validate_unsigned_numeric(v); @bottom = v end
|
|
83
88
|
# @see header
|
|
84
|
-
def header=(v); Axlsx
|
|
89
|
+
def header=(v); Axlsx.validate_unsigned_numeric(v); @header = v end
|
|
85
90
|
# @see footer
|
|
86
|
-
def footer=(v); Axlsx
|
|
91
|
+
def footer=(v); Axlsx.validate_unsigned_numeric(v); @footer = v end
|
|
87
92
|
|
|
88
93
|
# Serializes the page margins element
|
|
89
94
|
# @param [String] str
|
|
90
95
|
# @return [String]
|
|
91
96
|
# @note For compatibility, this is a noop unless custom margins have been specified.
|
|
92
97
|
# @see #custom_margins_specified?
|
|
93
|
-
def to_xml_string(str = '')
|
|
98
|
+
def to_xml_string(str = +'')
|
|
94
99
|
serialized_tag('pageMargins', str)
|
|
95
100
|
end
|
|
96
101
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Axlsx
|
|
2
4
|
# Page setup properties of the worksheet
|
|
3
5
|
# This class name is not a typo, its spec.
|
|
@@ -35,8 +37,10 @@ module Axlsx
|
|
|
35
37
|
end
|
|
36
38
|
|
|
37
39
|
# serialize to xml
|
|
38
|
-
def to_xml_string(str = '')
|
|
39
|
-
str <<
|
|
40
|
+
def to_xml_string(str = +'')
|
|
41
|
+
str << '<pageSetUpPr '
|
|
42
|
+
serialized_attributes(str)
|
|
43
|
+
str << '/>'
|
|
40
44
|
end
|
|
41
45
|
end
|
|
42
46
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Axlsx
|
|
2
4
|
# Page setup settings for printing a worksheet. All settings are optional.
|
|
3
5
|
#
|
|
@@ -196,17 +198,17 @@ module Axlsx
|
|
|
196
198
|
end
|
|
197
199
|
|
|
198
200
|
# @see fit_to_height
|
|
199
|
-
def fit_to_height=(v); Axlsx
|
|
201
|
+
def fit_to_height=(v); Axlsx.validate_unsigned_int(v); @fit_to_height = v; end
|
|
200
202
|
# @see fit_to_width
|
|
201
|
-
def fit_to_width=(v); Axlsx
|
|
203
|
+
def fit_to_width=(v); Axlsx.validate_unsigned_int(v); @fit_to_width = v; end
|
|
202
204
|
# @see orientation
|
|
203
|
-
def orientation=(v); Axlsx
|
|
205
|
+
def orientation=(v); Axlsx.validate_page_orientation(v); @orientation = v; end
|
|
204
206
|
# @see paper_height
|
|
205
|
-
def paper_height=(v); Axlsx
|
|
207
|
+
def paper_height=(v); Axlsx.validate_number_with_unit(v); @paper_height = v; end
|
|
206
208
|
# @see paper_width
|
|
207
|
-
def paper_width=(v); Axlsx
|
|
209
|
+
def paper_width=(v); Axlsx.validate_number_with_unit(v); @paper_width = v; end
|
|
208
210
|
# @see scale
|
|
209
|
-
def scale=(v); Axlsx
|
|
211
|
+
def scale=(v); Axlsx.validate_scale_10_400(v); @scale = v; end
|
|
210
212
|
|
|
211
213
|
# convenience method to achieve sanity when setting fit_to_width and fit_to_height
|
|
212
214
|
# as they both default to 1 if only their counterpart is specified.
|
|
@@ -223,14 +225,14 @@ module Axlsx
|
|
|
223
225
|
# We treat any page set up that has a value set for fit_to_width or fit_to_height value as fit_to_page.
|
|
224
226
|
# @return [Boolean]
|
|
225
227
|
def fit_to_page?
|
|
226
|
-
# is there some better
|
|
227
|
-
(fit_to_width
|
|
228
|
+
# is there some better way to express this?
|
|
229
|
+
(!fit_to_width.nil? || !fit_to_height.nil?)
|
|
228
230
|
end
|
|
229
231
|
|
|
230
232
|
# Serializes the page settings element.
|
|
231
233
|
# @param [String] str
|
|
232
234
|
# @return [String]
|
|
233
|
-
def to_xml_string(str = '')
|
|
235
|
+
def to_xml_string(str = +'')
|
|
234
236
|
serialized_tag('pageSetup', str)
|
|
235
237
|
end
|
|
236
238
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Axlsx
|
|
2
4
|
# Pane options for a worksheet.
|
|
3
5
|
#
|
|
@@ -94,33 +96,33 @@ module Axlsx
|
|
|
94
96
|
|
|
95
97
|
# @see active_pane
|
|
96
98
|
def active_pane=(v)
|
|
97
|
-
Axlsx
|
|
98
|
-
@active_pane = Axlsx
|
|
99
|
+
Axlsx.validate_pane_type(v)
|
|
100
|
+
@active_pane = Axlsx.camel(v.to_s, false)
|
|
99
101
|
end
|
|
100
102
|
|
|
101
103
|
# @see state
|
|
102
104
|
def state=(v)
|
|
103
|
-
Axlsx
|
|
104
|
-
@state = Axlsx
|
|
105
|
+
Axlsx.validate_split_state_type(v)
|
|
106
|
+
@state = Axlsx.camel(v.to_s, false)
|
|
105
107
|
end
|
|
106
108
|
|
|
107
109
|
# @see top_left_cell
|
|
108
110
|
def top_left_cell=(v)
|
|
109
|
-
cell = (v.
|
|
110
|
-
Axlsx
|
|
111
|
+
cell = (v.instance_of?(Axlsx::Cell) ? v.r_abs : v)
|
|
112
|
+
Axlsx.validate_string(cell)
|
|
111
113
|
@top_left_cell = cell
|
|
112
114
|
end
|
|
113
115
|
|
|
114
116
|
# @see x_split
|
|
115
|
-
def x_split=(v); Axlsx
|
|
117
|
+
def x_split=(v); Axlsx.validate_unsigned_int(v); @x_split = v end
|
|
116
118
|
|
|
117
119
|
# @see y_split
|
|
118
|
-
def y_split=(v); Axlsx
|
|
120
|
+
def y_split=(v); Axlsx.validate_unsigned_int(v); @y_split = v end
|
|
119
121
|
|
|
120
122
|
# Serializes the data validation
|
|
121
123
|
# @param [String] str
|
|
122
124
|
# @return [String]
|
|
123
|
-
def to_xml_string(str = '')
|
|
125
|
+
def to_xml_string(str = +'')
|
|
124
126
|
finalize
|
|
125
127
|
serialized_tag 'pane', str
|
|
126
128
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Axlsx
|
|
2
4
|
# Table
|
|
3
5
|
# @note Worksheet#add_pivot_table is the recommended way to create tables for your worksheets.
|
|
@@ -122,7 +124,7 @@ module Axlsx
|
|
|
122
124
|
@data = []
|
|
123
125
|
v.each do |data_field|
|
|
124
126
|
if data_field.is_a? String
|
|
125
|
-
data_field = { :
|
|
127
|
+
data_field = { ref: data_field }
|
|
126
128
|
end
|
|
127
129
|
data_field.each do |key, value|
|
|
128
130
|
if key == :num_fmt
|
|
@@ -133,7 +135,6 @@ module Axlsx
|
|
|
133
135
|
end
|
|
134
136
|
@data << data_field
|
|
135
137
|
end
|
|
136
|
-
@data
|
|
137
138
|
end
|
|
138
139
|
|
|
139
140
|
# The pages
|
|
@@ -158,13 +159,13 @@ module Axlsx
|
|
|
158
159
|
# The part name for this table
|
|
159
160
|
# @return [String]
|
|
160
161
|
def pn
|
|
161
|
-
|
|
162
|
+
format(PIVOT_TABLE_PN, index + 1)
|
|
162
163
|
end
|
|
163
164
|
|
|
164
165
|
# The relationship part name of this pivot table
|
|
165
166
|
# @return [String]
|
|
166
167
|
def rels_pn
|
|
167
|
-
|
|
168
|
+
format(PIVOT_TABLE_RELS_PN, index + 1)
|
|
168
169
|
end
|
|
169
170
|
|
|
170
171
|
# The cache_definition for this pivot table
|
|
@@ -184,13 +185,13 @@ module Axlsx
|
|
|
184
185
|
# Serializes the object
|
|
185
186
|
# @param [String] str
|
|
186
187
|
# @return [String]
|
|
187
|
-
def to_xml_string(str = '')
|
|
188
|
+
def to_xml_string(str = +'')
|
|
188
189
|
str << '<?xml version="1.0" encoding="UTF-8"?>'
|
|
189
190
|
|
|
190
|
-
str <<
|
|
191
|
+
str << '<pivotTableDefinition xmlns="' << XML_NS << '" name="' << name << '" cacheId="' << cache_definition.cache_id.to_s << '"' << (data.size <= 1 ? ' dataOnRows="1"' : '') << ' applyNumberFormats="0" applyBorderFormats="0" applyFontFormats="0" applyPatternFormats="0" applyAlignmentFormats="0" applyWidthHeightFormats="1" dataCaption="Data" showMultipleLabel="0" showMemberPropertyTips="0" useAutoFormatting="1" indent="0" compact="0" compactData="0" gridDropZones="1" multipleFieldFilters="0">'
|
|
191
192
|
|
|
192
|
-
str <<
|
|
193
|
-
str <<
|
|
193
|
+
str << '<location firstDataCol="1" firstDataRow="1" firstHeaderRow="1" ref="' << ref << '"/>'
|
|
194
|
+
str << '<pivotFields count="' << header_cells_count.to_s << '">'
|
|
194
195
|
|
|
195
196
|
header_cell_values.each do |cell_value|
|
|
196
197
|
subtotal = !no_subtotals_on_headers.include?(cell_value)
|
|
@@ -203,13 +204,13 @@ module Axlsx
|
|
|
203
204
|
str << '<rowFields count="1"><field x="-2"/></rowFields>'
|
|
204
205
|
str << '<rowItems count="2"><i><x/></i> <i i="1"><x v="1"/></i></rowItems>'
|
|
205
206
|
else
|
|
206
|
-
str <<
|
|
207
|
+
str << '<rowFields count="' << rows.size.to_s << '">'
|
|
207
208
|
rows.each do |row_value|
|
|
208
|
-
str <<
|
|
209
|
+
str << '<field x="' << header_index_of(row_value).to_s << '"/>'
|
|
209
210
|
end
|
|
210
211
|
str << '</rowFields>'
|
|
211
|
-
str <<
|
|
212
|
-
rows.size.times do
|
|
212
|
+
str << '<rowItems count="' << rows.size.to_s << '">'
|
|
213
|
+
rows.size.times do
|
|
213
214
|
str << '<i/>'
|
|
214
215
|
end
|
|
215
216
|
str << '</rowItems>'
|
|
@@ -219,7 +220,7 @@ module Axlsx
|
|
|
219
220
|
str << '<colFields count="1"><field x="-2"/></colFields>'
|
|
220
221
|
str << "<colItems count=\"#{data.size}\">"
|
|
221
222
|
str << '<i><x/></i>'
|
|
222
|
-
data
|
|
223
|
+
(data.size - 1).times do |i|
|
|
223
224
|
str << "<i i=\"#{i + 1}\"><x v=\"#{i + 1}\"/></i>"
|
|
224
225
|
end
|
|
225
226
|
str << '</colItems>'
|
|
@@ -227,16 +228,16 @@ module Axlsx
|
|
|
227
228
|
str << '<colItems count="1"><i/></colItems>'
|
|
228
229
|
end
|
|
229
230
|
else
|
|
230
|
-
str <<
|
|
231
|
+
str << '<colFields count="' << columns.size.to_s << '">'
|
|
231
232
|
columns.each do |column_value|
|
|
232
|
-
str <<
|
|
233
|
+
str << '<field x="' << header_index_of(column_value).to_s << '"/>'
|
|
233
234
|
end
|
|
234
235
|
str << '</colFields>'
|
|
235
236
|
end
|
|
236
237
|
unless pages.empty?
|
|
237
|
-
str <<
|
|
238
|
+
str << '<pageFields count="' << pages.size.to_s << '">'
|
|
238
239
|
pages.each do |page_value|
|
|
239
|
-
str <<
|
|
240
|
+
str << '<pageField fld="' << header_index_of(page_value).to_s << '"/>'
|
|
240
241
|
end
|
|
241
242
|
str << '</pageFields>'
|
|
242
243
|
end
|
|
@@ -244,7 +245,7 @@ module Axlsx
|
|
|
244
245
|
str << "<dataFields count=\"#{data.size}\">"
|
|
245
246
|
data.each do |datum_value|
|
|
246
247
|
# The correct name prefix in ["Sum","Average", etc...]
|
|
247
|
-
str << "<dataField name='#{
|
|
248
|
+
str << "<dataField name='#{datum_value[:subtotal] || ''} of #{datum_value[:ref]}' fld='#{header_index_of(datum_value[:ref])}' baseField='0' baseItem='0'"
|
|
248
249
|
str << " numFmtId='#{datum_value[:num_fmt]}'" if datum_value[:num_fmt]
|
|
249
250
|
str << " subtotal='#{datum_value[:subtotal]}' " if datum_value[:subtotal]
|
|
250
251
|
str << "/>"
|
|
@@ -265,7 +266,7 @@ module Axlsx
|
|
|
265
266
|
# References for header cells
|
|
266
267
|
# @return [Array]
|
|
267
268
|
def header_cell_refs
|
|
268
|
-
Axlsx
|
|
269
|
+
Axlsx.range_to_a(header_range).first
|
|
269
270
|
end
|
|
270
271
|
|
|
271
272
|
# The header cells for the pivot table
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Axlsx
|
|
2
4
|
# Table
|
|
3
5
|
# @note Worksheet#add_pivot_table is the recommended way to create tables for your worksheets.
|
|
@@ -24,7 +26,7 @@ module Axlsx
|
|
|
24
26
|
# The part name for this table
|
|
25
27
|
# @return [String]
|
|
26
28
|
def pn
|
|
27
|
-
|
|
29
|
+
format(PIVOT_TABLE_CACHE_DEFINITION_PN, index + 1)
|
|
28
30
|
end
|
|
29
31
|
|
|
30
32
|
# The identifier for this cache
|
|
@@ -43,15 +45,15 @@ module Axlsx
|
|
|
43
45
|
# Serializes the object
|
|
44
46
|
# @param [String] str
|
|
45
47
|
# @return [String]
|
|
46
|
-
def to_xml_string(str = '')
|
|
48
|
+
def to_xml_string(str = +'')
|
|
47
49
|
str << '<?xml version="1.0" encoding="UTF-8"?>'
|
|
48
|
-
str <<
|
|
50
|
+
str << '<pivotCacheDefinition xmlns="' << XML_NS << '" xmlns:r="' << XML_NS_R << '" invalid="1" refreshOnLoad="1" recordCount="0">'
|
|
49
51
|
str << '<cacheSource type="worksheet">'
|
|
50
|
-
str <<
|
|
52
|
+
str << '<worksheetSource ref="' << pivot_table.range << '" sheet="' << pivot_table.data_sheet.name << '"/>'
|
|
51
53
|
str << '</cacheSource>'
|
|
52
|
-
str <<
|
|
54
|
+
str << '<cacheFields count="' << pivot_table.header_cells_count.to_s << '">'
|
|
53
55
|
pivot_table.header_cells.each do |cell|
|
|
54
|
-
str <<
|
|
56
|
+
str << '<cacheField name="' << cell.clean_value << '" numFmtId="0">'
|
|
55
57
|
str << '<sharedItems count="0">'
|
|
56
58
|
str << '</sharedItems>'
|
|
57
59
|
str << '</cacheField>'
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Axlsx
|
|
2
4
|
# Options for printing a worksheet. All options are boolean and false by default.
|
|
3
5
|
#
|
|
@@ -31,7 +33,7 @@ module Axlsx
|
|
|
31
33
|
# @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.
|
|
32
34
|
# @param [String] str
|
|
33
35
|
# @return [String]
|
|
34
|
-
def to_xml_string(str = '')
|
|
36
|
+
def to_xml_string(str = +'')
|
|
35
37
|
serialized_tag 'printOptions', str
|
|
36
38
|
end
|
|
37
39
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Axlsx
|
|
2
4
|
# The Protected Range class represents a set of cells in the worksheet
|
|
3
5
|
# @note the recommended way to manage protected ranges with via Worksheet#protect_range
|
|
@@ -39,7 +41,7 @@ module Axlsx
|
|
|
39
41
|
# @param [String] str if this string object is provided we append
|
|
40
42
|
# our output to that object. Use this - it helps limit the number of
|
|
41
43
|
# objects created during serialization
|
|
42
|
-
def to_xml_string(str =
|
|
44
|
+
def to_xml_string(str = +'')
|
|
43
45
|
serialized_tag 'protectedRange', str
|
|
44
46
|
end
|
|
45
47
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Axlsx
|
|
2
4
|
# A self serializing collection of ranges that should be protected in
|
|
3
5
|
# the worksheet
|
|
@@ -17,16 +19,16 @@ module Axlsx
|
|
|
17
19
|
sqref = if cells.is_a?(String)
|
|
18
20
|
cells
|
|
19
21
|
elsif cells.is_a?(SimpleTypedList) || cells.is_a?(Array)
|
|
20
|
-
Axlsx
|
|
22
|
+
Axlsx.cell_range(cells, false)
|
|
21
23
|
end
|
|
22
|
-
self << ProtectedRange.new(:
|
|
24
|
+
self << ProtectedRange.new(sqref: sqref, name: "Range#{size}")
|
|
23
25
|
last
|
|
24
26
|
end
|
|
25
27
|
|
|
26
28
|
# Serializes the protected ranges
|
|
27
29
|
# @param [String] str
|
|
28
30
|
# @return [String]
|
|
29
|
-
def to_xml_string(str = '')
|
|
31
|
+
def to_xml_string(str = +'')
|
|
30
32
|
return if empty?
|
|
31
33
|
|
|
32
34
|
str << '<protectedRanges>'
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Axlsx
|
|
2
4
|
# A simple, self serializing class for storing TextRuns
|
|
3
5
|
class RichText < SimpleTypedList
|
|
@@ -45,7 +47,7 @@ module Axlsx
|
|
|
45
47
|
# renders the RichTextRuns in this collection
|
|
46
48
|
# @param [String] str
|
|
47
49
|
# @return [String]
|
|
48
|
-
def to_xml_string(str = '')
|
|
50
|
+
def to_xml_string(str = +'')
|
|
49
51
|
each { |run| run.to_xml_string(str) }
|
|
50
52
|
str
|
|
51
53
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Axlsx
|
|
2
4
|
# The RichTextRun class creates and self serializing text run.
|
|
3
5
|
class RichTextRun
|
|
@@ -128,7 +130,7 @@ module Axlsx
|
|
|
128
130
|
|
|
129
131
|
# @see u
|
|
130
132
|
def u=(v)
|
|
131
|
-
v = :single if
|
|
133
|
+
v = :single if v == true || v == 1 || v == :true || v == 'true'
|
|
132
134
|
set_run_style :validate_cell_u, :u, v
|
|
133
135
|
end
|
|
134
136
|
|
|
@@ -138,7 +140,7 @@ module Axlsx
|
|
|
138
140
|
|
|
139
141
|
# @param [String] v The 8 character representation for an rgb color #FFFFFFFF"
|
|
140
142
|
def color=(v)
|
|
141
|
-
@color = v.is_a?(Color) ? v : Color.new(:
|
|
143
|
+
@color = v.is_a?(Color) ? v : Color.new(rgb: v)
|
|
142
144
|
end
|
|
143
145
|
|
|
144
146
|
# The inline sz property for the cell
|
|
@@ -197,30 +199,30 @@ module Axlsx
|
|
|
197
199
|
return unless INLINE_STYLES.include?(attr.to_sym)
|
|
198
200
|
|
|
199
201
|
Axlsx.send(validator, value) unless validator.nil?
|
|
200
|
-
|
|
202
|
+
instance_variable_set :"@#{attr}", value
|
|
201
203
|
end
|
|
202
204
|
|
|
203
205
|
# Serializes the RichTextRun
|
|
204
206
|
# @param [String] str
|
|
205
207
|
# @return [String]
|
|
206
|
-
def to_xml_string(str = '')
|
|
208
|
+
def to_xml_string(str = +'')
|
|
207
209
|
valid = RichTextRun::INLINE_STYLES
|
|
208
|
-
data =
|
|
209
|
-
data = data.select { |key, value| valid.include?(key)
|
|
210
|
+
data = Axlsx.instance_values_for(self).transform_keys(&:to_sym)
|
|
211
|
+
data = data.select { |key, value| !value.nil? && valid.include?(key) }
|
|
210
212
|
|
|
211
213
|
str << '<r><rPr>'
|
|
212
|
-
data.
|
|
214
|
+
data.each do |key, val|
|
|
213
215
|
case key
|
|
214
216
|
when :font_name
|
|
215
|
-
str <<
|
|
217
|
+
str << '<rFont val="' << font_name << '"/>'
|
|
216
218
|
when :color
|
|
217
|
-
str <<
|
|
219
|
+
str << val.to_xml_string
|
|
218
220
|
else
|
|
219
|
-
str <<
|
|
221
|
+
str << '<' << key.to_s << ' val="' << xml_value(val) << '"/>'
|
|
220
222
|
end
|
|
221
223
|
end
|
|
222
|
-
clean_value = Axlsx
|
|
223
|
-
str <<
|
|
224
|
+
clean_value = Axlsx.trust_input ? @value.to_s : ::CGI.escapeHTML(Axlsx.sanitize(@value.to_s))
|
|
225
|
+
str << '</rPr><t>' << clean_value << '</t></r>'
|
|
224
226
|
end
|
|
225
227
|
|
|
226
228
|
private
|
|
@@ -240,7 +242,7 @@ module Axlsx
|
|
|
240
242
|
return sz if sz
|
|
241
243
|
|
|
242
244
|
font = styles.fonts[styles.cellXfs[style].fontId] || styles.fonts[0]
|
|
243
|
-
|
|
245
|
+
font.b || (defined?(@b) && @b) ? (font.sz * 1.5) : font.sz
|
|
244
246
|
end
|
|
245
247
|
|
|
246
248
|
def style
|
|
@@ -253,7 +255,7 @@ module Axlsx
|
|
|
253
255
|
|
|
254
256
|
# Converts the value to the correct XML representation (fixes issues with
|
|
255
257
|
# Numbers)
|
|
256
|
-
def xml_value
|
|
258
|
+
def xml_value(value)
|
|
257
259
|
if value == true
|
|
258
260
|
1
|
|
259
261
|
elsif value == false
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Axlsx
|
|
2
4
|
# A Row is a single row in a worksheet.
|
|
3
5
|
# @note The recommended way to manage rows and cells is to use Worksheet#add_row
|
|
@@ -86,12 +88,9 @@ module Axlsx
|
|
|
86
88
|
# @param [Integer] r_index The row index, 0 based.
|
|
87
89
|
# @param [String] str The string this rows xml will be appended to.
|
|
88
90
|
# @return [String]
|
|
89
|
-
def to_xml_string(r_index, str = '')
|
|
90
|
-
serialized_tag('row', str, :
|
|
91
|
-
|
|
92
|
-
# time..
|
|
93
|
-
each_with_index { |cell, c_index| cell.to_xml_string(r_index, c_index, tmp) }
|
|
94
|
-
str << tmp
|
|
91
|
+
def to_xml_string(r_index, str = +'')
|
|
92
|
+
serialized_tag('row', str, r: Axlsx.row_ref(r_index)) do
|
|
93
|
+
each_with_index { |cell, c_index| cell.to_xml_string(r_index, c_index, str) }
|
|
95
94
|
end
|
|
96
95
|
end
|
|
97
96
|
|
|
@@ -130,7 +129,7 @@ module Axlsx
|
|
|
130
129
|
# @see height
|
|
131
130
|
def height=(v)
|
|
132
131
|
unless v.nil?
|
|
133
|
-
Axlsx
|
|
132
|
+
Axlsx.validate_unsigned_numeric(v)
|
|
134
133
|
@custom_height = true
|
|
135
134
|
@ht = v
|
|
136
135
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Axlsx
|
|
2
4
|
# A collection of break objects that define row breaks (page breaks) for printing and preview
|
|
3
5
|
|
|
@@ -11,8 +13,8 @@ module Axlsx
|
|
|
11
13
|
# max and man values are fixed.
|
|
12
14
|
# @see Break
|
|
13
15
|
def add_break(options)
|
|
14
|
-
# force feed the
|
|
15
|
-
self << Break.new(options.merge(:
|
|
16
|
+
# force feed the Excel default
|
|
17
|
+
self << Break.new(options.merge(max: 16383, man: true))
|
|
16
18
|
last
|
|
17
19
|
end
|
|
18
20
|
|
|
@@ -21,10 +23,10 @@ module Axlsx
|
|
|
21
23
|
# <brk id="7" max="16383" man="1"/>
|
|
22
24
|
# <brk id="13" max="16383" man="1"/>
|
|
23
25
|
# </rowBreaks>
|
|
24
|
-
def to_xml_string(str = '')
|
|
26
|
+
def to_xml_string(str = +'')
|
|
25
27
|
return if empty?
|
|
26
28
|
|
|
27
|
-
str <<
|
|
29
|
+
str << '<rowBreaks count="' << size.to_s << '" manualBreakCount="' << size.to_s << '">'
|
|
28
30
|
each { |brk| brk.to_xml_string(str) }
|
|
29
31
|
str << '</rowBreaks>'
|
|
30
32
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Axlsx
|
|
2
4
|
# Selection options for worksheet panes.
|
|
3
5
|
#
|
|
@@ -72,27 +74,27 @@ module Axlsx
|
|
|
72
74
|
|
|
73
75
|
# @see active_cell
|
|
74
76
|
def active_cell=(v)
|
|
75
|
-
cell = (v.
|
|
76
|
-
Axlsx
|
|
77
|
+
cell = (v.instance_of?(Axlsx::Cell) ? v.r_abs : v)
|
|
78
|
+
Axlsx.validate_string(cell)
|
|
77
79
|
@active_cell = cell
|
|
78
80
|
end
|
|
79
81
|
|
|
80
82
|
# @see active_cell_id
|
|
81
|
-
def active_cell_id=(v); Axlsx
|
|
83
|
+
def active_cell_id=(v); Axlsx.validate_unsigned_int(v); @active_cell_id = v end
|
|
82
84
|
|
|
83
85
|
# @see pane
|
|
84
86
|
def pane=(v)
|
|
85
|
-
Axlsx
|
|
86
|
-
@pane = Axlsx
|
|
87
|
+
Axlsx.validate_pane_type(v)
|
|
88
|
+
@pane = Axlsx.camel(v, false)
|
|
87
89
|
end
|
|
88
90
|
|
|
89
91
|
# @see sqref
|
|
90
|
-
def sqref=(v); Axlsx
|
|
92
|
+
def sqref=(v); Axlsx.validate_string(v); @sqref = v end
|
|
91
93
|
|
|
92
94
|
# Serializes the data validation
|
|
93
95
|
# @param [String] str
|
|
94
96
|
# @return [String]
|
|
95
|
-
def to_xml_string(str = '')
|
|
97
|
+
def to_xml_string(str = +'')
|
|
96
98
|
serialized_tag 'selection', str
|
|
97
99
|
end
|
|
98
100
|
end
|