write_xlsx 1.04.0 → 1.08.2
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/.travis.yml +0 -1
- data/Changes +50 -0
- data/README.md +1 -1
- data/examples/chart_data_labels.rb +320 -0
- data/examples/ignore_errors.rb +39 -0
- data/ignore_errors.xlsx +0 -0
- data/lib/write_xlsx/chart/series.rb +100 -0
- data/lib/write_xlsx/chart.rb +155 -33
- data/lib/write_xlsx/drawing.rb +80 -17
- data/lib/write_xlsx/package/app.rb +3 -3
- data/lib/write_xlsx/package/conditional_format.rb +2 -8
- data/lib/write_xlsx/package/packager.rb +1 -0
- data/lib/write_xlsx/package/styles.rb +16 -3
- data/lib/write_xlsx/package/table.rb +8 -0
- data/lib/write_xlsx/utility.rb +9 -3
- data/lib/write_xlsx/version.rb +1 -1
- data/lib/write_xlsx/workbook.rb +23 -0
- data/lib/write_xlsx/worksheet/data_validation.rb +1 -6
- data/lib/write_xlsx/worksheet.rb +160 -37
- data/test/drawing/{test_write_ext.rb → test_write_xdr_ext.rb} +2 -2
- data/test/perl_output/chart_data_labels.xlsx +0 -0
- data/test/perl_output/ignore_errors.xlsx +0 -0
- data/test/regression/test_array_formula04.rb +31 -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_labels26.rb +44 -0
- data/test/regression/test_chart_data_labels27.rb +44 -0
- data/test/regression/test_chart_data_labels28.rb +52 -0
- data/test/regression/test_chart_data_labels29.rb +43 -0
- data/test/regression/test_chart_data_labels30.rb +46 -0
- data/test/regression/test_chart_data_labels31.rb +49 -0
- data/test/regression/test_chart_data_labels32.rb +54 -0
- data/test/regression/test_chart_data_labels33.rb +52 -0
- data/test/regression/test_chart_data_labels34.rb +54 -0
- data/test/regression/test_chart_data_labels35.rb +46 -0
- data/test/regression/test_chart_data_labels36.rb +54 -0
- data/test/regression/test_chart_data_labels37.rb +51 -0
- data/test/regression/test_chart_data_labels38.rb +54 -0
- data/test/regression/test_chart_data_labels39.rb +53 -0
- data/test/regression/test_chart_data_labels40.rb +53 -0
- data/test/regression/test_chart_data_labels41.rb +54 -0
- data/test/regression/test_chart_data_labels42.rb +58 -0
- data/test/regression/test_chart_data_labels43.rb +58 -0
- data/test/regression/test_chart_data_labels44.rb +56 -0
- data/test/regression/test_chart_data_labels45.rb +57 -0
- data/test/regression/test_chart_data_labels46.rb +61 -0
- data/test/regression/test_chart_data_labels47.rb +61 -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_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_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_table26.rb +38 -0
- data/test/regression/xlsx_files/array_formula04.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_labels26.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels27.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels28.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels29.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels30.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels31.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels32.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels33.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels34.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels35.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels36.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels37.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels38.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels39.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels40.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels41.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels42.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels43.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels44.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels45.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels46.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels47.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/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/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/table26.xlsx +0 -0
- data/test/test_example_match.rb +345 -1
- data/test/utility/test_range.rb +20 -0
- metadata +209 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 15cfe1d88bbb3b997322aa3d507a8e8960bacd75afd397699a34d71e84162ab8
|
|
4
|
+
data.tar.gz: 0d5500191ffb1e57645eb6162ae40cfbceddcfe6008704697645a4099da7ba1b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b5b8b723b22bab86ad2a1fe4527aa94ded8ff95661fc1b23098552774dc6f98cbaf80fdfca5be2e6422810fe9d0fc95748a329aa17770708f40e06112d507fec
|
|
7
|
+
data.tar.gz: 85f1ee5165c26ddd247b10b19de5ee6e2c07be360211c80316e9259dda928d7ff64052581bbbd8023c2965d8d2449daf1d4a7470c6a7e11d2b4f3f5b67fb4dc1
|
data/.travis.yml
CHANGED
data/Changes
CHANGED
|
@@ -1,5 +1,55 @@
|
|
|
1
1
|
Change history of write_xlsx rubygem.
|
|
2
2
|
|
|
3
|
+
2021-11-19 v1.08.0
|
|
4
|
+
|
|
5
|
+
Added ability to add accessibility options "description" and
|
|
6
|
+
"decorative" to images via insert_image().
|
|
7
|
+
|
|
8
|
+
Added the workbook read_only_recommended() method to set the Excel
|
|
9
|
+
"Read-only Recommended" option that is available when saving a file.
|
|
10
|
+
|
|
11
|
+
Added option to set a chart crossing to 'min' as well as the existing
|
|
12
|
+
'max' option. The 'min' option isn't available in the Excel interface
|
|
13
|
+
but can be enabled via VBA.
|
|
14
|
+
|
|
15
|
+
Added option to unprotect ranges in protected worksheets.
|
|
16
|
+
|
|
17
|
+
Added check, and warning, for worksheet tables with no data row. Either
|
|
18
|
+
with or without a header row.
|
|
19
|
+
|
|
20
|
+
Added ignore_errors() worksheet method to ignore Excel worksheet
|
|
21
|
+
errors/warnings in user defined ranges.
|
|
22
|
+
|
|
23
|
+
Fixed issue where pattern formats without colours where given a default
|
|
24
|
+
black fill colour.
|
|
25
|
+
|
|
26
|
+
Fix issue where custom chart data labels didn't inherit the position for
|
|
27
|
+
the data labels in the series.
|
|
28
|
+
|
|
29
|
+
Fixed issue with relative url links in images.
|
|
30
|
+
|
|
31
|
+
Fixed issue where headers/footers were restricted to 254 characters
|
|
32
|
+
instead of 255.
|
|
33
|
+
|
|
34
|
+
2021-02-17 v1.07.0
|
|
35
|
+
|
|
36
|
+
Added support for Border, Fill, Pattern and Gradient formatting to chart
|
|
37
|
+
data labels and chart custom data labels.
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
2021-02-15 v1.06.0
|
|
41
|
+
|
|
42
|
+
Fix for issue where array formulas weren't included in the output file
|
|
43
|
+
for certain ranges/conditions.
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
2021-02-15 v1.05.0
|
|
47
|
+
|
|
48
|
+
Added support for custom data labels in charts.
|
|
49
|
+
|
|
50
|
+
Remove ruby-1.9.3 travil CI check.
|
|
51
|
+
|
|
52
|
+
|
|
3
53
|
2021-02-14 v1.04.0
|
|
4
54
|
|
|
5
55
|
Added support for "stacked" and "percent_stacked" Line charts.
|
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.08](https://github.com/jmcnamara/excel-writer-xlsx/tree/CPAN_1.08)
|
|
9
9
|
|
|
10
10
|
## Description
|
|
11
11
|
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
|
|
4
|
+
#######################################################################
|
|
5
|
+
#
|
|
6
|
+
# A demo of an various Excel chart data label features that are available
|
|
7
|
+
# via an WriteXLSX chart.
|
|
8
|
+
#
|
|
9
|
+
# Copyright 2000-2020, 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('chart_data_labels.xlsx')
|
|
16
|
+
worksheet = workbook.add_worksheet
|
|
17
|
+
bold = workbook.add_format(:bold => 1)
|
|
18
|
+
|
|
19
|
+
# Add the worksheet data that the charts will refer to.
|
|
20
|
+
headings = ['Number', 'Data', 'Text']
|
|
21
|
+
data = [
|
|
22
|
+
[ 2, 3, 4, 5, 6, 7 ],
|
|
23
|
+
[20, 10, 20, 30, 40, 30 ],
|
|
24
|
+
['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
worksheet.write('A1', headings, bold)
|
|
28
|
+
worksheet.write('A2', data)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
#######################################################################
|
|
32
|
+
#
|
|
33
|
+
# Example with standard data labels.
|
|
34
|
+
#
|
|
35
|
+
|
|
36
|
+
# Create a Column chart.
|
|
37
|
+
chart1 = workbook.add_chart(:type => 'column', :embedded => 1)
|
|
38
|
+
|
|
39
|
+
# Configure the data series and add the data labels.
|
|
40
|
+
chart1.add_series(
|
|
41
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
|
42
|
+
:values => '=Sheet1!$B$2:$B$7',
|
|
43
|
+
:data_labels => { :value => 1 }
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
# Add a chart title.
|
|
47
|
+
chart1.set_title(:name => 'Chart with standard data labels')
|
|
48
|
+
|
|
49
|
+
# Turn off the chart legend.
|
|
50
|
+
chart1.set_legend(:none => 1)
|
|
51
|
+
|
|
52
|
+
# Insert the chart into the worksheet (with an offset).
|
|
53
|
+
worksheet.insert_chart('D2', chart1, { :x_offset => 25, :y_offset => 10 })
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
#######################################################################
|
|
57
|
+
#
|
|
58
|
+
# Example with value and category data labels.
|
|
59
|
+
#
|
|
60
|
+
|
|
61
|
+
# Create a Column chart.
|
|
62
|
+
chart2 = workbook.add_chart(:type => 'column', :embedded => 1)
|
|
63
|
+
|
|
64
|
+
# Configure the data series and add the data labels.
|
|
65
|
+
chart2.add_series(
|
|
66
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
|
67
|
+
:values => '=Sheet1!$B$2:$B$7',
|
|
68
|
+
:data_labels => { :value => 1, :category => 1 }
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
# Add a chart title.
|
|
72
|
+
chart2.set_title(:name => 'Category and Value data labels')
|
|
73
|
+
|
|
74
|
+
# Turn off the chart legend.
|
|
75
|
+
chart2.set_legend(:none => 1)
|
|
76
|
+
|
|
77
|
+
# Insert the chart into the worksheet (with an offset).
|
|
78
|
+
worksheet.insert_chart('D18', chart2, { :x_offset => 25, :y_offset => 10 })
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
#######################################################################
|
|
82
|
+
#
|
|
83
|
+
# Example with standard data labels with different font.
|
|
84
|
+
#
|
|
85
|
+
|
|
86
|
+
# Create a Column chart.
|
|
87
|
+
chart3 = workbook.add_chart(:type => 'column', :embedded => 1)
|
|
88
|
+
|
|
89
|
+
# Configure the data series and add the data labels.
|
|
90
|
+
chart3.add_series(
|
|
91
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
|
92
|
+
:values => '=Sheet1!$B$2:$B$7',
|
|
93
|
+
:data_labels => { :value => 1,
|
|
94
|
+
:font => {:bold => 1,
|
|
95
|
+
:color => 'red',
|
|
96
|
+
:rotation => -30}
|
|
97
|
+
}
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
# Add a chart title.
|
|
101
|
+
chart3.set_title(:name => 'Data labels with user defined font')
|
|
102
|
+
|
|
103
|
+
# Turn off the chart legend.
|
|
104
|
+
chart3.set_legend(:none => 1)
|
|
105
|
+
|
|
106
|
+
# Insert the chart into the worksheet (with an offset).
|
|
107
|
+
worksheet.insert_chart('D34', chart3, { :x_offset => 25, :y_offset => 10 })
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
#######################################################################
|
|
111
|
+
#
|
|
112
|
+
# Example with custom string data labels.
|
|
113
|
+
#
|
|
114
|
+
|
|
115
|
+
# Create a Column chart.
|
|
116
|
+
chart4 = workbook.add_chart(:type => 'column', :embedded => 1)
|
|
117
|
+
|
|
118
|
+
# Configure the data series and add the data labels.
|
|
119
|
+
chart4.add_series(
|
|
120
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
|
121
|
+
:values => '=Sheet1!$B$2:$B$7',
|
|
122
|
+
:data_labels => {
|
|
123
|
+
:value => 1,
|
|
124
|
+
:border => {:color => 'red'},
|
|
125
|
+
:fill => {:color => 'yellow'}
|
|
126
|
+
}
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
# Add a chart title.
|
|
130
|
+
chart4.set_title(:name => 'Data labels with formatting')
|
|
131
|
+
|
|
132
|
+
# Turn off the chart legend.
|
|
133
|
+
chart4.set_legend(:none => 1)
|
|
134
|
+
|
|
135
|
+
# Insert the chart into the worksheet (with an offset).
|
|
136
|
+
worksheet.insert_chart('D50', chart4, { :x_offset => 25, :y_offset => 10 })
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
#######################################################################
|
|
140
|
+
#
|
|
141
|
+
# Example with custom string data labels.
|
|
142
|
+
#
|
|
143
|
+
|
|
144
|
+
# Create a Column chart.
|
|
145
|
+
chart5 = workbook.add_chart( :type => 'column', :embedded => 1 )
|
|
146
|
+
|
|
147
|
+
# Some custom labels.
|
|
148
|
+
custom_labels = [
|
|
149
|
+
{ :value => 'Amy' },
|
|
150
|
+
{ :value => 'Bea' },
|
|
151
|
+
{ :value => 'Eva' },
|
|
152
|
+
{ :value => 'Fay' },
|
|
153
|
+
{ :value => 'Liv' },
|
|
154
|
+
{ :value => 'Una' }
|
|
155
|
+
]
|
|
156
|
+
|
|
157
|
+
# Configure the data series and add the data labels.
|
|
158
|
+
chart5.add_series(
|
|
159
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
|
160
|
+
:values => '=Sheet1!$B$2:$B$7',
|
|
161
|
+
:data_labels => { :value => 1, :custom => custom_labels }
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
# Add a chart title.
|
|
165
|
+
chart5.set_title(:name => 'Chart with custom string data labels')
|
|
166
|
+
|
|
167
|
+
# Turn off the chart legend.
|
|
168
|
+
chart5.set_legend(:none => 1)
|
|
169
|
+
|
|
170
|
+
# Insert the chart into the worksheet (with an offset).
|
|
171
|
+
worksheet.insert_chart('D66', chart5, { :x_offset => 25, :y_offset => 10 })
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
#######################################################################
|
|
175
|
+
#
|
|
176
|
+
# Example with custom data labels from cells.
|
|
177
|
+
#
|
|
178
|
+
|
|
179
|
+
# Create a Column chart.
|
|
180
|
+
chart6 = workbook.add_chart(:type => 'column', :embedded => 1)
|
|
181
|
+
|
|
182
|
+
# Some custom labels.
|
|
183
|
+
custom_labels = [
|
|
184
|
+
{ :value => '=Sheet1!$C$2' },
|
|
185
|
+
{ :value => '=Sheet1!$C$3' },
|
|
186
|
+
{ :value => '=Sheet1!$C$4' },
|
|
187
|
+
{ :value => '=Sheet1!$C$5' },
|
|
188
|
+
{ :value => '=Sheet1!$C$6' },
|
|
189
|
+
{ :value => '=Sheet1!$C$7' }
|
|
190
|
+
]
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
# Configure the data series and add the data labels.
|
|
194
|
+
chart6.add_series(
|
|
195
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
|
196
|
+
:values => '=Sheet1!$B$2:$B$7',
|
|
197
|
+
:data_labels => { :value => 1, :custom => custom_labels }
|
|
198
|
+
)
|
|
199
|
+
|
|
200
|
+
# Add a chart title.
|
|
201
|
+
chart6.set_title(:name => 'Chart with custom data labels from cells')
|
|
202
|
+
|
|
203
|
+
# Turn off the chart legend.
|
|
204
|
+
chart6.set_legend(:none => 1)
|
|
205
|
+
|
|
206
|
+
# Insert the chart into the worksheet (with an offset).
|
|
207
|
+
worksheet.insert_chart('D82', chart6, { :x_offset => 25, :y_offset => 10 })
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
#######################################################################
|
|
211
|
+
#
|
|
212
|
+
# Example with custom and default data labels.
|
|
213
|
+
#
|
|
214
|
+
|
|
215
|
+
# Create a Column chart.
|
|
216
|
+
chart7 = workbook.add_chart(:type => 'column', :embedded => 1)
|
|
217
|
+
|
|
218
|
+
# Some custom labels. The nil items will get the default value.
|
|
219
|
+
# We also set a font for the custom items as an extra example.
|
|
220
|
+
custom_labels = [
|
|
221
|
+
{ :value => '=Sheet1!$C$2', :font => { :color => 'red' } },
|
|
222
|
+
nil,
|
|
223
|
+
{ :value => '=Sheet1!$C$4', :font => { :color => 'red' } },
|
|
224
|
+
{ :value => '=Sheet1!$C$5', :font => { :color => 'red' } }
|
|
225
|
+
]
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
# Configure the data series and add the data labels.
|
|
229
|
+
chart7.add_series(
|
|
230
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
|
231
|
+
:values => '=Sheet1!$B$2:$B$7',
|
|
232
|
+
:data_labels => { :value => 1, :custom => custom_labels }
|
|
233
|
+
)
|
|
234
|
+
|
|
235
|
+
# Add a chart title.
|
|
236
|
+
chart7.set_title(:name => 'Mixed custom and default data labels')
|
|
237
|
+
|
|
238
|
+
# Turn off the chart legend.
|
|
239
|
+
chart7.set_legend(:none => 1)
|
|
240
|
+
|
|
241
|
+
# Insert the chart into the worksheet (with an offset).
|
|
242
|
+
worksheet.insert_chart('D98', chart7, { :x_offset => 25, :y_offset => 10 })
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
#######################################################################
|
|
246
|
+
#
|
|
247
|
+
# Example with deleted custom data labels.
|
|
248
|
+
#
|
|
249
|
+
|
|
250
|
+
# Create a Column chart.
|
|
251
|
+
chart8 = workbook.add_chart(:type => 'column', :embedded => 1)
|
|
252
|
+
|
|
253
|
+
# Some deleted custom labels and defaults (nil). This allows us to
|
|
254
|
+
# highlight certain values such as the minimum and maximum.
|
|
255
|
+
custom_labels = [
|
|
256
|
+
{ :delete => 1 },
|
|
257
|
+
nil,
|
|
258
|
+
{ :delete => 1 },
|
|
259
|
+
{ :delete => 1 },
|
|
260
|
+
nil,
|
|
261
|
+
{ :delete => 1 }
|
|
262
|
+
]
|
|
263
|
+
|
|
264
|
+
# Configure the data series and add the data labels.
|
|
265
|
+
chart8.add_series(
|
|
266
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
|
267
|
+
:values => '=Sheet1!$B$2:$B$7',
|
|
268
|
+
:data_labels => { :value => 1, :custom => custom_labels }
|
|
269
|
+
)
|
|
270
|
+
|
|
271
|
+
# Add a chart title.
|
|
272
|
+
chart8.set_title(:name => 'Chart with deleted data labels')
|
|
273
|
+
|
|
274
|
+
# Turn off the chart legend.
|
|
275
|
+
chart8.set_legend(:none => 1)
|
|
276
|
+
|
|
277
|
+
# Insert the chart into the worksheet (with an offset).
|
|
278
|
+
worksheet.insert_chart('D114', chart8, { :x_offset => 25, :y_offset => 10 })
|
|
279
|
+
|
|
280
|
+
#######################################################################
|
|
281
|
+
#
|
|
282
|
+
# Example with custom string data labels and formatting.
|
|
283
|
+
#
|
|
284
|
+
|
|
285
|
+
# Create a Column chart.
|
|
286
|
+
chart9 = workbook.add_chart( :type => 'column', :embedded => 1 )
|
|
287
|
+
|
|
288
|
+
# Some custom labels.
|
|
289
|
+
custom_labels = [
|
|
290
|
+
{ :value => 'Amy', :border => {:color => 'blue'} },
|
|
291
|
+
{ :value => 'Bea' },
|
|
292
|
+
{ :value => 'Eva' },
|
|
293
|
+
{ :value => 'Fay' },
|
|
294
|
+
{ :value => 'Liv' },
|
|
295
|
+
{ :value => 'Una', :fill => {:color => 'green'} }
|
|
296
|
+
]
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
# Configure the data series and add the data labels.
|
|
300
|
+
chart9.add_series(
|
|
301
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
|
302
|
+
:values => '=Sheet1!$B$2:$B$7',
|
|
303
|
+
:data_labels => {
|
|
304
|
+
:value => 1,
|
|
305
|
+
:custom => custom_labels,
|
|
306
|
+
:border => {:color => 'red'},
|
|
307
|
+
:fill => {:color => 'yellow'}
|
|
308
|
+
}
|
|
309
|
+
)
|
|
310
|
+
|
|
311
|
+
# Add a chart title.
|
|
312
|
+
chart9.set_title( :name => 'Chart with custom labels and formatting' )
|
|
313
|
+
|
|
314
|
+
# Turn off the chart legend.
|
|
315
|
+
chart9.set_legend( :none => 1 )
|
|
316
|
+
|
|
317
|
+
# Insert the chart into the worksheet (with an offset).
|
|
318
|
+
worksheet.insert_chart( 'D130', chart9, { :x_offset => 25, :y_offset => 10 } )
|
|
319
|
+
|
|
320
|
+
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
|
|
@@ -296,10 +296,110 @@ module Writexlsx
|
|
|
296
296
|
labels[:separator] = separators[separator]
|
|
297
297
|
end
|
|
298
298
|
|
|
299
|
+
|
|
300
|
+
# Set the line properties for the data labels.
|
|
301
|
+
line = line_properties( labels[:line] )
|
|
302
|
+
|
|
303
|
+
# Allow 'border' as a synonym for 'line'.
|
|
304
|
+
if labels[:border]
|
|
305
|
+
line = line_properties(labels[:border])
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
# Set the fill properties for the labels.
|
|
309
|
+
fill = fill_properties(labels[:fill])
|
|
310
|
+
|
|
311
|
+
# Set the pattern properties for the labels.
|
|
312
|
+
pattern = pattern_properties(labels[:pattern])
|
|
313
|
+
|
|
314
|
+
# Set the gradient fill properties for the labels.
|
|
315
|
+
gradient = gradient_properties(labels[:gradient])
|
|
316
|
+
|
|
317
|
+
# Pattern fill overrides solid fill.
|
|
318
|
+
if pattern
|
|
319
|
+
fill = nil
|
|
320
|
+
end
|
|
321
|
+
|
|
322
|
+
# Gradient fill overrides solid and pattern fills.
|
|
323
|
+
if gradient
|
|
324
|
+
pattern = nil
|
|
325
|
+
fill = nil
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
labels[:line] = line
|
|
329
|
+
labels[:fill] = fill
|
|
330
|
+
labels[:pattern] = pattern
|
|
331
|
+
labels[:gradient] = gradient
|
|
332
|
+
|
|
299
333
|
if labels[:font]
|
|
300
334
|
labels[:font] = convert_font_args(labels[:font])
|
|
301
335
|
end
|
|
302
336
|
|
|
337
|
+
if labels[:custom]
|
|
338
|
+
# Duplicate, and modify, the custom label properties.
|
|
339
|
+
custom = []
|
|
340
|
+
|
|
341
|
+
labels[:custom].each do |label|
|
|
342
|
+
if !label
|
|
343
|
+
custom << nil
|
|
344
|
+
next
|
|
345
|
+
end
|
|
346
|
+
|
|
347
|
+
property = label.dup
|
|
348
|
+
|
|
349
|
+
# Convert formula.
|
|
350
|
+
if property[:value] && property[:value] =~ /^=[^!]+!\$/
|
|
351
|
+
property[:formula] = property[:value]
|
|
352
|
+
end
|
|
353
|
+
|
|
354
|
+
if property[:formula]
|
|
355
|
+
property[:formula] = property[:formula].sub(/^=/, '')
|
|
356
|
+
|
|
357
|
+
data_id = @chart.data_id(property[:formula], property[:data])
|
|
358
|
+
property[:data_id] = data_id
|
|
359
|
+
end
|
|
360
|
+
|
|
361
|
+
if property[:font]
|
|
362
|
+
property[:font] = convert_font_args(property[:font])
|
|
363
|
+
end
|
|
364
|
+
|
|
365
|
+
# Allow 'border' as a synonym for 'line'.
|
|
366
|
+
if property[:border]
|
|
367
|
+
line = line_properties(property[:border])
|
|
368
|
+
else
|
|
369
|
+
# Set the line properties for the data labels.
|
|
370
|
+
line = line_properties(property[:line])
|
|
371
|
+
end
|
|
372
|
+
|
|
373
|
+
# Set the fill properties for the labels.
|
|
374
|
+
fill = fill_properties(property[:fill])
|
|
375
|
+
|
|
376
|
+
# Set the pattern properties for the labels.
|
|
377
|
+
pattern = pattern_properties(property[:pattern])
|
|
378
|
+
|
|
379
|
+
# Set the gradient fill properties for the labels.
|
|
380
|
+
gradient = gradient_properties(property[:gradient])
|
|
381
|
+
|
|
382
|
+
# Pattern fill overrides solid fill.
|
|
383
|
+
if pattern
|
|
384
|
+
fill = nil
|
|
385
|
+
end
|
|
386
|
+
|
|
387
|
+
# Gradient fill overrides solid and pattern fills.
|
|
388
|
+
if gradient
|
|
389
|
+
pattern = nil
|
|
390
|
+
fill = nil
|
|
391
|
+
end
|
|
392
|
+
|
|
393
|
+
property[:line] = line
|
|
394
|
+
property[:fill] = fill
|
|
395
|
+
property[:pattern] = pattern
|
|
396
|
+
property[:gradient] = gradient
|
|
397
|
+
|
|
398
|
+
custom << property
|
|
399
|
+
end
|
|
400
|
+
labels[:custom] = custom
|
|
401
|
+
end
|
|
402
|
+
|
|
303
403
|
labels
|
|
304
404
|
end
|
|
305
405
|
end
|