write_xlsx 1.09.5 → 1.10.1
Sign up to get free protection for your applications and to get access to all the features.
- 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([])
|