caxlsx 3.3.0 → 3.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/README.md +24 -5
- data/Rakefile +0 -1
- data/lib/axlsx/content_type/abstract_content_type.rb +2 -5
- data/lib/axlsx/content_type/content_type.rb +0 -4
- data/lib/axlsx/content_type/default.rb +1 -5
- data/lib/axlsx/content_type/override.rb +0 -4
- data/lib/axlsx/doc_props/app.rb +1 -6
- data/lib/axlsx/doc_props/core.rb +1 -6
- data/lib/axlsx/drawing/area_chart.rb +3 -6
- data/lib/axlsx/drawing/area_series.rb +1 -4
- data/lib/axlsx/drawing/ax_data_source.rb +1 -6
- data/lib/axlsx/drawing/axes.rb +5 -6
- data/lib/axlsx/drawing/axis.rb +7 -12
- data/lib/axlsx/drawing/bar_3D_chart.rb +7 -10
- data/lib/axlsx/drawing/bar_chart.rb +6 -9
- data/lib/axlsx/drawing/bar_series.rb +2 -8
- data/lib/axlsx/drawing/bubble_chart.rb +2 -5
- data/lib/axlsx/drawing/bubble_series.rb +3 -6
- data/lib/axlsx/drawing/cat_axis.rb +2 -7
- data/lib/axlsx/drawing/chart.rb +7 -12
- data/lib/axlsx/drawing/d_lbls.rb +23 -22
- data/lib/axlsx/drawing/drawing.rb +4 -8
- data/lib/axlsx/drawing/graphic_frame.rb +0 -3
- data/lib/axlsx/drawing/hyperlink.rb +4 -7
- data/lib/axlsx/drawing/line_3D_chart.rb +10 -14
- data/lib/axlsx/drawing/line_chart.rb +3 -6
- data/lib/axlsx/drawing/line_series.rb +1 -4
- data/lib/axlsx/drawing/marker.rb +5 -9
- data/lib/axlsx/drawing/num_data.rb +4 -9
- data/lib/axlsx/drawing/num_data_source.rb +3 -7
- data/lib/axlsx/drawing/num_val.rb +2 -5
- data/lib/axlsx/drawing/one_cell_anchor.rb +4 -6
- data/lib/axlsx/drawing/pic.rb +46 -13
- data/lib/axlsx/drawing/picture_locking.rb +3 -6
- data/lib/axlsx/drawing/pie_3D_chart.rb +2 -7
- data/lib/axlsx/drawing/pie_series.rb +1 -6
- data/lib/axlsx/drawing/scaling.rb +2 -5
- data/lib/axlsx/drawing/scatter_chart.rb +2 -5
- data/lib/axlsx/drawing/scatter_series.rb +2 -5
- data/lib/axlsx/drawing/ser_axis.rb +2 -6
- data/lib/axlsx/drawing/series.rb +3 -5
- data/lib/axlsx/drawing/series_title.rb +0 -2
- data/lib/axlsx/drawing/str_data.rb +3 -8
- data/lib/axlsx/drawing/str_val.rb +2 -5
- data/lib/axlsx/drawing/title.rb +12 -15
- data/lib/axlsx/drawing/two_cell_anchor.rb +5 -7
- data/lib/axlsx/drawing/val_axis.rb +1 -4
- data/lib/axlsx/drawing/view_3D.rb +24 -24
- data/lib/axlsx/drawing/vml_drawing.rb +2 -5
- data/lib/axlsx/drawing/vml_shape.rb +4 -7
- data/lib/axlsx/package.rb +35 -36
- data/lib/axlsx/rels/relationship.rb +21 -24
- data/lib/axlsx/rels/relationships.rb +3 -6
- data/lib/axlsx/stylesheet/border.rb +1 -4
- data/lib/axlsx/stylesheet/border_pr.rb +3 -5
- data/lib/axlsx/stylesheet/cell_alignment.rb +2 -10
- data/lib/axlsx/stylesheet/cell_protection.rb +1 -4
- data/lib/axlsx/stylesheet/cell_style.rb +3 -7
- data/lib/axlsx/stylesheet/color.rb +6 -5
- data/lib/axlsx/stylesheet/dxf.rb +2 -6
- data/lib/axlsx/stylesheet/fill.rb +0 -4
- data/lib/axlsx/stylesheet/font.rb +7 -6
- data/lib/axlsx/stylesheet/gradient_fill.rb +4 -6
- data/lib/axlsx/stylesheet/gradient_stop.rb +2 -3
- data/lib/axlsx/stylesheet/num_fmt.rb +1 -4
- data/lib/axlsx/stylesheet/pattern_fill.rb +3 -5
- data/lib/axlsx/stylesheet/styles.rb +53 -45
- data/lib/axlsx/stylesheet/table_style.rb +5 -8
- data/lib/axlsx/stylesheet/table_style_element.rb +1 -4
- data/lib/axlsx/stylesheet/table_styles.rb +3 -7
- data/lib/axlsx/stylesheet/xf.rb +3 -6
- data/lib/axlsx/util/accessors.rb +2 -4
- data/lib/axlsx/util/constants.rb +3 -5
- data/lib/axlsx/util/mime_type_utils.rb +13 -0
- data/lib/axlsx/util/options_parser.rb +1 -2
- data/lib/axlsx/util/serialized_attributes.rb +4 -5
- data/lib/axlsx/util/simple_typed_list.rb +18 -17
- data/lib/axlsx/util/storage.rb +32 -36
- data/lib/axlsx/util/validators.rb +7 -4
- data/lib/axlsx/util/zip_command.rb +0 -2
- data/lib/axlsx/version.rb +1 -2
- data/lib/axlsx/workbook/defined_name.rb +6 -5
- data/lib/axlsx/workbook/defined_names.rb +1 -2
- data/lib/axlsx/workbook/shared_strings_table.rb +3 -6
- data/lib/axlsx/workbook/workbook.rb +96 -91
- data/lib/axlsx/workbook/workbook_view.rb +5 -10
- data/lib/axlsx/workbook/workbook_views.rb +1 -3
- data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +9 -8
- data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +6 -6
- data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +13 -14
- data/lib/axlsx/workbook/worksheet/border_creator.rb +29 -26
- data/lib/axlsx/workbook/worksheet/break.rb +2 -5
- data/lib/axlsx/workbook/worksheet/cell.rb +46 -26
- data/lib/axlsx/workbook/worksheet/cell_serializer.rb +11 -11
- data/lib/axlsx/workbook/worksheet/cfvo.rb +2 -2
- data/lib/axlsx/workbook/worksheet/cfvos.rb +3 -5
- data/lib/axlsx/workbook/worksheet/col.rb +4 -7
- data/lib/axlsx/workbook/worksheet/col_breaks.rb +4 -5
- data/lib/axlsx/workbook/worksheet/color_scale.rb +10 -12
- data/lib/axlsx/workbook/worksheet/cols.rb +6 -6
- data/lib/axlsx/workbook/worksheet/comment.rb +4 -5
- data/lib/axlsx/workbook/worksheet/comments.rb +6 -10
- data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +4 -5
- data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +2 -6
- data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +2 -4
- data/lib/axlsx/workbook/worksheet/data_bar.rb +20 -22
- data/lib/axlsx/workbook/worksheet/data_validation.rb +4 -5
- data/lib/axlsx/workbook/worksheet/data_validations.rb +2 -5
- data/lib/axlsx/workbook/worksheet/date_time_converter.rb +1 -3
- data/lib/axlsx/workbook/worksheet/dimension.rb +5 -4
- data/lib/axlsx/workbook/worksheet/header_footer.rb +0 -1
- data/lib/axlsx/workbook/worksheet/icon_set.rb +2 -3
- data/lib/axlsx/workbook/worksheet/merged_cells.rb +8 -8
- data/lib/axlsx/workbook/worksheet/outline_pr.rb +0 -1
- data/lib/axlsx/workbook/worksheet/page_margins.rb +2 -2
- data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +1 -3
- data/lib/axlsx/workbook/worksheet/page_setup.rb +117 -120
- data/lib/axlsx/workbook/worksheet/pane.rb +16 -17
- data/lib/axlsx/workbook/worksheet/pivot_table.rb +8 -11
- data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +8 -11
- data/lib/axlsx/workbook/worksheet/pivot_tables.rb +3 -4
- data/lib/axlsx/workbook/worksheet/print_options.rb +0 -1
- data/lib/axlsx/workbook/worksheet/protected_range.rb +4 -5
- data/lib/axlsx/workbook/worksheet/protected_ranges.rb +9 -9
- data/lib/axlsx/workbook/worksheet/rich_text.rb +4 -6
- data/lib/axlsx/workbook/worksheet/rich_text_run.rb +21 -5
- data/lib/axlsx/workbook/worksheet/row.rb +24 -15
- data/lib/axlsx/workbook/worksheet/row_breaks.rb +3 -4
- data/lib/axlsx/workbook/worksheet/selection.rb +7 -9
- data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +5 -6
- data/lib/axlsx/workbook/worksheet/sheet_data.rb +4 -6
- data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +18 -18
- data/lib/axlsx/workbook/worksheet/sheet_pr.rb +4 -4
- data/lib/axlsx/workbook/worksheet/sheet_protection.rb +12 -13
- data/lib/axlsx/workbook/worksheet/sheet_view.rb +35 -42
- data/lib/axlsx/workbook/worksheet/table.rb +7 -9
- data/lib/axlsx/workbook/worksheet/table_style_info.rb +2 -3
- data/lib/axlsx/workbook/worksheet/tables.rb +4 -4
- data/lib/axlsx/workbook/worksheet/worksheet.rb +63 -35
- data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +6 -6
- data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +3 -2
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +5 -6
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +4 -4
- data/lib/axlsx.rb +23 -9
- data/lib/caxlsx.rb +0 -1
- metadata +3 -3
@@ -1,8 +1,6 @@
|
|
1
|
-
# encoding: UTF-8
|
2
1
|
module Axlsx
|
3
2
|
# 3D attributes for a chart.
|
4
3
|
class View3D
|
5
|
-
|
6
4
|
include Axlsx::OptionsParser
|
7
5
|
|
8
6
|
# Creates a new View3D for charts
|
@@ -12,8 +10,8 @@ module Axlsx
|
|
12
10
|
# @option options [String] depth_percent
|
13
11
|
# @option options [Boolean] r_ang_ax
|
14
12
|
# @option options [Integer] perspective
|
15
|
-
def initialize(options={})
|
16
|
-
@rot_x, @h_percent, @rot_y, @depth_percent, @r_ang_ax, @perspective
|
13
|
+
def initialize(options = {})
|
14
|
+
@rot_x, @h_percent, @rot_y, @depth_percent, @r_ang_ax, @perspective = nil, nil, nil, nil, nil, nil
|
17
15
|
parse_options options
|
18
16
|
end
|
19
17
|
|
@@ -63,33 +61,33 @@ module Axlsx
|
|
63
61
|
end
|
64
62
|
alias :rotX= :rot_x=
|
65
63
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
64
|
+
# @see h_percent
|
65
|
+
def h_percent=(v)
|
66
|
+
RegexValidator.validate "#{self.class}.h_percent", H_PERCENT_REGEX, v
|
67
|
+
@h_percent = v
|
68
|
+
end
|
71
69
|
alias :hPercent= :h_percent=
|
72
70
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
71
|
+
# @see rot_y
|
72
|
+
def rot_y=(v)
|
73
|
+
RangeValidator.validate "View3D.rot_y", 0, 360, v
|
74
|
+
@rot_y = v
|
75
|
+
end
|
78
76
|
alias :rotY= :rot_y=
|
79
77
|
|
80
|
-
|
81
|
-
|
78
|
+
# @see depth_percent
|
79
|
+
def depth_percent=(v) RegexValidator.validate "#{self.class}.depth_percent", DEPTH_PERCENT_REGEX, v; @depth_percent = v; end
|
82
80
|
alias :depthPercent= :depth_percent=
|
83
81
|
|
84
|
-
|
85
|
-
|
82
|
+
# @see r_ang_ax
|
83
|
+
def r_ang_ax=(v) Axlsx::validate_boolean(v); @r_ang_ax = v; end
|
86
84
|
alias :rAngAx= :r_ang_ax=
|
87
85
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
86
|
+
# @see perspective
|
87
|
+
def perspective=(v)
|
88
|
+
RangeValidator.validate "View3D.perspective", 0, 240, v
|
89
|
+
@perspective = v
|
90
|
+
end
|
93
91
|
|
94
92
|
# DataTypeValidator.validate "#{self.class}.perspective", [Integer], v, lambda {|arg| arg >= 0 && arg <= 240 }; @perspective = v; end
|
95
93
|
|
@@ -105,10 +103,12 @@ module Axlsx
|
|
105
103
|
end
|
106
104
|
|
107
105
|
private
|
106
|
+
|
108
107
|
# Note: move this to Axlsx module if we find the smae pattern elsewhere.
|
109
|
-
def element_for_attribute(name, namespace='')
|
108
|
+
def element_for_attribute(name, namespace = '')
|
110
109
|
val = Axlsx.instance_values_for(self)[name]
|
111
110
|
return "" if val == nil
|
111
|
+
|
112
112
|
"<%s:%s val='%s'/>" % [namespace, Axlsx::camel(name, false), val]
|
113
113
|
end
|
114
114
|
end
|
@@ -1,12 +1,11 @@
|
|
1
1
|
module Axlsx
|
2
|
-
|
3
2
|
# a vml drawing used for comments in excel.
|
4
3
|
class VmlDrawing
|
5
|
-
|
6
4
|
# creates a new Vml Drawing object.
|
7
5
|
# @param [Comments] comments the comments object this drawing is associated with
|
8
6
|
def initialize(comments)
|
9
7
|
raise ArgumentError, "you must provide a comments object" unless comments.is_a?(Comments)
|
8
|
+
|
10
9
|
@comments = comments
|
11
10
|
end
|
12
11
|
|
@@ -25,7 +24,7 @@ module Axlsx
|
|
25
24
|
xmlns:o="urn:schemas-microsoft-com:office:office"
|
26
25
|
xmlns:x="urn:schemas-microsoft-com:office:excel">
|
27
26
|
<o:shapelayout v:ext="edit">
|
28
|
-
<o:idmap v:ext="edit" data="#{@comments.worksheet.index+1}"/>
|
27
|
+
<o:idmap v:ext="edit" data="#{@comments.worksheet.index + 1}"/>
|
29
28
|
</o:shapelayout>
|
30
29
|
<v:shapetype id="_x0000_t202" coordsize="21600,21600" o:spt="202"
|
31
30
|
path="m0,0l0,21600,21600,21600,21600,0xe">
|
@@ -35,8 +34,6 @@ module Axlsx
|
|
35
34
|
BAD_PROGRAMMER
|
36
35
|
@comments.each { |comment| comment.vml_shape.to_xml_string str }
|
37
36
|
str << "</xml>"
|
38
|
-
|
39
37
|
end
|
40
|
-
|
41
38
|
end
|
42
39
|
end
|
@@ -1,8 +1,6 @@
|
|
1
1
|
module Axlsx
|
2
|
-
|
3
2
|
# A VmlShape is used to position and render a comment.
|
4
3
|
class VmlShape
|
5
|
-
|
6
4
|
include Axlsx::OptionsParser
|
7
5
|
include Axlsx::Accessors
|
8
6
|
|
@@ -17,14 +15,14 @@ module Axlsx
|
|
17
15
|
# @option options [Integer] right_offset
|
18
16
|
# @option options [Integer] bottom_row
|
19
17
|
# @option options [Integer] bottom_offset
|
20
|
-
def initialize(options={})
|
18
|
+
def initialize(options = {})
|
21
19
|
@row = @column = @left_column = @top_row = @right_column = @bottom_row = 0
|
22
20
|
@left_offset = 15
|
23
21
|
@top_offset = 2
|
24
22
|
@right_offset = 50
|
25
23
|
@bottom_offset = 5
|
26
24
|
@visible = true
|
27
|
-
@id = (0...8).map{65.+(rand(25)).chr}.join
|
25
|
+
@id = (0...8).map { 65.+(rand(25)).chr }.join
|
28
26
|
parse_options options
|
29
27
|
yield self if block_given?
|
30
28
|
end
|
@@ -37,8 +35,8 @@ module Axlsx
|
|
37
35
|
# serialize the shape to a string
|
38
36
|
# @param [String] str
|
39
37
|
# @return [String]
|
40
|
-
def to_xml_string(str ='')
|
41
|
-
str << <<SHAME_ON_YOU
|
38
|
+
def to_xml_string(str = '')
|
39
|
+
str << <<SHAME_ON_YOU
|
42
40
|
|
43
41
|
<v:shape id="#{@id}" type="#_x0000_t202" fillcolor="#ffffa1 [80]" o:insetmode="auto"
|
44
42
|
style="visibility:#{@visible ? 'visible' : 'hidden'}">
|
@@ -60,7 +58,6 @@ str << <<SHAME_ON_YOU
|
|
60
58
|
</x:ClientData>
|
61
59
|
</v:shape>
|
62
60
|
SHAME_ON_YOU
|
63
|
-
|
64
61
|
end
|
65
62
|
end
|
66
63
|
end
|
data/lib/axlsx/package.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
module Axlsx
|
3
2
|
# Package is responsible for managing all the bits and peices that Open Office XML requires to make a valid
|
4
3
|
# xlsx document including validation and serialization.
|
@@ -20,7 +19,7 @@ module Axlsx
|
|
20
19
|
# @option options [Time] :created_at Timestamp in the document properties (defaults to current time).
|
21
20
|
# @option options [Boolean] :use_shared_strings This is passed to the workbook to specify that shared strings should be used when serializing the package.
|
22
21
|
# @example Package.new :author => 'you!', :workbook => Workbook.new
|
23
|
-
def initialize(options={})
|
22
|
+
def initialize(options = {})
|
24
23
|
@workbook = nil
|
25
24
|
@core, @app = Core.new, App.new
|
26
25
|
@core.creator = options[:author] || @core.creator
|
@@ -36,8 +35,6 @@ module Axlsx
|
|
36
35
|
workbook.use_autowidth = v
|
37
36
|
end
|
38
37
|
|
39
|
-
|
40
|
-
|
41
38
|
# Shortcut to determine if the workbook is configured to use shared strings
|
42
39
|
# @see Workbook#use_shared_strings
|
43
40
|
def use_shared_strings
|
@@ -50,6 +47,7 @@ module Axlsx
|
|
50
47
|
Axlsx::validate_boolean(v);
|
51
48
|
workbook.use_shared_strings = v
|
52
49
|
end
|
50
|
+
|
53
51
|
# The workbook this package will serialize or validate.
|
54
52
|
# @return [Workbook] If no workbook instance has been assigned with this package a new Workbook instance is returned.
|
55
53
|
# @raise ArgumentError if workbook parameter is not a Workbook instance.
|
@@ -102,11 +100,12 @@ module Axlsx
|
|
102
100
|
# File.open('example_streamed.xlsx', 'wb') { |f| f.write(s.read) }
|
103
101
|
def serialize(output, options = {}, secondary_options = nil)
|
104
102
|
if !workbook.styles_applied
|
105
|
-
workbook.apply_styles
|
103
|
+
workbook.apply_styles
|
106
104
|
end
|
107
105
|
|
108
106
|
confirm_valid, zip_command = parse_serialize_options(options, secondary_options)
|
109
107
|
return false unless !confirm_valid || self.validate.empty?
|
108
|
+
|
110
109
|
zip_provider = if zip_command
|
111
110
|
ZipCommand.new(zip_command)
|
112
111
|
else
|
@@ -121,16 +120,16 @@ module Axlsx
|
|
121
120
|
Relationship.clear_ids_cache
|
122
121
|
end
|
123
122
|
|
124
|
-
|
125
123
|
# Serialize your workbook to a StringIO instance
|
126
124
|
# @param [Boolean] confirm_valid Validate the package prior to serialization.
|
127
125
|
# @return [StringIO|Boolean] False if confirm_valid and validation errors exist. rewound string IO if not.
|
128
|
-
def to_stream(confirm_valid=false)
|
126
|
+
def to_stream(confirm_valid = false)
|
129
127
|
if !workbook.styles_applied
|
130
|
-
workbook.apply_styles
|
128
|
+
workbook.apply_styles
|
131
129
|
end
|
132
130
|
|
133
131
|
return false unless !confirm_valid || self.validate.empty?
|
132
|
+
|
134
133
|
Relationship.initialize_ids_cache
|
135
134
|
zip = write_parts(Zip::OutputStream.new(StringIO.new.binmode, true))
|
136
135
|
stream = zip.close_buffer
|
@@ -187,7 +186,7 @@ module Axlsx
|
|
187
186
|
end
|
188
187
|
unless part[:path].nil?
|
189
188
|
zip.put_next_entry(zip_entry_for_part(part))
|
190
|
-
zip.write
|
189
|
+
zip.write File.read(part[:path], mode: "rb")
|
191
190
|
end
|
192
191
|
end
|
193
192
|
zip
|
@@ -214,30 +213,29 @@ module Axlsx
|
|
214
213
|
# @private
|
215
214
|
def parts
|
216
215
|
parts = [
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
216
|
+
{ :entry => "xl/#{STYLES_PN}", :doc => workbook.styles, :schema => SML_XSD },
|
217
|
+
{ :entry => CORE_PN, :doc => @core, :schema => CORE_XSD },
|
218
|
+
{ :entry => APP_PN, :doc => @app, :schema => APP_XSD },
|
219
|
+
{ :entry => WORKBOOK_RELS_PN, :doc => workbook.relationships, :schema => RELS_XSD },
|
220
|
+
{ :entry => WORKBOOK_PN, :doc => workbook, :schema => SML_XSD }
|
222
221
|
]
|
223
222
|
|
224
223
|
workbook.drawings.each do |drawing|
|
225
|
-
parts << {:entry => "xl/#{drawing.rels_pn}", :doc => drawing.relationships, :schema => RELS_XSD}
|
226
|
-
parts << {:entry => "xl/#{drawing.pn}", :doc => drawing, :schema => DRAWING_XSD}
|
224
|
+
parts << { :entry => "xl/#{drawing.rels_pn}", :doc => drawing.relationships, :schema => RELS_XSD }
|
225
|
+
parts << { :entry => "xl/#{drawing.pn}", :doc => drawing, :schema => DRAWING_XSD }
|
227
226
|
end
|
228
227
|
|
229
|
-
|
230
228
|
workbook.tables.each do |table|
|
231
|
-
parts << {:entry => "xl/#{table.pn}", :doc => table, :schema => SML_XSD}
|
229
|
+
parts << { :entry => "xl/#{table.pn}", :doc => table, :schema => SML_XSD }
|
232
230
|
end
|
233
231
|
workbook.pivot_tables.each do |pivot_table|
|
234
232
|
cache_definition = pivot_table.cache_definition
|
235
|
-
parts << {:entry => "xl/#{pivot_table.rels_pn}", :doc => pivot_table.relationships, :schema => RELS_XSD}
|
236
|
-
parts << {:entry => "xl/#{pivot_table.pn}", :doc => pivot_table}
|
237
|
-
parts << {:entry => "xl/#{cache_definition.pn}", :doc => cache_definition}
|
233
|
+
parts << { :entry => "xl/#{pivot_table.rels_pn}", :doc => pivot_table.relationships, :schema => RELS_XSD }
|
234
|
+
parts << { :entry => "xl/#{pivot_table.pn}", :doc => pivot_table } # , :schema => SML_XSD}
|
235
|
+
parts << { :entry => "xl/#{cache_definition.pn}", :doc => cache_definition } # , :schema => SML_XSD}
|
238
236
|
end
|
239
237
|
|
240
|
-
workbook.comments.each do|comment|
|
238
|
+
workbook.comments.each do |comment|
|
241
239
|
if comment.size > 0
|
242
240
|
parts << { :entry => "xl/#{comment.pn}", :doc => comment, :schema => SML_XSD }
|
243
241
|
parts << { :entry => "xl/#{comment.vml_drawing.pn}", :doc => comment.vml_drawing, :schema => nil }
|
@@ -245,26 +243,26 @@ module Axlsx
|
|
245
243
|
end
|
246
244
|
|
247
245
|
workbook.charts.each do |chart|
|
248
|
-
parts << {:entry => "xl/#{chart.pn}", :doc => chart, :schema => DRAWING_XSD}
|
246
|
+
parts << { :entry => "xl/#{chart.pn}", :doc => chart, :schema => DRAWING_XSD }
|
249
247
|
end
|
250
248
|
|
251
249
|
workbook.images.each do |image|
|
252
|
-
parts << {:entry => "xl/#{image.pn}", :path => image.image_src}
|
250
|
+
parts << { :entry => "xl/#{image.pn}", :path => image.image_src } unless image.remote?
|
253
251
|
end
|
254
252
|
|
255
253
|
if use_shared_strings
|
256
|
-
parts << {:entry => "xl/#{SHARED_STRINGS_PN}", :doc => workbook.shared_strings, :schema => SML_XSD}
|
254
|
+
parts << { :entry => "xl/#{SHARED_STRINGS_PN}", :doc => workbook.shared_strings, :schema => SML_XSD }
|
257
255
|
end
|
258
256
|
|
259
257
|
workbook.worksheets.each do |sheet|
|
260
|
-
parts << {:entry => "xl/#{sheet.rels_pn}", :doc => sheet.relationships, :schema => RELS_XSD}
|
261
|
-
parts << {:entry => "xl/#{sheet.pn}", :doc => sheet, :schema => SML_XSD}
|
258
|
+
parts << { :entry => "xl/#{sheet.rels_pn}", :doc => sheet.relationships, :schema => RELS_XSD }
|
259
|
+
parts << { :entry => "xl/#{sheet.pn}", :doc => sheet, :schema => SML_XSD }
|
262
260
|
end
|
263
261
|
|
264
262
|
# Sort parts for correct MIME detection
|
265
263
|
[
|
266
|
-
{:entry => CONTENT_TYPES_PN, :doc => content_types, :schema => CONTENT_TYPES_XSD},
|
267
|
-
{:entry => RELS_PN, :doc => relationships, :schema => RELS_XSD},
|
264
|
+
{ :entry => CONTENT_TYPES_PN, :doc => content_types, :schema => CONTENT_TYPES_XSD },
|
265
|
+
{ :entry => RELS_PN, :doc => relationships, :schema => RELS_XSD },
|
268
266
|
*(parts.sort_by { |part| part[:entry] }.reverse)
|
269
267
|
]
|
270
268
|
end
|
@@ -314,8 +312,8 @@ module Axlsx
|
|
314
312
|
|
315
313
|
workbook.comments.each do |comment|
|
316
314
|
if comment.size > 0
|
317
|
-
|
318
|
-
|
315
|
+
c_types << Axlsx::Override.new(:PartName => "/xl/#{comment.pn}",
|
316
|
+
:ContentType => COMMENT_CT)
|
319
317
|
end
|
320
318
|
end
|
321
319
|
|
@@ -325,18 +323,18 @@ module Axlsx
|
|
325
323
|
|
326
324
|
workbook.worksheets.each do |sheet|
|
327
325
|
c_types << Axlsx::Override.new(:PartName => "/xl/#{sheet.pn}",
|
328
|
-
|
326
|
+
:ContentType => WORKSHEET_CT)
|
329
327
|
end
|
330
328
|
exts = workbook.images.map { |image| image.extname.downcase }
|
331
329
|
exts.uniq.each do |ext|
|
332
|
-
ct = if
|
330
|
+
ct = if ['jpeg', 'jpg'].include?(ext)
|
333
331
|
JPEG_CT
|
334
332
|
elsif ext == 'gif'
|
335
333
|
GIF_CT
|
336
334
|
elsif ext == 'png'
|
337
335
|
PNG_CT
|
338
336
|
end
|
339
|
-
c_types << Axlsx::Default.new(:ContentType => ct, :Extension => ext
|
337
|
+
c_types << Axlsx::Default.new(:ContentType => ct, :Extension => ext)
|
340
338
|
end
|
341
339
|
if use_shared_strings
|
342
340
|
c_types << Axlsx::Override.new(:PartName => "/xl/#{SHARED_STRINGS_PN}",
|
@@ -379,7 +377,7 @@ module Axlsx
|
|
379
377
|
def parse_serialize_options(options, secondary_options)
|
380
378
|
if secondary_options
|
381
379
|
warn "[DEPRECATION] Axlsx::Package#serialize with 3 arguments is deprecated. " +
|
382
|
-
|
380
|
+
"Use keyword args instead e.g., package.serialize(output, confirm_valid: false, zip_command: 'zip')"
|
383
381
|
end
|
384
382
|
if options.is_a?(Hash)
|
385
383
|
options.merge!(secondary_options || {})
|
@@ -387,10 +385,11 @@ module Axlsx
|
|
387
385
|
if invalid_keys.any?
|
388
386
|
raise ArgumentError.new("Invalid keyword arguments: #{invalid_keys}")
|
389
387
|
end
|
388
|
+
|
390
389
|
[options.fetch(:confirm_valid, false), options.fetch(:zip_command, nil)]
|
391
390
|
else
|
392
391
|
warn "[DEPRECATION] Axlsx::Package#serialize with confirm_valid as a boolean is deprecated. " +
|
393
|
-
|
392
|
+
"Use keyword args instead e.g., package.serialize(output, confirm_valid: false)"
|
394
393
|
parse_serialize_options((secondary_options || {}).merge(confirm_valid: options), nil)
|
395
394
|
end
|
396
395
|
end
|
@@ -1,9 +1,7 @@
|
|
1
|
-
# encoding: UTF-8
|
2
1
|
module Axlsx
|
3
2
|
# A relationship defines a reference between package parts.
|
4
3
|
# @note Packages automatically manage relationships.
|
5
4
|
class Relationship
|
6
|
-
|
7
5
|
class << self
|
8
6
|
# Keeps track of relationship ids in use.
|
9
7
|
# @return [Array]
|
@@ -12,27 +10,27 @@ module Axlsx
|
|
12
10
|
end
|
13
11
|
|
14
12
|
# Initialize cached ids.
|
15
|
-
#
|
13
|
+
#
|
16
14
|
# This should be called before serializing a package (see {Package#serialize} and
|
17
|
-
# {Package#to_stream}) to make sure that serialization is idempotent (i.e.
|
15
|
+
# {Package#to_stream}) to make sure that serialization is idempotent (i.e.
|
18
16
|
# Relationship instances are generated with the same IDs everytime the package
|
19
17
|
# is serialized).
|
20
18
|
def initialize_ids_cache
|
21
19
|
Thread.current[:axlsx_relationship_ids_cache] = {}
|
22
20
|
end
|
23
|
-
|
21
|
+
|
24
22
|
# Clear cached ids.
|
25
|
-
#
|
23
|
+
#
|
26
24
|
# This should be called after serializing a package (see {Package#serialize} and
|
27
25
|
# {Package#to_stream}) to free the memory allocated for cache.
|
28
|
-
#
|
29
|
-
# Also, calling this avoids memory leaks (cached ids lingering around
|
30
|
-
# forever).
|
26
|
+
#
|
27
|
+
# Also, calling this avoids memory leaks (cached ids lingering around
|
28
|
+
# forever).
|
31
29
|
def clear_ids_cache
|
32
30
|
Thread.current[:axlsx_relationship_ids_cache] = nil
|
33
31
|
end
|
34
|
-
|
35
|
-
# Generate and return a unique id (eg. `rId123`) Used for setting {#Id}.
|
32
|
+
|
33
|
+
# Generate and return a unique id (eg. `rId123`) Used for setting {#Id}.
|
36
34
|
#
|
37
35
|
# The generated id depends on the number of previously cached ids, so using
|
38
36
|
# {clear_ids_cache} will automatically reset the generated ids, too.
|
@@ -42,12 +40,12 @@ module Axlsx
|
|
42
40
|
end
|
43
41
|
end
|
44
42
|
|
45
|
-
# The id of the relationship (eg. "rId123"). Most instances get their own unique id.
|
43
|
+
# The id of the relationship (eg. "rId123"). Most instances get their own unique id.
|
46
44
|
# However, some instances need to share the same id – see {#should_use_same_id_as?}
|
47
45
|
# for details.
|
48
46
|
# @return [String]
|
49
47
|
attr_reader :Id
|
50
|
-
|
48
|
+
|
51
49
|
# The location of the relationship target
|
52
50
|
# @return [String]
|
53
51
|
attr_reader :Target
|
@@ -77,16 +75,16 @@ module Axlsx
|
|
77
75
|
# The source object the relations belongs to (e.g. a hyperlink, drawing, ...). Needed when
|
78
76
|
# looking up the relationship for a specific object (see {Relationships#for}).
|
79
77
|
attr_reader :source_obj
|
80
|
-
|
81
|
-
# Initializes a new relationship.
|
78
|
+
|
79
|
+
# Initializes a new relationship.
|
82
80
|
# @param [Object] source_obj see {#source_obj}
|
83
81
|
# @param [String] type The type of the relationship
|
84
82
|
# @param [String] target The target for the relationship
|
85
83
|
# @option [Symbol] :target_mode only accepts :external.
|
86
|
-
def initialize(source_obj, type, target, options={})
|
84
|
+
def initialize(source_obj, type, target, options = {})
|
87
85
|
@source_obj = source_obj
|
88
|
-
self.Target=target
|
89
|
-
self.Type=type
|
86
|
+
self.Target = target
|
87
|
+
self.Type = type
|
90
88
|
self.TargetMode = options[:target_mode] if options[:target_mode]
|
91
89
|
@Id = (self.class.ids_cache[ids_cache_key] ||= self.class.next_free_id)
|
92
90
|
end
|
@@ -103,17 +101,17 @@ module Axlsx
|
|
103
101
|
# @param [String] str
|
104
102
|
# @return [String]
|
105
103
|
def to_xml_string(str = '')
|
106
|
-
h = Axlsx.instance_values_for(self).reject{|k, _| k == "source_obj"}
|
104
|
+
h = Axlsx.instance_values_for(self).reject { |k, _| k == "source_obj" }
|
107
105
|
str << '<Relationship '
|
108
|
-
str << (h.map { |key, value| '' << key.to_s << '="' << Axlsx::coder.encode(value.to_s) << '"'}.join(' '))
|
106
|
+
str << (h.map { |key, value| '' << key.to_s << '="' << Axlsx::coder.encode(value.to_s) << '"' }.join(' '))
|
109
107
|
str << '/>'
|
110
108
|
end
|
111
|
-
|
109
|
+
|
112
110
|
# A key that determines whether this relationship should use already generated id.
|
113
111
|
#
|
114
112
|
# Instances designating the same relationship need to use the same id. We can not simply
|
115
|
-
# compare the {#Target} attribute, though: `foo/bar.xml`, `../foo/bar.xml`,
|
116
|
-
# `../../foo/bar.xml` etc. are all different but probably mean the same file (this
|
113
|
+
# compare the {#Target} attribute, though: `foo/bar.xml`, `../foo/bar.xml`,
|
114
|
+
# `../../foo/bar.xml` etc. are all different but probably mean the same file (this
|
117
115
|
# is especially an issue for relationships in the context of pivot tables). So lets
|
118
116
|
# just ignore this attribute for now (except when {#TargetMode} is set to `:External` –
|
119
117
|
# then {#Target} will be an absolute URL and thus can safely be compared).
|
@@ -125,6 +123,5 @@ module Axlsx
|
|
125
123
|
key << self.Target if self.TargetMode == :External
|
126
124
|
key
|
127
125
|
end
|
128
|
-
|
129
126
|
end
|
130
127
|
end
|
@@ -1,11 +1,9 @@
|
|
1
|
-
# encoding: UTF-8
|
2
1
|
module Axlsx
|
3
|
-
require 'axlsx/rels/relationship.rb'
|
2
|
+
require 'axlsx/rels/relationship.rb'
|
4
3
|
|
5
4
|
# Relationships are a collection of Relations that define how package parts are related.
|
6
5
|
# @note The package automatically manages releationships.
|
7
6
|
class Relationships < SimpleTypedList
|
8
|
-
|
9
7
|
# Creates a new Relationships collection based on SimpleTypedList
|
10
8
|
def initialize
|
11
9
|
super Relationship
|
@@ -15,7 +13,7 @@ require 'axlsx/rels/relationship.rb'
|
|
15
13
|
# @see Relationship#source_obj
|
16
14
|
# @return [Relationship]
|
17
15
|
def for(source_obj)
|
18
|
-
find{ |rel| rel.source_obj == source_obj }
|
16
|
+
find { |rel| rel.source_obj == source_obj }
|
19
17
|
end
|
20
18
|
|
21
19
|
# serialize relationships
|
@@ -24,9 +22,8 @@ require 'axlsx/rels/relationship.rb'
|
|
24
22
|
def to_xml_string(str = '')
|
25
23
|
str << '<?xml version="1.0" encoding="UTF-8"?>'
|
26
24
|
str << ('<Relationships xmlns="' << RELS_R << '">')
|
27
|
-
each{ |rel| rel.to_xml_string(str) }
|
25
|
+
each { |rel| rel.to_xml_string(str) }
|
28
26
|
str << '</Relationships>'
|
29
27
|
end
|
30
|
-
|
31
28
|
end
|
32
29
|
end
|
@@ -1,8 +1,6 @@
|
|
1
|
-
# encoding: UTF-8
|
2
1
|
module Axlsx
|
3
2
|
# This class details a border used in Office Open XML spreadsheet styles.
|
4
3
|
class Border
|
5
|
-
|
6
4
|
include Axlsx::SerializedAttributes
|
7
5
|
include Axlsx::OptionsParser
|
8
6
|
|
@@ -21,7 +19,7 @@ module Axlsx
|
|
21
19
|
#
|
22
20
|
# @note The recommended way to manage borders is with Style#add_style
|
23
21
|
# @see Style#add_style
|
24
|
-
def initialize(options={})
|
22
|
+
def initialize(options = {})
|
25
23
|
@prs = SimpleTypedList.new BorderPr
|
26
24
|
parse_options options
|
27
25
|
end
|
@@ -68,6 +66,5 @@ module Axlsx
|
|
68
66
|
end
|
69
67
|
str << '</border>'
|
70
68
|
end
|
71
|
-
|
72
69
|
end
|
73
70
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: UTF-8
|
2
1
|
module Axlsx
|
3
2
|
# A border part.
|
4
3
|
class BorderPr
|
@@ -44,11 +43,11 @@ module Axlsx
|
|
44
43
|
# @option options [Symbol] name
|
45
44
|
# @option options [Symbol] style
|
46
45
|
# @see Axlsx::Border
|
47
|
-
def initialize(options={})
|
46
|
+
def initialize(options = {})
|
48
47
|
parse_options(options)
|
49
|
-
#options.each do |o|
|
48
|
+
# options.each do |o|
|
50
49
|
# self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
|
51
|
-
#end
|
50
|
+
# end
|
52
51
|
end
|
53
52
|
|
54
53
|
# @see name
|
@@ -66,6 +65,5 @@ module Axlsx
|
|
66
65
|
@color.to_xml_string(str) if @color.is_a?(Color)
|
67
66
|
str << ('</' << @name.to_s << '>')
|
68
67
|
end
|
69
|
-
|
70
68
|
end
|
71
69
|
end
|
@@ -1,16 +1,11 @@
|
|
1
|
-
# encoding: UTF-8
|
2
1
|
module Axlsx
|
3
|
-
|
4
|
-
|
5
2
|
# CellAlignment stores information about the cell alignment of a style Xf Object.
|
6
3
|
# @note Using Styles#add_style is the recommended way to manage cell alignment.
|
7
4
|
# @see Styles#add_style
|
8
5
|
class CellAlignment
|
9
|
-
|
10
|
-
|
11
6
|
include Axlsx::SerializedAttributes
|
12
7
|
include Axlsx::OptionsParser
|
13
|
-
|
8
|
+
|
14
9
|
serializable_attributes :horizontal, :vertical, :text_rotation, :wrap_text, :indent, :relative_indent, :justify_last_line, :shrink_to_fit, :reading_order
|
15
10
|
# Create a new cell_alignment object
|
16
11
|
# @option options [Symbol] horizontal
|
@@ -22,12 +17,10 @@ module Axlsx
|
|
22
17
|
# @option options [Boolean] justify_last_line
|
23
18
|
# @option options [Boolean] shrink_to_fit
|
24
19
|
# @option options [Integer] reading_order
|
25
|
-
def initialize(options={})
|
20
|
+
def initialize(options = {})
|
26
21
|
parse_options options
|
27
22
|
end
|
28
23
|
|
29
|
-
|
30
|
-
|
31
24
|
# The horizontal alignment of the cell.
|
32
25
|
# @note
|
33
26
|
# The horizontal cell alignement style must be one of
|
@@ -127,6 +120,5 @@ module Axlsx
|
|
127
120
|
def to_xml_string(str = '')
|
128
121
|
serialized_tag('alignment', str)
|
129
122
|
end
|
130
|
-
|
131
123
|
end
|
132
124
|
end
|
@@ -1,10 +1,8 @@
|
|
1
|
-
# encoding: UTF-8
|
2
1
|
module Axlsx
|
3
2
|
# CellProtection stores information about locking or hiding cells in spreadsheet.
|
4
3
|
# @note Using Styles#add_style is the recommended way to manage cell protection.
|
5
4
|
# @see Styles#add_style
|
6
5
|
class CellProtection
|
7
|
-
|
8
6
|
include Axlsx::OptionsParser
|
9
7
|
include Axlsx::SerializedAttributes
|
10
8
|
|
@@ -21,7 +19,7 @@ module Axlsx
|
|
21
19
|
# Creates a new CellProtection
|
22
20
|
# @option options [Boolean] hidden value for hidden protection
|
23
21
|
# @option options [Boolean] locked value for locked protection
|
24
|
-
def initialize(options={})
|
22
|
+
def initialize(options = {})
|
25
23
|
parse_options options
|
26
24
|
end
|
27
25
|
|
@@ -36,6 +34,5 @@ module Axlsx
|
|
36
34
|
def to_xml_string(str = '')
|
37
35
|
serialized_tag('protection', str)
|
38
36
|
end
|
39
|
-
|
40
37
|
end
|
41
38
|
end
|
@@ -1,10 +1,8 @@
|
|
1
|
-
# encoding: UTF-8
|
2
1
|
module Axlsx
|
3
2
|
# CellStyle defines named styles that reference defined formatting records and can be used in your worksheet.
|
4
3
|
# @note Using Styles#add_style is the recommended way to manage cell styling.
|
5
4
|
# @see Styles#add_style
|
6
5
|
class CellStyle
|
7
|
-
|
8
6
|
include Axlsx::OptionsParser
|
9
7
|
include Axlsx::SerializedAttributes
|
10
8
|
|
@@ -15,7 +13,7 @@ module Axlsx
|
|
15
13
|
# @option options [Integer] iLevel
|
16
14
|
# @option options [Boolean] hidden
|
17
15
|
# @option options [Boolean] customBuiltIn
|
18
|
-
def initialize(options={})
|
16
|
+
def initialize(options = {})
|
19
17
|
parse_options options
|
20
18
|
end
|
21
19
|
|
@@ -47,8 +45,8 @@ module Axlsx
|
|
47
45
|
# @return [Boolean]
|
48
46
|
attr_reader :customBuiltin
|
49
47
|
|
50
|
-
|
51
|
-
def name=(v)
|
48
|
+
# @see name
|
49
|
+
def name=(v) Axlsx::validate_string v; @name = v end
|
52
50
|
# @see xfId
|
53
51
|
def xfId=(v) Axlsx::validate_unsigned_int v; @xfId = v end
|
54
52
|
# @see builtinId
|
@@ -66,7 +64,5 @@ module Axlsx
|
|
66
64
|
def to_xml_string(str = '')
|
67
65
|
serialized_tag('cellStyle', str)
|
68
66
|
end
|
69
|
-
|
70
67
|
end
|
71
|
-
|
72
68
|
end
|