write_xlsx 1.07.0 → 1.09.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/Changes +40 -0
- data/README.md +1 -1
- data/examples/background.rb +19 -0
- data/examples/ignore_errors.rb +39 -0
- data/ignore_errors.xlsx +0 -0
- data/lib/write_xlsx/chart/axis.rb +3 -3
- data/lib/write_xlsx/chart/scatter.rb +0 -15
- data/lib/write_xlsx/chart/series.rb +1 -1
- data/lib/write_xlsx/chart.rb +31 -33
- data/lib/write_xlsx/chartsheet.rb +3 -3
- data/lib/write_xlsx/drawing.rb +118 -55
- data/lib/write_xlsx/format.rb +11 -179
- data/lib/write_xlsx/package/app.rb +5 -5
- data/lib/write_xlsx/package/button.rb +8 -8
- data/lib/write_xlsx/package/comments.rb +8 -8
- data/lib/write_xlsx/package/conditional_format.rb +2 -8
- data/lib/write_xlsx/package/content_types.rb +18 -9
- data/lib/write_xlsx/package/core.rb +5 -5
- data/lib/write_xlsx/package/custom.rb +2 -2
- data/lib/write_xlsx/package/metadata.rb +159 -0
- data/lib/write_xlsx/package/packager.rb +22 -0
- data/lib/write_xlsx/package/shared_strings.rb +6 -6
- data/lib/write_xlsx/package/styles.rb +27 -14
- data/lib/write_xlsx/package/table.rb +31 -23
- data/lib/write_xlsx/package/theme.rb +1 -1
- data/lib/write_xlsx/package/vml.rb +43 -43
- data/lib/write_xlsx/shape.rb +17 -15
- data/lib/write_xlsx/sparkline.rb +340 -340
- data/lib/write_xlsx/utility.rb +9 -24
- data/lib/write_xlsx/version.rb +1 -1
- data/lib/write_xlsx/workbook.rb +193 -643
- data/lib/write_xlsx/worksheet/cell_data.rb +25 -3
- data/lib/write_xlsx/worksheet/data_validation.rb +21 -26
- data/lib/write_xlsx/worksheet/hyperlink.rb +4 -4
- data/lib/write_xlsx/worksheet/page_setup.rb +12 -12
- data/lib/write_xlsx/worksheet.rb +461 -4233
- data/test/drawing/{test_write_ext.rb → test_write_xdr_ext.rb} +2 -2
- data/test/perl_output/background.xlsx +0 -0
- data/test/perl_output/ignore_errors.xlsx +0 -0
- data/test/regression/images/logo.gif +0 -0
- data/test/regression/images/logo.jpg +0 -0
- data/test/regression/images/red.gif +0 -0
- data/test/regression/test_background01.rb +23 -0
- data/test/regression/test_background02.rb +23 -0
- data/test/regression/test_background03.rb +24 -0
- data/test/regression/test_background04.rb +25 -0
- data/test/regression/test_background05.rb +25 -0
- data/test/regression/test_background06.rb +31 -0
- data/test/regression/test_background07.rb +37 -0
- data/test/regression/test_chart_axis47.rb +52 -0
- data/test/regression/test_chart_axis48.rb +53 -0
- data/test/regression/test_chart_crossing01.rb +1 -1
- data/test/regression/test_chart_crossing05.rb +46 -0
- data/test/regression/test_chart_crossing06.rb +46 -0
- data/test/regression/test_chart_data_labels48.rb +55 -0
- data/test/regression/test_chart_data_labels49.rb +55 -0
- data/test/regression/test_chart_data_labels50.rb +57 -0
- data/test/regression/test_dynamic_array01.rb +25 -0
- data/test/regression/test_format16.rb +24 -0
- data/test/regression/test_format17.rb +24 -0
- data/test/regression/test_header04.rb +30 -0
- data/test/regression/test_hyperlink50.rb +27 -0
- data/test/regression/test_hyperlink51.rb +27 -0
- data/test/regression/test_ignore_error01.rb +23 -0
- data/test/regression/test_ignore_error02.rb +24 -0
- data/test/regression/test_ignore_error03.rb +26 -0
- data/test/regression/test_ignore_error04.rb +26 -0
- data/test/regression/test_ignore_error05.rb +32 -0
- data/test/regression/test_ignore_error06.rb +32 -0
- data/test/regression/test_image52.rb +26 -0
- data/test/regression/test_image53.rb +26 -0
- data/test/regression/test_image54.rb +26 -0
- data/test/regression/test_image55.rb +27 -0
- data/test/regression/test_image56.rb +23 -0
- data/test/regression/test_image57.rb +23 -0
- data/test/regression/test_protect04.rb +32 -0
- data/test/regression/test_protect05.rb +35 -0
- data/test/regression/test_protect06.rb +35 -0
- data/test/regression/test_protect07.rb +23 -0
- data/test/regression/test_set_column10.rb +55 -0
- data/test/regression/test_set_column11.rb +48 -0
- data/test/regression/test_set_row01.rb +35 -0
- data/test/regression/test_set_row02.rb +35 -0
- data/test/regression/test_set_row03.rb +35 -0
- data/test/regression/test_set_row04.rb +35 -0
- data/test/regression/test_table26.rb +38 -0
- data/test/regression/xlsx_files/background01.xlsx +0 -0
- data/test/regression/xlsx_files/background02.xlsx +0 -0
- data/test/regression/xlsx_files/background03.xlsx +0 -0
- data/test/regression/xlsx_files/background04.xlsx +0 -0
- data/test/regression/xlsx_files/background05.xlsx +0 -0
- data/test/regression/xlsx_files/background06.xlsx +0 -0
- data/test/regression/xlsx_files/background07.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis47.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis48.xlsx +0 -0
- data/test/regression/xlsx_files/chart_crossing05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_crossing06.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels48.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels49.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels50.xlsx +0 -0
- data/test/regression/xlsx_files/dynamic_array01.xlsx +0 -0
- data/test/regression/xlsx_files/format16.xlsx +0 -0
- data/test/regression/xlsx_files/format17.xlsx +0 -0
- data/test/regression/xlsx_files/header04.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink50.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink51.xlsx +0 -0
- data/test/regression/xlsx_files/ignore_error01.xlsx +0 -0
- data/test/regression/xlsx_files/ignore_error02.xlsx +0 -0
- data/test/regression/xlsx_files/ignore_error03.xlsx +0 -0
- data/test/regression/xlsx_files/ignore_error04.xlsx +0 -0
- data/test/regression/xlsx_files/ignore_error05.xlsx +0 -0
- data/test/regression/xlsx_files/ignore_error06.xlsx +0 -0
- data/test/regression/xlsx_files/image52.xlsx +0 -0
- data/test/regression/xlsx_files/image53.xlsx +0 -0
- data/test/regression/xlsx_files/image54.xlsx +0 -0
- data/test/regression/xlsx_files/image55.xlsx +0 -0
- data/test/regression/xlsx_files/image56.xlsx +0 -0
- data/test/regression/xlsx_files/image57.xlsx +0 -0
- data/test/regression/xlsx_files/protect04.xlsx +0 -0
- data/test/regression/xlsx_files/protect05.xlsx +0 -0
- data/test/regression/xlsx_files/protect06.xlsx +0 -0
- data/test/regression/xlsx_files/protect07.xlsx +0 -0
- data/test/regression/xlsx_files/set_row01.xlsx +0 -0
- data/test/regression/xlsx_files/set_row03.xlsx +0 -0
- data/test/regression/xlsx_files/table26.xlsx +0 -0
- data/test/test_example_match.rb +43 -0
- data/test/utility/test_range.rb +20 -0
- data/test/worksheet/test_pixels_to_row_col.rb +46 -0
- metadata +190 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c6e34fc6f5c19637ceda0a196039c186fea4e0b6959c1d99d6d13260854cf0fd
|
|
4
|
+
data.tar.gz: c582b95f3b8e9851015bd8555a8d6b5a1e9d9d9f4cec1e66357ea328963b765e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 00a16bb85b40a0e8ca072e1afaac2723f9bd845d28c4ea495c8c9fab0e4bad40c2f2b6cbe2875cdec97fcb8a0ad0a1f53a357c479e838bb873debba49e8de8f5
|
|
7
|
+
data.tar.gz: ae74b4e1506d658d770c3667f45043e3f999d10bce0700e48a40c0cfcc1d07ce7d40e4a77e8b51ea7b65dbaecc2b131a9793b124e064c9e5448ee50e5c16808e
|
data/Changes
CHANGED
|
@@ -1,5 +1,45 @@
|
|
|
1
1
|
Change history of write_xlsx rubygem.
|
|
2
2
|
|
|
3
|
+
2021-11-26 v1.09.0
|
|
4
|
+
|
|
5
|
+
Added support for background images in worksheets. See set_background().
|
|
6
|
+
|
|
7
|
+
Added support for GIF image files (and in Excel 365, animated GIF files).
|
|
8
|
+
|
|
9
|
+
Added support for pixel sizing in set_row() and set_column() via new
|
|
10
|
+
functions called set_row_pixels() and set_column_pixels().
|
|
11
|
+
|
|
12
|
+
2021-11-19 v1.08.0
|
|
13
|
+
|
|
14
|
+
Added ability to add accessibility options "description" and
|
|
15
|
+
"decorative" to images via insert_image().
|
|
16
|
+
|
|
17
|
+
Added the workbook read_only_recommended() method to set the Excel
|
|
18
|
+
"Read-only Recommended" option that is available when saving a file.
|
|
19
|
+
|
|
20
|
+
Added option to set a chart crossing to 'min' as well as the existing
|
|
21
|
+
'max' option. The 'min' option isn't available in the Excel interface
|
|
22
|
+
but can be enabled via VBA.
|
|
23
|
+
|
|
24
|
+
Added option to unprotect ranges in protected worksheets.
|
|
25
|
+
|
|
26
|
+
Added check, and warning, for worksheet tables with no data row. Either
|
|
27
|
+
with or without a header row.
|
|
28
|
+
|
|
29
|
+
Added ignore_errors() worksheet method to ignore Excel worksheet
|
|
30
|
+
errors/warnings in user defined ranges.
|
|
31
|
+
|
|
32
|
+
Fixed issue where pattern formats without colours where given a default
|
|
33
|
+
black fill colour.
|
|
34
|
+
|
|
35
|
+
Fix issue where custom chart data labels didn't inherit the position for
|
|
36
|
+
the data labels in the series.
|
|
37
|
+
|
|
38
|
+
Fixed issue with relative url links in images.
|
|
39
|
+
|
|
40
|
+
Fixed issue where headers/footers were restricted to 254 characters
|
|
41
|
+
instead of 255.
|
|
42
|
+
|
|
3
43
|
2021-02-17 v1.07.0
|
|
4
44
|
|
|
5
45
|
Added support for Border, Fill, Pattern and Gradient formatting to chart
|
data/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
gem to create a new file in the Excel 2007+ XLSX format, and you can use the
|
|
7
7
|
same interface as writeexcel gem. write_xlsx is converted from Perl's module
|
|
8
|
-
[Excel::Writer::XLSX-1.
|
|
8
|
+
[Excel::Writer::XLSX-1.09](https://github.com/jmcnamara/excel-writer-xlsx/tree/CPAN_1.09)
|
|
9
9
|
|
|
10
10
|
## Description
|
|
11
11
|
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
|
|
4
|
+
#######################################################################
|
|
5
|
+
#
|
|
6
|
+
# An example of setting a worksheet background image with Excel::Writer::XLSX.
|
|
7
|
+
#
|
|
8
|
+
# Copyright 2000-2021, John McNamara, jmcnamara@cpan.org
|
|
9
|
+
# convert to ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
|
|
10
|
+
#
|
|
11
|
+
|
|
12
|
+
require 'write_xlsx'
|
|
13
|
+
|
|
14
|
+
workbook = WriteXLSX.new('background.xlsx')
|
|
15
|
+
worksheet = workbook.add_worksheet
|
|
16
|
+
|
|
17
|
+
worksheet.set_background('republic.png')
|
|
18
|
+
|
|
19
|
+
workbook.close
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
|
|
4
|
+
##############################################################################
|
|
5
|
+
#
|
|
6
|
+
# An example of turning off worksheet cells errors/warnings using the
|
|
7
|
+
# Excel::Writer::XLSX module.
|
|
8
|
+
#
|
|
9
|
+
# Copyright 2000-2021, John McNamara, jmcnamara@cpan.org
|
|
10
|
+
# convert to ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
|
|
11
|
+
#
|
|
12
|
+
|
|
13
|
+
require 'write_xlsx'
|
|
14
|
+
|
|
15
|
+
workbook = WriteXLSX.new('ignore_errors.xlsx')
|
|
16
|
+
worksheet = workbook.add_worksheet
|
|
17
|
+
|
|
18
|
+
# Write strings that looks like numbers. This will cause an Excel warning.
|
|
19
|
+
worksheet.write_string('C2', '123')
|
|
20
|
+
worksheet.write_string('C3', '123')
|
|
21
|
+
|
|
22
|
+
# Write a divide by zero formula. This will also cause an Excel warning.
|
|
23
|
+
worksheet.write_formula('C5', '=1/0')
|
|
24
|
+
worksheet.write_formula('C6', '=1/0')
|
|
25
|
+
|
|
26
|
+
# Turn off some of the warnings:
|
|
27
|
+
worksheet.ignore_errors(
|
|
28
|
+
:number_stored_as_text => 'C3',
|
|
29
|
+
:eval_error => 'C6'
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
# Write some descriptions for the cells and make the column wider for clarity.
|
|
33
|
+
worksheet.set_column('B:B', 16)
|
|
34
|
+
worksheet.write('B2', 'Warning:')
|
|
35
|
+
worksheet.write('B3', 'Warning turned off:')
|
|
36
|
+
worksheet.write('B5', 'Warning:')
|
|
37
|
+
worksheet.write('B6', 'Warning turned off:')
|
|
38
|
+
|
|
39
|
+
workbook.close
|
data/ignore_errors.xlsx
ADDED
|
Binary file
|
|
@@ -87,8 +87,8 @@ module Writexlsx
|
|
|
87
87
|
|
|
88
88
|
def num_fmt_attributes
|
|
89
89
|
[
|
|
90
|
-
|
|
91
|
-
|
|
90
|
+
['formatCode', @num_format],
|
|
91
|
+
['sourceLinked', source_linked]
|
|
92
92
|
]
|
|
93
93
|
end
|
|
94
94
|
|
|
@@ -175,7 +175,7 @@ module Writexlsx
|
|
|
175
175
|
if @position_axis == 'on_tick'
|
|
176
176
|
@position_axis = 'midCat'
|
|
177
177
|
elsif @position_axis == 'between'
|
|
178
|
-
|
|
178
|
+
# Doesn't neet to be modified.
|
|
179
179
|
else
|
|
180
180
|
# Otherwise use the default value.
|
|
181
181
|
@position_axis = nil
|
|
@@ -17,21 +17,6 @@ require 'write_xlsx/utility'
|
|
|
17
17
|
|
|
18
18
|
module Writexlsx
|
|
19
19
|
class Chart
|
|
20
|
-
# The Scatter chart module also supports the following sub-types:
|
|
21
|
-
#
|
|
22
|
-
# markers_only (the default)
|
|
23
|
-
# straight_with_markers
|
|
24
|
-
# straight
|
|
25
|
-
# smooth_with_markers
|
|
26
|
-
# smooth
|
|
27
|
-
# These can be specified at creation time via the add_chart() Worksheet
|
|
28
|
-
# method:
|
|
29
|
-
#
|
|
30
|
-
# chart = workbook.add_chart(
|
|
31
|
-
# :type => 'scatter',
|
|
32
|
-
# :subtype => 'straight_with_markers'
|
|
33
|
-
# )
|
|
34
|
-
#
|
|
35
20
|
class Scatter < self
|
|
36
21
|
include Writexlsx::Utility
|
|
37
22
|
include Writexlsx::WriteDPtPoint
|
|
@@ -192,7 +192,7 @@ module Writexlsx
|
|
|
192
192
|
@values = aref_to_formula(params[:values])
|
|
193
193
|
@categories = aref_to_formula(params[:categories])
|
|
194
194
|
@name, @name_formula =
|
|
195
|
-
|
|
195
|
+
chart.process_names(params[:name], params[:name_formula])
|
|
196
196
|
|
|
197
197
|
set_data_ids(params)
|
|
198
198
|
|
data/lib/write_xlsx/chart.rb
CHANGED
|
@@ -165,16 +165,16 @@ module Writexlsx
|
|
|
165
165
|
include Writexlsx::Utility
|
|
166
166
|
include Writexlsx::Gradient
|
|
167
167
|
|
|
168
|
-
attr_accessor :id, :name
|
|
169
|
-
attr_writer :index, :palette, :protection
|
|
170
|
-
attr_reader :embedded, :formula_ids, :formula_data
|
|
171
|
-
attr_reader :x_scale, :y_scale, :x_offset, :y_offset
|
|
172
|
-
attr_reader :width, :height
|
|
168
|
+
attr_accessor :id, :name # :nodoc:
|
|
169
|
+
attr_writer :index, :palette, :protection # :nodoc:
|
|
170
|
+
attr_reader :embedded, :formula_ids, :formula_data # :nodoc:
|
|
171
|
+
attr_reader :x_scale, :y_scale, :x_offset, :y_offset # :nodoc:
|
|
172
|
+
attr_reader :width, :height # :nodoc:
|
|
173
173
|
attr_reader :label_positions, :label_position_default, :combined # :nodoc:
|
|
174
|
-
attr_writer :date_category, :already_inserted
|
|
175
|
-
attr_writer :series_index
|
|
176
|
-
attr_writer :writer
|
|
177
|
-
attr_reader :x2_axis, :y2_axis, :axis2_ids
|
|
174
|
+
attr_writer :date_category, :already_inserted # :nodoc:
|
|
175
|
+
attr_writer :series_index # :nodoc:
|
|
176
|
+
attr_writer :writer # :nodoc:
|
|
177
|
+
attr_reader :x2_axis, :y2_axis, :axis2_ids # :nodoc:
|
|
178
178
|
|
|
179
179
|
#
|
|
180
180
|
# Factory method for returning chart objects based on their class type.
|
|
@@ -1057,7 +1057,7 @@ module Writexlsx
|
|
|
1057
1057
|
end
|
|
1058
1058
|
|
|
1059
1059
|
def write_val_base(formula, data_id, tag) # :nodoc:
|
|
1060
|
-
data
|
|
1060
|
+
data = @formula_data[data_id]
|
|
1061
1061
|
|
|
1062
1062
|
@writer.tag_elements(tag) do
|
|
1063
1063
|
# Unlike Cat axes data should only be numeric.
|
|
@@ -1397,7 +1397,7 @@ module Writexlsx
|
|
|
1397
1397
|
|
|
1398
1398
|
def write_crossing(crossing)
|
|
1399
1399
|
# Note, the category crossing comes from the value axis.
|
|
1400
|
-
if
|
|
1400
|
+
if [nil, 'max', 'min'].include?(crossing)
|
|
1401
1401
|
# Write the c:crosses element.
|
|
1402
1402
|
write_crosses(crossing)
|
|
1403
1403
|
else
|
|
@@ -1408,11 +1408,11 @@ module Writexlsx
|
|
|
1408
1408
|
|
|
1409
1409
|
def write_scaling_with_param(param)
|
|
1410
1410
|
write_scaling(
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1411
|
+
param.reverse,
|
|
1412
|
+
param.min,
|
|
1413
|
+
param.max,
|
|
1414
|
+
param.log_base
|
|
1415
|
+
)
|
|
1416
1416
|
end
|
|
1417
1417
|
#
|
|
1418
1418
|
# Write the <c:scaling> element.
|
|
@@ -1443,7 +1443,7 @@ module Writexlsx
|
|
|
1443
1443
|
# Write the <c:orientation> element.
|
|
1444
1444
|
#
|
|
1445
1445
|
def write_orientation(reverse = nil) # :nodoc:
|
|
1446
|
-
val
|
|
1446
|
+
val = ptrue?(reverse) ? 'maxMin' : 'minMax'
|
|
1447
1447
|
|
|
1448
1448
|
@writer.empty_tag('c:orientation', [ ['val', val] ])
|
|
1449
1449
|
end
|
|
@@ -1499,9 +1499,9 @@ module Writexlsx
|
|
|
1499
1499
|
source_linked = 0
|
|
1500
1500
|
|
|
1501
1501
|
attributes = [
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1502
|
+
['formatCode', format_code],
|
|
1503
|
+
['sourceLinked', source_linked]
|
|
1504
|
+
]
|
|
1505
1505
|
|
|
1506
1506
|
@writer.empty_tag('c:numFmt', attributes)
|
|
1507
1507
|
end
|
|
@@ -1778,13 +1778,13 @@ module Writexlsx
|
|
|
1778
1778
|
footer = 0.3
|
|
1779
1779
|
|
|
1780
1780
|
attributes = [
|
|
1781
|
-
|
|
1782
|
-
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
|
|
1781
|
+
['b', b],
|
|
1782
|
+
['l', l],
|
|
1783
|
+
['r', r],
|
|
1784
|
+
['t', t],
|
|
1785
|
+
['header', header],
|
|
1786
|
+
['footer', footer]
|
|
1787
|
+
]
|
|
1788
1788
|
|
|
1789
1789
|
@writer.empty_tag('c:pageMargins', attributes)
|
|
1790
1790
|
end
|
|
@@ -2272,7 +2272,7 @@ module Writexlsx
|
|
|
2272
2272
|
data.each_with_index do |token, i|
|
|
2273
2273
|
# Write non-numeric data as 0.
|
|
2274
2274
|
if token &&
|
|
2275
|
-
|
|
2275
|
+
!(token.to_s =~ /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/)
|
|
2276
2276
|
token = 0
|
|
2277
2277
|
end
|
|
2278
2278
|
|
|
@@ -2418,12 +2418,14 @@ module Writexlsx
|
|
|
2418
2418
|
elsif label[:formula]
|
|
2419
2419
|
write_custom_label_formula(label)
|
|
2420
2420
|
|
|
2421
|
+
write_d_lbl_pos(parent[:position]) if parent[:position]
|
|
2421
2422
|
write_show_val if parent[:value]
|
|
2422
2423
|
write_show_cat_name if parent[:category]
|
|
2423
2424
|
write_show_ser_name if parent[:series_name]
|
|
2424
2425
|
elsif label[:value]
|
|
2425
2426
|
write_custom_label_str(label)
|
|
2426
2427
|
|
|
2428
|
+
write_d_lbl_pos(parent[:position]) if parent[:position]
|
|
2427
2429
|
write_show_val if parent[:value]
|
|
2428
2430
|
write_show_cat_name if parent[:category]
|
|
2429
2431
|
write_show_ser_name if parent[:series_name]
|
|
@@ -2701,7 +2703,7 @@ module Writexlsx
|
|
|
2701
2703
|
end
|
|
2702
2704
|
|
|
2703
2705
|
def write_num_ref_or_lit(values, data)
|
|
2704
|
-
if values.to_s =~ /^=/
|
|
2706
|
+
if values.to_s =~ /^=/ # '=Sheet1!$A$1:$A$5'
|
|
2705
2707
|
write_num_ref(values, data, 'num')
|
|
2706
2708
|
else # [1, 2, 3]
|
|
2707
2709
|
write_num_lit(values)
|
|
@@ -2926,9 +2928,5 @@ module Writexlsx
|
|
|
2926
2928
|
@writer.empty_tag(tag)
|
|
2927
2929
|
end
|
|
2928
2930
|
end
|
|
2929
|
-
|
|
2930
|
-
def nil_or_max?(val) # :nodoc:
|
|
2931
|
-
val.nil? || val == 'max'
|
|
2932
|
-
end
|
|
2933
2931
|
end
|
|
2934
2932
|
end
|
|
@@ -204,9 +204,9 @@ module Writexlsx
|
|
|
204
204
|
mc_preserve_attributes = 'mv:*'
|
|
205
205
|
|
|
206
206
|
attributes = [
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
207
|
+
['xmlns', xmlns],
|
|
208
|
+
['xmlns:r', xmlns_r]
|
|
209
|
+
]
|
|
210
210
|
|
|
211
211
|
@writer.tag_elements('chartsheet', attributes) do
|
|
212
212
|
yield
|
data/lib/write_xlsx/drawing.rb
CHANGED
|
@@ -5,11 +5,11 @@ require 'write_xlsx/utility'
|
|
|
5
5
|
module Writexlsx
|
|
6
6
|
class Drawing
|
|
7
7
|
attr_accessor :type, :dimensions, :width, :height, :description, :shape, :anchor, :rel_index, :url_rel_index
|
|
8
|
-
attr_reader :tip
|
|
8
|
+
attr_reader :tip, :decorative
|
|
9
9
|
|
|
10
|
-
def initialize(type, dimensions, width, height, description, shape, anchor, rel_index = nil, url_rel_index = nil, tip = nil)
|
|
11
|
-
@type, @dimensions, @width, @height, @description, @shape, @anchor, @rel_index, @url_rel_index, @tip =
|
|
12
|
-
|
|
10
|
+
def initialize(type, dimensions, width, height, description, shape, anchor, rel_index = nil, url_rel_index = nil, tip = nil, decorative = nil)
|
|
11
|
+
@type, @dimensions, @width, @height, @description, @shape, @anchor, @rel_index, @url_rel_index, @tip, @decorative =
|
|
12
|
+
type, dimensions, width, height, description, shape, anchor, rel_index, url_rel_index, tip, decorative
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
15
|
|
|
@@ -70,8 +70,8 @@ module Writexlsx
|
|
|
70
70
|
def write_drawing_workspace
|
|
71
71
|
schema = 'http://schemas.openxmlformats.org/drawingml/'
|
|
72
72
|
attributes = [
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
['xmlns:xdr', "#{schema}2006/spreadsheetDrawing"],
|
|
74
|
+
['xmlns:a', "#{schema}2006/main"]
|
|
75
75
|
]
|
|
76
76
|
|
|
77
77
|
@writer.tag_elements('xdr:wsDr', attributes) { yield }
|
|
@@ -92,6 +92,7 @@ module Writexlsx
|
|
|
92
92
|
rel_index = drawing.rel_index
|
|
93
93
|
url_rel_index = drawing.url_rel_index
|
|
94
94
|
tip = drawing.tip
|
|
95
|
+
decorative = drawing.decorative
|
|
95
96
|
|
|
96
97
|
col_from, row_from, col_from_offset, row_from_offset,
|
|
97
98
|
col_to, row_to, col_to_offset, row_to_offset, col_absolute, row_absolute = drawing.dimensions
|
|
@@ -124,7 +125,7 @@ module Writexlsx
|
|
|
124
125
|
write_pic(
|
|
125
126
|
index, rel_index, col_absolute,
|
|
126
127
|
row_absolute, width, height,
|
|
127
|
-
description, url_rel_index , tip
|
|
128
|
+
description, url_rel_index , tip, decorative
|
|
128
129
|
)
|
|
129
130
|
else
|
|
130
131
|
# Write the xdr:sp element for shapes.
|
|
@@ -148,13 +149,13 @@ module Writexlsx
|
|
|
148
149
|
write_pos(0, 0)
|
|
149
150
|
|
|
150
151
|
# Write the xdr:ext element.
|
|
151
|
-
|
|
152
|
+
write_xdr_ext(9308969, 6078325)
|
|
152
153
|
else
|
|
153
154
|
# Write the xdr:pos element.
|
|
154
155
|
write_pos(0, -47625)
|
|
155
156
|
|
|
156
157
|
# Write the xdr:ext element.
|
|
157
|
-
|
|
158
|
+
write_xdr_ext(6162675, 6124575)
|
|
158
159
|
end
|
|
159
160
|
|
|
160
161
|
# Write the xdr:graphicFrame element.
|
|
@@ -165,7 +166,7 @@ module Writexlsx
|
|
|
165
166
|
end
|
|
166
167
|
end
|
|
167
168
|
|
|
168
|
-
|
|
169
|
+
#
|
|
169
170
|
# Write the <xdr:from> element.
|
|
170
171
|
#
|
|
171
172
|
def write_from(col, row, col_offset, row_offset)
|
|
@@ -242,7 +243,7 @@ module Writexlsx
|
|
|
242
243
|
#
|
|
243
244
|
# Write the <xdr:ext> element.
|
|
244
245
|
#
|
|
245
|
-
def
|
|
246
|
+
def write_xdr_ext(cx, cy)
|
|
246
247
|
attributes = [
|
|
247
248
|
['cx', cx],
|
|
248
249
|
['cy', cy]
|
|
@@ -286,19 +287,25 @@ module Writexlsx
|
|
|
286
287
|
#
|
|
287
288
|
# Write the <xdr:cNvPr> element.
|
|
288
289
|
#
|
|
289
|
-
def write_c_nv_pr(index, name, description = nil, url_rel_index = nil, tip = nil)
|
|
290
|
+
def write_c_nv_pr(index, name, description = nil, url_rel_index = nil, tip = nil, decorative = nil)
|
|
290
291
|
attributes = [
|
|
291
292
|
['id', index],
|
|
292
293
|
['name', name]
|
|
293
294
|
]
|
|
294
295
|
|
|
295
296
|
# Add description attribute for images.
|
|
296
|
-
attributes << ['descr', description] if description
|
|
297
|
+
attributes << ['descr', description] if ptrue?(description) && !ptrue?(decorative)
|
|
297
298
|
|
|
298
|
-
if ptrue?(url_rel_index)
|
|
299
|
+
if ptrue?(url_rel_index) || ptrue?(decorative)
|
|
299
300
|
@writer.tag_elements('xdr:cNvPr', attributes) do
|
|
300
|
-
|
|
301
|
-
|
|
301
|
+
if ptrue?(url_rel_index)
|
|
302
|
+
# Write the a:hlinkClick element.
|
|
303
|
+
write_a_hlink_click(url_rel_index, tip)
|
|
304
|
+
end
|
|
305
|
+
if ptrue?(decorative)
|
|
306
|
+
# Write the adec:decorative element.
|
|
307
|
+
write_decorative
|
|
308
|
+
end
|
|
302
309
|
end
|
|
303
310
|
else
|
|
304
311
|
@writer.empty_tag('xdr:cNvPr', attributes)
|
|
@@ -323,6 +330,62 @@ module Writexlsx
|
|
|
323
330
|
@writer.empty_tag('a:hlinkClick', attributes)
|
|
324
331
|
end
|
|
325
332
|
|
|
333
|
+
#
|
|
334
|
+
# Write the <adec:decorative> element.
|
|
335
|
+
#
|
|
336
|
+
def write_decorative
|
|
337
|
+
@writer.tag_elements('a:extLst') do
|
|
338
|
+
write_a_uri_ext('{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}')
|
|
339
|
+
write_a16_creation_id
|
|
340
|
+
@writer.end_tag('a:ext')
|
|
341
|
+
|
|
342
|
+
write_a_uri_ext('{C183D7F6-B498-43B3-948B-1728B52AA6E4}')
|
|
343
|
+
write_adec_decorative
|
|
344
|
+
@writer.end_tag('a:ext')
|
|
345
|
+
end
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
#
|
|
349
|
+
# Write the <a:ext> element.
|
|
350
|
+
#
|
|
351
|
+
def write_a_uri_ext(uri)
|
|
352
|
+
attributes = [
|
|
353
|
+
['uri', uri]
|
|
354
|
+
]
|
|
355
|
+
|
|
356
|
+
@writer.start_tag('a:ext', attributes)
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
#
|
|
360
|
+
# Write the <adec:decorative> element.
|
|
361
|
+
#
|
|
362
|
+
def write_adec_decorative
|
|
363
|
+
xmlns_adec = 'http://schemas.microsoft.com/office/drawing/2017/decorative'
|
|
364
|
+
val = 1
|
|
365
|
+
|
|
366
|
+
attributes = [
|
|
367
|
+
['xmlns:adec', xmlns_adec],
|
|
368
|
+
['val', val]
|
|
369
|
+
]
|
|
370
|
+
|
|
371
|
+
@writer.empty_tag('adec:decorative', attributes)
|
|
372
|
+
end
|
|
373
|
+
|
|
374
|
+
#
|
|
375
|
+
# Write the <a16:creationId> element.
|
|
376
|
+
#
|
|
377
|
+
def write_a16_creation_id
|
|
378
|
+
xmlns_a_16 = 'http://schemas.microsoft.com/office/drawing/2014/main'
|
|
379
|
+
id = '{00000000-0008-0000-0000-000002000000}'
|
|
380
|
+
|
|
381
|
+
attributes = [
|
|
382
|
+
['xmlns:a16', xmlns_a_16],
|
|
383
|
+
['id', id]
|
|
384
|
+
]
|
|
385
|
+
|
|
386
|
+
@writer.empty_tag('a16:creationId', attributes)
|
|
387
|
+
end
|
|
388
|
+
|
|
326
389
|
#
|
|
327
390
|
# Write the <xdr:cNvGraphicFramePr> element.
|
|
328
391
|
#
|
|
@@ -424,9 +487,9 @@ module Writexlsx
|
|
|
424
487
|
|
|
425
488
|
|
|
426
489
|
attributes = [
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
490
|
+
['xmlns:c', xmlns_c],
|
|
491
|
+
['xmlns:r', xmlns_r]
|
|
492
|
+
]
|
|
430
493
|
attributes << r_id_attributes(id)
|
|
431
494
|
|
|
432
495
|
@writer.empty_tag('c:chart', attributes)
|
|
@@ -456,9 +519,9 @@ module Writexlsx
|
|
|
456
519
|
else
|
|
457
520
|
# Add attribute for shapes.
|
|
458
521
|
attributes = [
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
522
|
+
[:macro, ''],
|
|
523
|
+
[:textlink, '']
|
|
524
|
+
]
|
|
462
525
|
@writer.tag_elements('xdr:sp', attributes) do
|
|
463
526
|
|
|
464
527
|
# Write the xdr:nvSpPr element.
|
|
@@ -491,17 +554,17 @@ module Writexlsx
|
|
|
491
554
|
|
|
492
555
|
if shape.start
|
|
493
556
|
attributes = [
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
557
|
+
['id', shape.start],
|
|
558
|
+
['idx', shape.start_index]
|
|
559
|
+
]
|
|
497
560
|
@writer.empty_tag('a:stCxn', attributes)
|
|
498
561
|
end
|
|
499
562
|
|
|
500
563
|
if shape.end
|
|
501
564
|
attributes = [
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
565
|
+
['id', shape.end],
|
|
566
|
+
['idx', shape.end_index]
|
|
567
|
+
]
|
|
505
568
|
@writer.empty_tag('a:endCxn', attributes)
|
|
506
569
|
end
|
|
507
570
|
end
|
|
@@ -527,10 +590,10 @@ module Writexlsx
|
|
|
527
590
|
#
|
|
528
591
|
# Write the <xdr:pic> element.
|
|
529
592
|
#
|
|
530
|
-
def write_pic(index, rel_index, col_absolute, row_absolute, width, height, description, url_rel_index, tip)
|
|
593
|
+
def write_pic(index, rel_index, col_absolute, row_absolute, width, height, description, url_rel_index, tip, decorative)
|
|
531
594
|
@writer.tag_elements('xdr:pic') do
|
|
532
595
|
# Write the xdr:nvPicPr element.
|
|
533
|
-
write_nv_pic_pr(index, rel_index, description, url_rel_index, tip)
|
|
596
|
+
write_nv_pic_pr(index, rel_index, description, url_rel_index, tip, decorative)
|
|
534
597
|
# Write the xdr:blipFill element.
|
|
535
598
|
write_blip_fill(rel_index)
|
|
536
599
|
|
|
@@ -546,12 +609,12 @@ module Writexlsx
|
|
|
546
609
|
#
|
|
547
610
|
# Write the <xdr:nvPicPr> element.
|
|
548
611
|
#
|
|
549
|
-
def write_nv_pic_pr(index, rel_index, description, url_rel_index, tip)
|
|
612
|
+
def write_nv_pic_pr(index, rel_index, description, url_rel_index, tip, decorative)
|
|
550
613
|
@writer.tag_elements('xdr:nvPicPr') do
|
|
551
614
|
# Write the xdr:cNvPr element.
|
|
552
615
|
write_c_nv_pr(
|
|
553
616
|
index + 1, "Picture #{index}", description,
|
|
554
|
-
url_rel_index, tip
|
|
617
|
+
url_rel_index, tip, decorative
|
|
555
618
|
)
|
|
556
619
|
# Write the xdr:cNvPicPr element.
|
|
557
620
|
write_c_nv_pic_pr
|
|
@@ -745,9 +808,9 @@ module Writexlsx
|
|
|
745
808
|
adj_int = (adj * 1000).to_i
|
|
746
809
|
|
|
747
810
|
attributes = [
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
811
|
+
[:name, "adj#{suffix}"],
|
|
812
|
+
[:fmla, "val #{adj_int}"]
|
|
813
|
+
]
|
|
751
814
|
@writer.empty_tag('a:gd', attributes)
|
|
752
815
|
end
|
|
753
816
|
end
|
|
@@ -804,15 +867,15 @@ module Writexlsx
|
|
|
804
867
|
#
|
|
805
868
|
def write_tx_body(shape)
|
|
806
869
|
attributes = [
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
870
|
+
[:vertOverflow, "clip"],
|
|
871
|
+
[:wrap, "square"],
|
|
872
|
+
[:lIns, "27432"],
|
|
873
|
+
[:tIns, "22860"],
|
|
874
|
+
[:rIns, "27432"],
|
|
875
|
+
[:bIns, "22860"],
|
|
876
|
+
[:anchor, shape.valign],
|
|
877
|
+
[:upright, "1"]
|
|
878
|
+
]
|
|
816
879
|
@writer.tag_elements('xdr:txBody') do
|
|
817
880
|
@writer.empty_tag('a:bodyPr', attributes)
|
|
818
881
|
@writer.empty_tag('a:lstStyle')
|
|
@@ -822,9 +885,9 @@ module Writexlsx
|
|
|
822
885
|
rotation *= 60000
|
|
823
886
|
|
|
824
887
|
attributes = [
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
888
|
+
[:algn, shape.align],
|
|
889
|
+
[:rtl, rotation]
|
|
890
|
+
]
|
|
828
891
|
@writer.tag_elements('a:pPr', attributes) do
|
|
829
892
|
attributes = [ [:sz, "1000"] ]
|
|
830
893
|
@writer.empty_tag('a:defRPr', attributes)
|
|
@@ -840,14 +903,14 @@ module Writexlsx
|
|
|
840
903
|
strike = ptrue?(shape.format[:font_strikeout]) ? 'Strike' : 'noStrike'
|
|
841
904
|
|
|
842
905
|
attributes = [
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
906
|
+
[:lang, "en-US"],
|
|
907
|
+
[:sz, size],
|
|
908
|
+
[:b, bold],
|
|
909
|
+
[:i, italic],
|
|
910
|
+
[:u, underline],
|
|
911
|
+
[:strike, strike],
|
|
912
|
+
[:baseline, 0]
|
|
913
|
+
]
|
|
851
914
|
@writer.tag_elements('a:rPr', attributes) do
|
|
852
915
|
color = shape.format[:color]
|
|
853
916
|
if color
|