write_xlsx 1.09.5 → 1.10.1
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/.rubocop.yml +6 -1
- data/Changes +8 -0
- data/LICENSE.txt +1 -1
- data/README.md +1 -1
- data/examples/autofilter.rb +39 -10
- data/examples/chart_area.rb +12 -12
- data/examples/chart_bar.rb +12 -12
- data/examples/chart_clustered.rb +12 -12
- data/examples/chart_column.rb +12 -12
- data/examples/chart_combined.rb +25 -25
- data/examples/chart_data_labels.rb +99 -99
- data/examples/chart_data_table.rb +25 -25
- data/examples/chart_data_tools.rb +50 -50
- data/examples/chart_doughnut.rb +29 -29
- data/examples/chart_gauge.rb +18 -18
- data/examples/chart_line.rb +32 -32
- data/examples/chart_pareto.rb +16 -16
- data/examples/chart_pie.rb +17 -17
- data/examples/chart_radar.rb +38 -38
- data/examples/chart_scatter.rb +12 -12
- data/examples/chart_secondary_axis.rb +13 -13
- data/examples/chart_stock.rb +12 -12
- data/examples/chart_styles.rb +5 -5
- data/examples/colors.rb +11 -11
- data/examples/comments2.rb +15 -15
- data/examples/conditional_format.rb +74 -74
- data/examples/data_validate.rb +64 -64
- data/examples/date_time.rb +3 -3
- data/examples/demo.rb +14 -14
- data/examples/diag_border.rb +6 -6
- data/examples/dynamic_arrays.rb +247 -0
- data/examples/formats.rb +10 -10
- data/examples/hyperlink1.rb +4 -4
- data/examples/ignore_errors.rb +2 -2
- data/examples/indent.rb +2 -2
- data/examples/lambda.rb +43 -0
- data/examples/macros.rb +4 -4
- data/examples/merge1.rb +1 -1
- data/examples/merge2.rb +9 -9
- data/examples/merge3.rb +5 -5
- data/examples/merge4.rb +20 -20
- data/examples/merge5.rb +18 -18
- data/examples/merge6.rb +7 -7
- data/examples/outline.rb +1 -1
- data/examples/outline_collapsed.rb +1 -1
- data/examples/panes.rb +4 -4
- data/examples/properties.rb +9 -9
- data/examples/protection.rb +2 -2
- data/examples/rich_strings.rb +6 -6
- data/examples/shape1.rb +7 -7
- data/examples/shape2.rb +16 -16
- data/examples/shape3.rb +5 -5
- data/examples/shape4.rb +7 -7
- data/examples/shape5.rb +7 -7
- data/examples/shape6.rb +7 -7
- data/examples/shape7.rb +10 -10
- data/examples/shape8.rb +10 -10
- data/examples/shape_all.rb +4 -4
- data/examples/sparklines1.rb +11 -11
- data/examples/sparklines2.rb +76 -76
- data/examples/tables.rb +87 -87
- data/examples/watermark.png +0 -0
- data/examples/watermark.rb +26 -0
- data/lib/write_xlsx/chart/bar.rb +4 -4
- data/lib/write_xlsx/chart/line.rb +1 -1
- data/lib/write_xlsx/chart/radar.rb +2 -2
- data/lib/write_xlsx/chart/scatter.rb +4 -4
- data/lib/write_xlsx/chart/series.rb +27 -27
- data/lib/write_xlsx/chart/stock.rb +5 -5
- data/lib/write_xlsx/chart.rb +31 -30
- data/lib/write_xlsx/chartsheet.rb +1 -0
- data/lib/write_xlsx/col_name.rb +1 -0
- data/lib/write_xlsx/colors.rb +20 -19
- data/lib/write_xlsx/compatibility.rb +1 -0
- data/lib/write_xlsx/drawing.rb +20 -10
- data/lib/write_xlsx/format.rb +5 -0
- data/lib/write_xlsx/formats.rb +1 -0
- data/lib/write_xlsx/gradient.rb +2 -0
- data/lib/write_xlsx/package/app.rb +1 -0
- data/lib/write_xlsx/package/button.rb +6 -2
- data/lib/write_xlsx/package/comments.rb +3 -1
- data/lib/write_xlsx/package/conditional_format.rb +4 -3
- data/lib/write_xlsx/package/content_types.rb +1 -0
- data/lib/write_xlsx/package/core.rb +1 -0
- data/lib/write_xlsx/package/custom.rb +1 -0
- data/lib/write_xlsx/package/metadata.rb +1 -0
- data/lib/write_xlsx/package/packager.rb +1 -0
- data/lib/write_xlsx/package/relationships.rb +1 -0
- data/lib/write_xlsx/package/shared_strings.rb +1 -1
- data/lib/write_xlsx/package/styles.rb +1 -0
- data/lib/write_xlsx/package/table.rb +9 -8
- data/lib/write_xlsx/package/theme.rb +1 -0
- data/lib/write_xlsx/package/vml.rb +1 -0
- data/lib/write_xlsx/package/xml_writer_simple.rb +21 -2
- data/lib/write_xlsx/shape.rb +6 -5
- data/lib/write_xlsx/sheets.rb +2 -1
- data/lib/write_xlsx/sparkline.rb +287 -286
- data/lib/write_xlsx/utility.rb +25 -26
- data/lib/write_xlsx/version.rb +3 -1
- data/lib/write_xlsx/workbook.rb +20 -20
- data/lib/write_xlsx/worksheet/cell_data.rb +53 -63
- data/lib/write_xlsx/worksheet/data_validation.rb +1 -0
- data/lib/write_xlsx/worksheet/hyperlink.rb +3 -2
- data/lib/write_xlsx/worksheet/page_setup.rb +1 -0
- data/lib/write_xlsx/worksheet.rb +287 -74
- data/lib/write_xlsx/zip_file_utils.rb +1 -0
- data/lib/write_xlsx.rb +1 -0
- data/write_xlsx.gemspec +1 -0
- metadata +8 -4
data/lib/write_xlsx/colors.rb
CHANGED
@@ -1,27 +1,28 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
module Writexlsx
|
4
5
|
class Colors
|
5
6
|
COLORS = {
|
6
|
-
:
|
7
|
-
:
|
8
|
-
:
|
9
|
-
:
|
10
|
-
:
|
11
|
-
:
|
12
|
-
:
|
13
|
-
:
|
14
|
-
:
|
15
|
-
:
|
16
|
-
:
|
17
|
-
:
|
18
|
-
:
|
19
|
-
:
|
20
|
-
:
|
21
|
-
:
|
22
|
-
:
|
23
|
-
:
|
24
|
-
:
|
7
|
+
aqua: 0x0F,
|
8
|
+
cyan: 0x0F,
|
9
|
+
black: 0x08,
|
10
|
+
blue: 0x0C,
|
11
|
+
brown: 0x10,
|
12
|
+
magenta: 0x0E,
|
13
|
+
fuchsia: 0x0E,
|
14
|
+
gray: 0x17,
|
15
|
+
grey: 0x17,
|
16
|
+
green: 0x11,
|
17
|
+
lime: 0x0B,
|
18
|
+
navy: 0x12,
|
19
|
+
orange: 0x35,
|
20
|
+
pink: 0x21,
|
21
|
+
purple: 0x14,
|
22
|
+
red: 0x0A,
|
23
|
+
silver: 0x16,
|
24
|
+
white: 0x09,
|
25
|
+
yellow: 0x0D
|
25
26
|
} # :nodoc:
|
26
27
|
|
27
28
|
###############################################################################
|
data/lib/write_xlsx/drawing.rb
CHANGED
@@ -1,24 +1,26 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
require 'write_xlsx/package/xml_writer_simple'
|
4
5
|
require 'write_xlsx/utility'
|
5
6
|
|
6
7
|
module Writexlsx
|
7
8
|
class Drawing
|
8
|
-
attr_accessor :type, :dimensions, :width, :height, :
|
9
|
+
attr_accessor :type, :dimensions, :width, :height, :shape, :anchor, :rel_index, :url_rel_index, :name, :description
|
9
10
|
attr_reader :tip, :decorative
|
10
11
|
|
11
|
-
def initialize(type, dimensions, width, height,
|
12
|
+
def initialize(type, dimensions, width, height, shape, anchor, rel_index = nil, url_rel_index = nil, tip = nil, name = nil, description = nil, decorative = nil)
|
12
13
|
@type = type
|
13
14
|
@dimensions = dimensions
|
14
15
|
@width = width
|
15
16
|
@height = height
|
16
|
-
@description = description
|
17
17
|
@shape = shape
|
18
18
|
@anchor = anchor
|
19
19
|
@rel_index = rel_index
|
20
20
|
@url_rel_index = url_rel_index
|
21
21
|
@tip = tip
|
22
|
+
@name = name
|
23
|
+
@description = description
|
22
24
|
@decorative = decorative
|
23
25
|
end
|
24
26
|
end
|
@@ -96,12 +98,13 @@ module Writexlsx
|
|
96
98
|
type = drawing.type
|
97
99
|
width = drawing.width
|
98
100
|
height = drawing.height
|
99
|
-
description = drawing.description
|
100
101
|
shape = drawing.shape
|
101
102
|
anchor = drawing.anchor
|
102
103
|
rel_index = drawing.rel_index
|
103
104
|
url_rel_index = drawing.url_rel_index
|
104
105
|
tip = drawing.tip
|
106
|
+
name = drawing.name
|
107
|
+
description = drawing.description
|
105
108
|
decorative = drawing.decorative
|
106
109
|
|
107
110
|
col_from, row_from, col_from_offset, row_from_offset,
|
@@ -129,7 +132,7 @@ module Writexlsx
|
|
129
132
|
# Graphic frame.
|
130
133
|
|
131
134
|
# Write the xdr:graphicFrame element for charts.
|
132
|
-
write_graphic_frame(index, rel_index, description)
|
135
|
+
write_graphic_frame(index, rel_index, name, description, decorative)
|
133
136
|
elsif type == 2
|
134
137
|
# Write the xdr:pic element.
|
135
138
|
write_pic(
|
@@ -263,14 +266,17 @@ module Writexlsx
|
|
263
266
|
#
|
264
267
|
# Write the <xdr:graphicFrame> element.
|
265
268
|
#
|
266
|
-
def write_graphic_frame(
|
267
|
-
|
269
|
+
def write_graphic_frame(
|
270
|
+
index, rel_index, name = nil,
|
271
|
+
description = nil, decorative = nil, macro = nil
|
272
|
+
)
|
273
|
+
macro ||= ''
|
268
274
|
|
269
275
|
attributes = [['macro', macro]]
|
270
276
|
|
271
277
|
@writer.tag_elements('xdr:graphicFrame', attributes) do
|
272
278
|
# Write the xdr:nvGraphicFramePr element.
|
273
|
-
write_nv_graphic_frame_pr(index, name)
|
279
|
+
write_nv_graphic_frame_pr(index, name, description, decorative)
|
274
280
|
# Write the xdr:xfrm element.
|
275
281
|
write_xfrm
|
276
282
|
# Write the a:graphic element.
|
@@ -281,12 +287,16 @@ module Writexlsx
|
|
281
287
|
#
|
282
288
|
# Write the <xdr:nvGraphicFramePr> element.
|
283
289
|
#
|
284
|
-
def write_nv_graphic_frame_pr(
|
290
|
+
def write_nv_graphic_frame_pr(
|
291
|
+
index, name = nil, description = nil, decorative = nil
|
292
|
+
)
|
293
|
+
|
285
294
|
name = "Chart #{index}" unless ptrue?(name)
|
286
295
|
|
287
296
|
@writer.tag_elements('xdr:nvGraphicFramePr') do
|
288
297
|
# Write the xdr:cNvPr element.
|
289
|
-
write_c_nv_pr(index + 1, name
|
298
|
+
write_c_nv_pr(index + 1, name, description,
|
299
|
+
nil, nil, decorative)
|
290
300
|
# Write the xdr:cNvGraphicFramePr element.
|
291
301
|
write_c_nv_graphic_frame_pr
|
292
302
|
end
|
data/lib/write_xlsx/format.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
require 'write_xlsx/utility'
|
4
5
|
|
@@ -658,6 +659,10 @@ module Writexlsx
|
|
658
659
|
attributes
|
659
660
|
end
|
660
661
|
|
662
|
+
def force_text_format?
|
663
|
+
@num_format == 49 # Text format ('@')
|
664
|
+
end
|
665
|
+
|
661
666
|
private
|
662
667
|
|
663
668
|
def write_font_shapes(writer)
|
data/lib/write_xlsx/formats.rb
CHANGED
data/lib/write_xlsx/gradient.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
require 'write_xlsx/utility'
|
4
5
|
|
@@ -7,10 +8,13 @@ module Writexlsx
|
|
7
8
|
class Button
|
8
9
|
include Writexlsx::Utility
|
9
10
|
|
10
|
-
attr_accessor :font, :macro, :vertices
|
11
|
+
attr_accessor :font, :macro, :vertices, :description
|
11
12
|
|
12
13
|
def v_shape_attributes(id, z_index)
|
13
|
-
attributes = v_shape_attributes_base(id
|
14
|
+
attributes = v_shape_attributes_base(id)
|
15
|
+
attributes << ['alt', description] if description
|
16
|
+
|
17
|
+
attributes << ['style', (v_shape_style_base(z_index, vertices) + style_addition).join]
|
14
18
|
attributes << ['o:button', 't']
|
15
19
|
attributes << ['fillcolor', color]
|
16
20
|
attributes << ['strokecolor', 'windowText [64]']
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
require 'write_xlsx/format'
|
4
5
|
require 'write_xlsx/package/xml_writer_simple'
|
@@ -112,7 +113,8 @@ module Writexlsx
|
|
112
113
|
end
|
113
114
|
|
114
115
|
def v_shape_attributes(id, z_index)
|
115
|
-
attr = v_shape_attributes_base(id
|
116
|
+
attr = v_shape_attributes_base(id)
|
117
|
+
attr << ['style', (v_shape_style_base(z_index, vertices) + style_addition).join]
|
116
118
|
attr << ['fillcolor', color]
|
117
119
|
attr << ['o:insetmode', 'auto']
|
118
120
|
attr
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
module Writexlsx
|
4
5
|
module Package
|
@@ -657,9 +658,9 @@ module Writexlsx
|
|
657
658
|
# Set the default icon properties.
|
658
659
|
total_icons.times do
|
659
660
|
props << {
|
660
|
-
:
|
661
|
-
:
|
662
|
-
:
|
661
|
+
criteria: 0,
|
662
|
+
value: 0,
|
663
|
+
type: 'percent'
|
663
664
|
}
|
664
665
|
end
|
665
666
|
|
@@ -27,7 +27,7 @@ module Writexlsx
|
|
27
27
|
unless @strings_index[string]
|
28
28
|
# Only first time the string will be append to list
|
29
29
|
# next time we only check and not #dup it
|
30
|
-
str = string.
|
30
|
+
str = string.frozen? ? string : string.freeze
|
31
31
|
@strings << str
|
32
32
|
@strings_index[str] = @strings.size - 1
|
33
33
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
require 'write_xlsx/package/xml_writer_simple'
|
4
5
|
require 'write_xlsx/utility'
|
@@ -247,14 +248,14 @@ module Writexlsx
|
|
247
248
|
.gsub(/\]/, "']")
|
248
249
|
|
249
250
|
subtotals = {
|
250
|
-
:
|
251
|
-
:
|
252
|
-
:
|
253
|
-
:
|
254
|
-
:
|
255
|
-
:
|
256
|
-
:
|
257
|
-
:
|
251
|
+
average: 101,
|
252
|
+
countNums: 102,
|
253
|
+
count: 103,
|
254
|
+
max: 104,
|
255
|
+
min: 105,
|
256
|
+
stdDev: 107,
|
257
|
+
sum: 109,
|
258
|
+
var: 110
|
258
259
|
}
|
259
260
|
|
260
261
|
unless (func_num = subtotals[function.to_sym])
|
@@ -13,6 +13,11 @@ module Writexlsx
|
|
13
13
|
|
14
14
|
def initialize
|
15
15
|
@io = StringIO.new
|
16
|
+
# Will allocate new string once, then use allocated string
|
17
|
+
# Key is tag name
|
18
|
+
# Only tags without attributes will be cached
|
19
|
+
@tag_start_cache = {}
|
20
|
+
@tag_end_cache = {}
|
16
21
|
end
|
17
22
|
|
18
23
|
def set_xml_writer(filename = nil)
|
@@ -41,7 +46,16 @@ module Writexlsx
|
|
41
46
|
end
|
42
47
|
|
43
48
|
def start_tag_str(tag, attr = [])
|
44
|
-
|
49
|
+
if attr.empty?
|
50
|
+
result = @tag_start_cache[tag]
|
51
|
+
unless result
|
52
|
+
result = "<#{tag}>"
|
53
|
+
@tag_start_cache[tag] = result
|
54
|
+
end
|
55
|
+
else
|
56
|
+
result = "<#{tag}#{key_vals(attr)}>"
|
57
|
+
end
|
58
|
+
result
|
45
59
|
end
|
46
60
|
|
47
61
|
def end_tag(tag)
|
@@ -49,7 +63,12 @@ module Writexlsx
|
|
49
63
|
end
|
50
64
|
|
51
65
|
def end_tag_str(tag)
|
52
|
-
|
66
|
+
result = @tag_end_cache[tag]
|
67
|
+
unless result
|
68
|
+
result = "</#{tag}>"
|
69
|
+
@tag_end_cache[tag] = result
|
70
|
+
end
|
71
|
+
result
|
53
72
|
end
|
54
73
|
|
55
74
|
def empty_tag(tag, attr = [])
|
data/lib/write_xlsx/shape.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
module Writexlsx
|
4
5
|
###############################################################################
|
@@ -203,11 +204,11 @@ module Writexlsx
|
|
203
204
|
def auto_locate_connectors(shapes, shape_hash)
|
204
205
|
# Valid connector shapes.
|
205
206
|
connector_shapes = {
|
206
|
-
:
|
207
|
-
:
|
208
|
-
:
|
209
|
-
:
|
210
|
-
:
|
207
|
+
straightConnector: 1,
|
208
|
+
Connector: 1,
|
209
|
+
bentConnector: 1,
|
210
|
+
curvedConnector: 1,
|
211
|
+
line: 1
|
211
212
|
}
|
212
213
|
|
213
214
|
shape_base = @type.chop.to_sym # Remove the number of segments from end of type.
|
data/lib/write_xlsx/sheets.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
require 'delegate'
|
4
5
|
require 'write_xlsx/package/xml_writer_simple'
|
@@ -7,7 +8,7 @@ module Writexlsx
|
|
7
8
|
class Sheets < DelegateClass(Array)
|
8
9
|
include Writexlsx::Utility
|
9
10
|
|
10
|
-
BASE_NAME = { :
|
11
|
+
BASE_NAME = { sheet: 'Sheet', chart: 'Chart' } # :nodoc:
|
11
12
|
|
12
13
|
def initialize
|
13
14
|
super([])
|