write_xlsx 0.90.0 → 0.97.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 +37 -0
- data/README.md +1 -1
- data/examples/a_simple.rb +1 -6
- data/examples/conditional_format.rb +73 -46
- data/examples/demo.rb +1 -7
- data/examples/hyperlink1.rb +4 -11
- data/lib/write_xlsx/chart.rb +81 -205
- data/lib/write_xlsx/chart/axis.rb +2 -2
- data/lib/write_xlsx/chart/caption.rb +3 -1
- data/lib/write_xlsx/chart/pie.rb +2 -0
- data/lib/write_xlsx/chart/series.rb +11 -7
- data/lib/write_xlsx/format.rb +15 -11
- data/lib/write_xlsx/package/conditional_format.rb +351 -38
- data/lib/write_xlsx/package/content_types.rb +10 -0
- data/lib/write_xlsx/package/custom.rb +125 -0
- data/lib/write_xlsx/package/packager.rb +26 -0
- data/lib/write_xlsx/package/styles.rb +53 -21
- data/lib/write_xlsx/package/table.rb +11 -4
- data/lib/write_xlsx/utility.rb +234 -34
- data/lib/write_xlsx/version.rb +1 -1
- data/lib/write_xlsx/workbook.rb +88 -1
- data/lib/write_xlsx/worksheet.rb +247 -23
- data/test/helper.rb +6 -1
- data/test/regression/_test_hyperlink31.rb +26 -0
- data/test/regression/images/zero_dpi.jpg +0 -0
- data/test/regression/test_chart_bar08.rb +3 -0
- data/test/regression/test_chart_bar11.rb +3 -0
- data/test/regression/test_chart_bar14.rb +3 -0
- data/test/regression/test_chart_chartarea05.rb +16 -17
- data/test/regression/test_chart_chartarea06.rb +49 -0
- data/test/regression/test_chart_data_labels25.rb +61 -0
- data/test/regression/test_chart_format26.rb +48 -0
- data/test/regression/test_chart_format27.rb +58 -0
- data/test/regression/test_chart_format28.rb +52 -0
- data/test/regression/test_chart_format29.rb +59 -0
- data/test/regression/test_chart_format30.rb +53 -0
- data/test/regression/test_chart_format31.rb +60 -0
- data/test/regression/test_chart_table03.rb +56 -0
- data/test/regression/test_cond_format14.rb +42 -0
- data/test/regression/test_cond_format15.rb +53 -0
- data/test/regression/test_cond_format16.rb +53 -0
- data/test/regression/test_cond_format17.rb +37 -0
- data/test/regression/test_cond_format18.rb +136 -0
- data/test/regression/test_date_1904_01.rb +1 -1
- data/test/regression/test_escapes04.rb +3 -0
- data/test/regression/test_escapes05.rb +3 -0
- data/test/regression/test_escapes07.rb +3 -0
- data/test/regression/test_escapes08.rb +3 -0
- data/test/regression/test_hyperlink01.rb +3 -0
- data/test/regression/test_hyperlink02.rb +3 -0
- data/test/regression/test_hyperlink03.rb +4 -0
- data/test/regression/test_hyperlink04.rb +3 -0
- data/test/regression/test_hyperlink05.rb +3 -0
- data/test/regression/test_hyperlink06.rb +3 -0
- data/test/regression/test_hyperlink07.rb +3 -0
- data/test/regression/test_hyperlink08.rb +3 -0
- data/test/regression/test_hyperlink09.rb +3 -0
- data/test/regression/test_hyperlink10.rb +3 -0
- data/test/regression/test_hyperlink11.rb +3 -0
- data/test/regression/test_hyperlink12.rb +3 -0
- data/test/regression/test_hyperlink13.rb +3 -0
- data/test/regression/test_hyperlink14.rb +3 -0
- data/test/regression/test_hyperlink15.rb +3 -0
- data/test/regression/test_hyperlink16.rb +3 -0
- data/test/regression/test_hyperlink17.rb +3 -0
- data/test/regression/test_hyperlink18.rb +3 -0
- data/test/regression/test_hyperlink20.rb +3 -0
- data/test/regression/test_hyperlink21.rb +3 -0
- data/test/regression/test_hyperlink22.rb +3 -0
- data/test/regression/test_hyperlink23.rb +3 -0
- data/test/regression/test_hyperlink24.rb +3 -0
- data/test/regression/test_hyperlink25.rb +3 -0
- data/test/regression/test_hyperlink26.rb +3 -0
- data/test/regression/test_hyperlink27.rb +3 -0
- data/test/regression/test_hyperlink28.rb +50 -0
- data/test/regression/test_hyperlink29.rb +27 -0
- data/test/regression/test_hyperlink30.rb +36 -0
- data/test/regression/test_image35.rb +26 -0
- data/test/regression/test_properties01.rb +1 -4
- data/test/regression/test_properties02.rb +1 -4
- data/test/regression/test_properties03.rb +26 -0
- data/test/regression/test_properties04.rb +61 -0
- data/test/regression/test_properties05.rb +30 -0
- data/test/regression/test_table03.rb +3 -0
- data/test/regression/test_table04.rb +3 -0
- data/test/regression/test_table05.rb +3 -0
- data/test/regression/test_table06.rb +3 -0
- data/test/regression/test_table20.rb +34 -0
- data/test/regression/test_table21.rb +36 -0
- data/test/regression/test_table22.rb +32 -0
- data/test/regression/xlsx_files/chart_chartarea05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_chartarea06.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels25.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format26.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format27.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format28.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format29.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format30.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format31.xlsx +0 -0
- data/test/regression/xlsx_files/chart_table03.xlsx +0 -0
- data/test/regression/xlsx_files/cond_format14.xlsx +0 -0
- data/test/regression/xlsx_files/cond_format15.xlsx +0 -0
- data/test/regression/xlsx_files/cond_format16.xlsx +0 -0
- data/test/regression/xlsx_files/cond_format17.xlsx +0 -0
- data/test/regression/xlsx_files/cond_format18.xlsx +0 -0
- data/test/regression/xlsx_files/date_1904_01.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink28.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink29.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink30.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink31.xlsx +0 -0
- data/test/regression/xlsx_files/image35.xlsx +0 -0
- data/test/regression/xlsx_files/properties03.xlsx +0 -0
- data/test/regression/xlsx_files/properties04.xlsx +0 -0
- data/test/regression/xlsx_files/properties05.xlsx +0 -0
- data/test/regression/xlsx_files/table21.xlsx +0 -0
- data/test/regression/xlsx_files/table22.xlsx +0 -0
- data/test/workbook/test_write_workbook_view.rb +81 -0
- data/test/worksheet/test_cond_format_22.rb +266 -0
- data/test/worksheet/test_cond_format_23.rb +242 -0
- data/test/worksheet/test_cond_format_24.rb +303 -0
- data/test/worksheet/test_data_bar_01.rb +53 -0
- data/test/worksheet/test_data_bar_02.rb +79 -0
- data/test/worksheet/test_data_bar_03.rb +147 -0
- data/test/worksheet/test_data_bar_04.rb +145 -0
- data/test/worksheet/test_data_bar_05.rb +147 -0
- data/test/worksheet/test_data_bar_06.rb +145 -0
- data/test/worksheet/test_data_bar_07.rb +146 -0
- data/test/worksheet/test_data_bar_08.rb +54 -0
- data/test/worksheet/test_data_bar_09.rb +80 -0
- data/test/worksheet/test_data_bar_10.rb +165 -0
- data/test/worksheet/test_data_bar_11.rb +167 -0
- data/test/worksheet/test_data_bar_12.rb +104 -0
- data/test/worksheet/test_write_data_validation_02.rb +27 -0
- metadata +135 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d1ecd38fb615885768458a04b082d759437fbaf7fb2e07900cc558d18e400e51
|
|
4
|
+
data.tar.gz: d1fa5e1696685c9bba199b4ee922c488144f5a2f852644e24fcedd38fed29035
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1162adaf9f347ef7f9e986b0596877edc9a4e059b1055e5913c576583017af41b78710c44252c2ced77b06dcdd818af269f3c98282e9bc767f211237e8313fac
|
|
7
|
+
data.tar.gz: cd4eb41156f364e4685487ae32876d8b35d7907f7f7068442fb22d2afc6a24217794bea5e571720d6db14b80b7c7368ac08502071d5290cc696cd80588901cdd
|
data/Changes
CHANGED
|
@@ -1,5 +1,42 @@
|
|
|
1
1
|
Change history of write_xlsx rubygem.
|
|
2
2
|
|
|
3
|
+
2021-01-02 v0.97.0
|
|
4
|
+
|
|
5
|
+
Added Excel 2010 data bar features such as solid fills and control over
|
|
6
|
+
the display of negative values.
|
|
7
|
+
|
|
8
|
+
Added default formatting for hyperlinks if none is specified. The format
|
|
9
|
+
is the Excel hyperlink style so links change colour after they are
|
|
10
|
+
clicked.
|
|
11
|
+
|
|
12
|
+
Fixed missing plotarea formatting in pie/doughnut charts.
|
|
13
|
+
|
|
14
|
+
2020-12-31 v0.96.0
|
|
15
|
+
|
|
16
|
+
Added icon sets to conditional formatting.
|
|
17
|
+
|
|
18
|
+
2020-12-30 v0.95.0
|
|
19
|
+
|
|
20
|
+
Added workbook set_size() method.
|
|
21
|
+
|
|
22
|
+
2020-12-30 v0.94.0
|
|
23
|
+
|
|
24
|
+
Added font support to chart tables.
|
|
25
|
+
|
|
26
|
+
2020-12-30 v0.93.0
|
|
27
|
+
|
|
28
|
+
Added trendline properties: intercept, display_equation and
|
|
29
|
+
display_r_squared.
|
|
30
|
+
|
|
31
|
+
2020-12-30 v0.92.0
|
|
32
|
+
|
|
33
|
+
Fix for insert_image issue when handling images with zero dpi.
|
|
34
|
+
|
|
35
|
+
2020-12-30 v0.91.0
|
|
36
|
+
|
|
37
|
+
Add set_custom_property() workbook method to set custom document
|
|
38
|
+
properties.
|
|
39
|
+
|
|
3
40
|
2020-12-28 v0.90.0
|
|
4
41
|
|
|
5
42
|
Added worksheet_by_name() workbook method to retrieve a worksheet
|
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-0.
|
|
8
|
+
[Excel::Writer::XLSX-0.97](https://github.com/jmcnamara/excel-writer-xlsx) .
|
|
9
9
|
|
|
10
10
|
## Description
|
|
11
11
|
|
data/examples/a_simple.rb
CHANGED
|
@@ -34,11 +34,6 @@
|
|
|
34
34
|
worksheet.write(8, 0, '=IF(A5>3,"Yes", "No")')
|
|
35
35
|
|
|
36
36
|
# Write a hyperlink
|
|
37
|
-
|
|
38
|
-
:color => 'blue',
|
|
39
|
-
:underline => 1
|
|
40
|
-
)
|
|
41
|
-
|
|
42
|
-
worksheet.write(10, 0, 'http://www.ruby-lang.org/', hyperlink_format)
|
|
37
|
+
worksheet.write(10, 0, 'http://www.ruby-lang.org/')
|
|
43
38
|
|
|
44
39
|
workbook.close
|
|
@@ -26,12 +26,6 @@
|
|
|
26
26
|
:color => '#006100'
|
|
27
27
|
)
|
|
28
28
|
|
|
29
|
-
# Blue fill with dark blue text.
|
|
30
|
-
format3 = workbook.add_format(
|
|
31
|
-
:bg_color => '#C6CEFF',
|
|
32
|
-
:color => '#0000FF'
|
|
33
|
-
)
|
|
34
|
-
|
|
35
29
|
# Some sample data to run the conditional formatting against.
|
|
36
30
|
data = [
|
|
37
31
|
[ 34, 72, 38, 30, 75, 48, 75, 66, 84, 86 ],
|
|
@@ -226,19 +220,18 @@
|
|
|
226
220
|
#
|
|
227
221
|
caption = 'Examples of color scales and data bars. Default colors.'
|
|
228
222
|
|
|
229
|
-
|
|
230
|
-
data7 = 1 .. 12
|
|
223
|
+
data = 1 .. 12
|
|
231
224
|
|
|
232
225
|
worksheet7.write('A1', caption)
|
|
233
226
|
|
|
234
227
|
worksheet7.write('B2', "2 Color Scale")
|
|
235
|
-
worksheet7.write_col('B3',
|
|
228
|
+
worksheet7.write_col('B3', data)
|
|
236
229
|
|
|
237
230
|
worksheet7.write('D2', "3 Color Scale")
|
|
238
|
-
worksheet7.write_col('D3',
|
|
231
|
+
worksheet7.write_col('D3', data)
|
|
239
232
|
|
|
240
233
|
worksheet7.write('F2', "Data Bars")
|
|
241
|
-
worksheet7.write_col('F3',
|
|
234
|
+
worksheet7.write_col('F3', data)
|
|
242
235
|
|
|
243
236
|
|
|
244
237
|
worksheet7.conditional_formatting('B3:B14',
|
|
@@ -266,16 +259,18 @@
|
|
|
266
259
|
#
|
|
267
260
|
caption = 'Examples of color scales and data bars. Modified colors.'
|
|
268
261
|
|
|
262
|
+
data = 1..12
|
|
263
|
+
|
|
269
264
|
worksheet8.write('A1', caption)
|
|
270
265
|
|
|
271
266
|
worksheet8.write('B2', "2 Color Scale")
|
|
272
|
-
worksheet8.write_col('B3',
|
|
267
|
+
worksheet8.write_col('B3', data)
|
|
273
268
|
|
|
274
269
|
worksheet8.write('D2', "3 Color Scale")
|
|
275
|
-
worksheet8.write_col('D3',
|
|
270
|
+
worksheet8.write_col('D3', data)
|
|
276
271
|
|
|
277
272
|
worksheet8.write('F2', "Data Bars")
|
|
278
|
-
worksheet8.write_col('F3',
|
|
273
|
+
worksheet8.write_col('F3', data)
|
|
279
274
|
|
|
280
275
|
|
|
281
276
|
worksheet8.conditional_formatting('B3:B14',
|
|
@@ -304,47 +299,79 @@
|
|
|
304
299
|
|
|
305
300
|
###############################################################################
|
|
306
301
|
#
|
|
307
|
-
# Example 9
|
|
302
|
+
# Example 9.
|
|
308
303
|
#
|
|
309
|
-
caption = '
|
|
310
|
-
|
|
311
|
-
|
|
304
|
+
caption = 'Examples of conditional formats with icon sets.'
|
|
305
|
+
|
|
306
|
+
data = [
|
|
307
|
+
[1, 2, 3],
|
|
308
|
+
[1, 2, 3],
|
|
309
|
+
[1, 2, 3],
|
|
310
|
+
[1, 2, 3],
|
|
311
|
+
[1, 2, 3, 4],
|
|
312
|
+
[1, 2, 3, 4, 5],
|
|
313
|
+
[1, 2, 3, 4, 5]
|
|
314
|
+
]
|
|
312
315
|
|
|
313
|
-
# Write the data.
|
|
314
316
|
worksheet9.write('A1', caption)
|
|
315
317
|
worksheet9.write_col('B3', data)
|
|
316
318
|
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
:criteria => '>=',
|
|
324
|
-
:value => 100,
|
|
325
|
-
:format => format3,
|
|
326
|
-
:stop_if_true => 1
|
|
327
|
-
}
|
|
319
|
+
worksheet9.conditional_formatting(
|
|
320
|
+
'B3:D3',
|
|
321
|
+
{
|
|
322
|
+
:type => 'icon_set',
|
|
323
|
+
:icon_style => '3_traffic_lights'
|
|
324
|
+
}
|
|
328
325
|
)
|
|
329
326
|
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
}
|
|
327
|
+
worksheet9.conditional_formatting(
|
|
328
|
+
'B4:D4',
|
|
329
|
+
{
|
|
330
|
+
:type => 'icon_set',
|
|
331
|
+
:icon_style => '3_traffic_lights',
|
|
332
|
+
:reverse_icons => 1
|
|
333
|
+
}
|
|
338
334
|
)
|
|
339
335
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
336
|
+
worksheet9.conditional_formatting(
|
|
337
|
+
'B5:D5',
|
|
338
|
+
{
|
|
339
|
+
:type => 'icon_set',
|
|
340
|
+
:icon_style => '3_traffic_lights',
|
|
341
|
+
:icons_only => 1
|
|
342
|
+
}
|
|
343
|
+
)
|
|
344
|
+
|
|
345
|
+
worksheet9.conditional_formatting(
|
|
346
|
+
'B6:D6',
|
|
347
|
+
{
|
|
348
|
+
:type => 'icon_set',
|
|
349
|
+
:icon_style => '3_arrows'
|
|
350
|
+
}
|
|
351
|
+
)
|
|
352
|
+
|
|
353
|
+
worksheet9.conditional_formatting(
|
|
354
|
+
'B7:E8',
|
|
355
|
+
{
|
|
356
|
+
:type => 'icon_set',
|
|
357
|
+
:icon_style => '4_arrows'
|
|
358
|
+
}
|
|
359
|
+
)
|
|
360
|
+
|
|
361
|
+
worksheet9.conditional_formatting(
|
|
362
|
+
'B8:F8',
|
|
363
|
+
{
|
|
364
|
+
:type => 'icon_set',
|
|
365
|
+
:icon_style => '5_arrows'
|
|
366
|
+
}
|
|
367
|
+
)
|
|
368
|
+
|
|
369
|
+
worksheet9.conditional_formatting(
|
|
370
|
+
'B9:F9',
|
|
371
|
+
{
|
|
372
|
+
:type => 'icon_set',
|
|
373
|
+
:icon_style => '5_ratings'
|
|
374
|
+
}
|
|
348
375
|
)
|
|
349
376
|
|
|
350
377
|
workbook.close
|
data/examples/demo.rb
CHANGED
|
@@ -27,11 +27,6 @@
|
|
|
27
27
|
:align => 'vcenter'
|
|
28
28
|
)
|
|
29
29
|
|
|
30
|
-
hyperlink_format = workbook.add_format(
|
|
31
|
-
:color => 'blue',
|
|
32
|
-
:underline => 1
|
|
33
|
-
)
|
|
34
|
-
|
|
35
30
|
headings = ['Features of WriteXLSX', '']
|
|
36
31
|
worksheet.write_row('A1', headings, heading)
|
|
37
32
|
|
|
@@ -81,7 +76,7 @@
|
|
|
81
76
|
# Hyperlinks
|
|
82
77
|
#
|
|
83
78
|
worksheet.write('A9', "Hyperlinks")
|
|
84
|
-
worksheet.write('B9', 'http://www.ruby-lang.org/'
|
|
79
|
+
worksheet.write('B9', 'http://www.ruby-lang.org/')
|
|
85
80
|
|
|
86
81
|
#######################################################################
|
|
87
82
|
#
|
|
@@ -99,4 +94,3 @@
|
|
|
99
94
|
worksheet.write('A19', "Multiple worksheets")
|
|
100
95
|
|
|
101
96
|
workbook.close
|
|
102
|
-
|
data/examples/hyperlink1.rb
CHANGED
|
@@ -22,13 +22,6 @@
|
|
|
22
22
|
worksheet.set_column('A:A', 30)
|
|
23
23
|
worksheet.set_selection('B1')
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
# Add the standard url link format.
|
|
27
|
-
url_format = workbook.add_format(
|
|
28
|
-
:color => 'blue',
|
|
29
|
-
:underline => 1
|
|
30
|
-
)
|
|
31
|
-
|
|
32
25
|
# Add a sample format.
|
|
33
26
|
red_format = workbook.add_format(
|
|
34
27
|
:color => 'red',
|
|
@@ -45,11 +38,11 @@
|
|
|
45
38
|
|
|
46
39
|
|
|
47
40
|
# Write some hyperlinks
|
|
48
|
-
worksheet.write('A1', 'http://www.perl.com/'
|
|
49
|
-
worksheet.write('A3', 'http://www.perl.com/',
|
|
50
|
-
worksheet.write('A5', 'http://www.perl.com/',
|
|
41
|
+
worksheet.write('A1', 'http://www.perl.com/')
|
|
42
|
+
worksheet.write('A3', 'http://www.perl.com/', nil, str)
|
|
43
|
+
worksheet.write('A5', 'http://www.perl.com/', nil, str, tip)
|
|
51
44
|
worksheet.write('A7', 'http://www.perl.com/', red_format)
|
|
52
|
-
worksheet.write('A9', 'mailto:jmcnamara@cpan.org',
|
|
45
|
+
worksheet.write('A9', 'mailto:jmcnamara@cpan.org', nil, 'Mail me')
|
|
53
46
|
|
|
54
47
|
# Write a URL that isn't a hyperlink
|
|
55
48
|
worksheet.write_string('A11', 'http://www.perl.com/')
|
data/lib/write_xlsx/chart.rb
CHANGED
|
@@ -10,7 +10,7 @@ module Writexlsx
|
|
|
10
10
|
class Table
|
|
11
11
|
include Writexlsx::Utility
|
|
12
12
|
|
|
13
|
-
attr_reader :horizontal, :vertical, :outline, :show_keys
|
|
13
|
+
attr_reader :horizontal, :vertical, :outline, :show_keys, :font
|
|
14
14
|
|
|
15
15
|
def initialize(params = {})
|
|
16
16
|
@horizontal, @vertical, @outline, @show_keys = true, true, true, false
|
|
@@ -18,14 +18,22 @@ def initialize(params = {})
|
|
|
18
18
|
@vertical = params[:vertical] if params.has_key?(:vertical)
|
|
19
19
|
@outline = params[:outline] if params.has_key?(:outline)
|
|
20
20
|
@show_keys = params[:show_keys] if params.has_key?(:show_keys)
|
|
21
|
+
@font = convert_font_args(params[:font])
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def palette=(palette)
|
|
25
|
+
@palette = palette
|
|
21
26
|
end
|
|
22
27
|
|
|
23
28
|
def write_d_table(writer)
|
|
24
|
-
writer
|
|
25
|
-
|
|
26
|
-
writer.empty_tag('c:
|
|
27
|
-
writer.empty_tag('c:
|
|
28
|
-
writer.empty_tag('c:
|
|
29
|
+
@writer = writer
|
|
30
|
+
@writer.tag_elements('c:dTable') do
|
|
31
|
+
@writer.empty_tag('c:showHorzBorder', attributes) if ptrue?(horizontal)
|
|
32
|
+
@writer.empty_tag('c:showVertBorder', attributes) if ptrue?(vertical)
|
|
33
|
+
@writer.empty_tag('c:showOutline', attributes) if ptrue?(outline)
|
|
34
|
+
@writer.empty_tag('c:showKeys', attributes) if ptrue?(show_keys)
|
|
35
|
+
# Write the table font.
|
|
36
|
+
write_tx_pr(nil, font) if ptrue?(font)
|
|
29
37
|
end
|
|
30
38
|
end
|
|
31
39
|
|
|
@@ -264,6 +272,10 @@ def add_series(params)
|
|
|
264
272
|
raise "Must specify ':categories' in add_series for this chart type"
|
|
265
273
|
end
|
|
266
274
|
|
|
275
|
+
if @series.size == 255
|
|
276
|
+
raise "The maximum number of series that can be added to an Excel Chart is 255."
|
|
277
|
+
end
|
|
278
|
+
|
|
267
279
|
@series << Series.new(self, params)
|
|
268
280
|
|
|
269
281
|
# Set the secondary axis properties.
|
|
@@ -417,6 +429,7 @@ def set_size(params = {})
|
|
|
417
429
|
#
|
|
418
430
|
def set_table(params = {})
|
|
419
431
|
@table = Table.new(params)
|
|
432
|
+
@table.palette = @palette
|
|
420
433
|
end
|
|
421
434
|
|
|
422
435
|
#
|
|
@@ -517,39 +530,6 @@ def write_bar_chart(params) # :nodoc:
|
|
|
517
530
|
end
|
|
518
531
|
end
|
|
519
532
|
|
|
520
|
-
#
|
|
521
|
-
# Convert user defined font values into private hash values.
|
|
522
|
-
#
|
|
523
|
-
def convert_font_args(params)
|
|
524
|
-
return unless params
|
|
525
|
-
font = params_to_font(params)
|
|
526
|
-
|
|
527
|
-
# Convert font size units.
|
|
528
|
-
font[:_size] *= 100 if font[:_size] && font[:_size] != 0
|
|
529
|
-
|
|
530
|
-
# Convert rotation into 60,000ths of a degree.
|
|
531
|
-
if ptrue?(font[:_rotation])
|
|
532
|
-
font[:_rotation] = 60_000 * font[:_rotation].to_i
|
|
533
|
-
end
|
|
534
|
-
|
|
535
|
-
font
|
|
536
|
-
end
|
|
537
|
-
|
|
538
|
-
def params_to_font(params)
|
|
539
|
-
{
|
|
540
|
-
:_name => params[:name],
|
|
541
|
-
:_color => params[:color],
|
|
542
|
-
:_size => params[:size],
|
|
543
|
-
:_bold => params[:bold],
|
|
544
|
-
:_italic => params[:italic],
|
|
545
|
-
:_underline => params[:underline],
|
|
546
|
-
:_pitch_family => params[:pitch_family],
|
|
547
|
-
:_charset => params[:charset],
|
|
548
|
-
:_baseline => params[:baseline] || 0,
|
|
549
|
-
:_rotation => params[:rotation]
|
|
550
|
-
}
|
|
551
|
-
end
|
|
552
|
-
|
|
553
533
|
#
|
|
554
534
|
# Switch name and name_formula parameters if required.
|
|
555
535
|
#
|
|
@@ -672,20 +652,6 @@ def get_data_type(data) # :nodoc:
|
|
|
672
652
|
'num'
|
|
673
653
|
end
|
|
674
654
|
|
|
675
|
-
#
|
|
676
|
-
# Convert the user specified colour index or string to a rgb colour.
|
|
677
|
-
#
|
|
678
|
-
def color(color_code) # :nodoc:
|
|
679
|
-
if color_code and color_code =~ /^#[0-9a-fA-F]{6}$/
|
|
680
|
-
# Convert a HTML style #RRGGBB color.
|
|
681
|
-
color_code.sub(/^#/, '').upcase
|
|
682
|
-
else
|
|
683
|
-
index = Format.color(color_code)
|
|
684
|
-
raise "Unknown color '#{color_code}' used in chart formatting." unless index
|
|
685
|
-
palette_color(index)
|
|
686
|
-
end
|
|
687
|
-
end
|
|
688
|
-
|
|
689
655
|
#
|
|
690
656
|
# Returns series which use the primary axes.
|
|
691
657
|
#
|
|
@@ -723,38 +689,6 @@ def ids
|
|
|
723
689
|
[id1, id2]
|
|
724
690
|
end
|
|
725
691
|
|
|
726
|
-
#
|
|
727
|
-
# Get the font style attributes from a font hash.
|
|
728
|
-
#
|
|
729
|
-
def get_font_style_attributes(font)
|
|
730
|
-
return [] unless font
|
|
731
|
-
|
|
732
|
-
attributes = []
|
|
733
|
-
attributes << ['sz', font[:_size]] if ptrue?(font[:_size])
|
|
734
|
-
attributes << ['b', font[:_bold]] if font[:_bold]
|
|
735
|
-
attributes << ['i', font[:_italic]] if font[:_italic]
|
|
736
|
-
attributes << ['u', 'sng'] if font[:_underline]
|
|
737
|
-
|
|
738
|
-
# Turn off baseline when testing fonts that don't have it.
|
|
739
|
-
if font[:_baseline] != -1
|
|
740
|
-
attributes << ['baseline', font[:_baseline]]
|
|
741
|
-
end
|
|
742
|
-
attributes
|
|
743
|
-
end
|
|
744
|
-
|
|
745
|
-
#
|
|
746
|
-
# Get the font latin attributes from a font hash.
|
|
747
|
-
#
|
|
748
|
-
def get_font_latin_attributes(font)
|
|
749
|
-
return [] unless font
|
|
750
|
-
|
|
751
|
-
attributes = []
|
|
752
|
-
attributes << ['typeface', font[:_name]] if ptrue?(font[:_name])
|
|
753
|
-
attributes << ['pitchFamily', font[:_pitch_family]] if font[:_pitch_family]
|
|
754
|
-
attributes << ['charset', font[:_charset]] if font[:_charset]
|
|
755
|
-
|
|
756
|
-
attributes
|
|
757
|
-
end
|
|
758
692
|
#
|
|
759
693
|
# Setup the default properties for a chart.
|
|
760
694
|
#
|
|
@@ -1938,26 +1872,6 @@ def write_rich(title, horiz) # :nodoc:
|
|
|
1938
1872
|
write_a_p_rich(title)
|
|
1939
1873
|
end
|
|
1940
1874
|
end
|
|
1941
|
-
|
|
1942
|
-
#
|
|
1943
|
-
# Write the <a:bodyPr> element.
|
|
1944
|
-
#
|
|
1945
|
-
def write_a_body_pr(rot, horiz = nil) # :nodoc:
|
|
1946
|
-
rot = -5400000 if !rot && ptrue?(horiz)
|
|
1947
|
-
attributes = []
|
|
1948
|
-
attributes << ['rot', rot] if rot
|
|
1949
|
-
attributes << ['vert', 'horz'] if ptrue?(horiz)
|
|
1950
|
-
|
|
1951
|
-
@writer.empty_tag('a:bodyPr', attributes)
|
|
1952
|
-
end
|
|
1953
|
-
|
|
1954
|
-
#
|
|
1955
|
-
# Write the <a:lstStyle> element.
|
|
1956
|
-
#
|
|
1957
|
-
def write_a_lst_style # :nodoc:
|
|
1958
|
-
@writer.empty_tag('a:lstStyle')
|
|
1959
|
-
end
|
|
1960
|
-
|
|
1961
1875
|
#
|
|
1962
1876
|
# Write the <a:p> element for rich string titles.
|
|
1963
1877
|
#
|
|
@@ -1970,18 +1884,6 @@ def write_a_p_rich(title) # :nodoc:
|
|
|
1970
1884
|
end
|
|
1971
1885
|
end
|
|
1972
1886
|
|
|
1973
|
-
#
|
|
1974
|
-
# Write the <a:p> element for formula titles.
|
|
1975
|
-
#
|
|
1976
|
-
def write_a_p_formula(font = nil) # :nodoc:
|
|
1977
|
-
@writer.tag_elements('a:p') do
|
|
1978
|
-
# Write the a:pPr element.
|
|
1979
|
-
write_a_p_pr_formula(font)
|
|
1980
|
-
# Write the a:endParaRPr element.
|
|
1981
|
-
write_a_end_para_rpr
|
|
1982
|
-
end
|
|
1983
|
-
end
|
|
1984
|
-
|
|
1985
1887
|
#
|
|
1986
1888
|
# Write the <a:pPr> element for rich string titles.
|
|
1987
1889
|
#
|
|
@@ -1989,30 +1891,6 @@ def write_a_p_pr_rich(font) # :nodoc:
|
|
|
1989
1891
|
@writer.tag_elements('a:pPr') { write_a_def_rpr(font) }
|
|
1990
1892
|
end
|
|
1991
1893
|
|
|
1992
|
-
#
|
|
1993
|
-
# Write the <a:pPr> element for formula titles.
|
|
1994
|
-
#
|
|
1995
|
-
def write_a_p_pr_formula(font) # :nodoc:
|
|
1996
|
-
@writer.tag_elements('a:pPr') { write_a_def_rpr(font) }
|
|
1997
|
-
end
|
|
1998
|
-
|
|
1999
|
-
#
|
|
2000
|
-
# Write the <a:defRPr> element.
|
|
2001
|
-
#
|
|
2002
|
-
def write_a_def_rpr(font = nil) # :nodoc:
|
|
2003
|
-
write_def_rpr_r_pr_common(
|
|
2004
|
-
font,
|
|
2005
|
-
get_font_style_attributes(font),
|
|
2006
|
-
'a:defRPr')
|
|
2007
|
-
end
|
|
2008
|
-
|
|
2009
|
-
#
|
|
2010
|
-
# Write the <a:endParaRPr> element.
|
|
2011
|
-
#
|
|
2012
|
-
def write_a_end_para_rpr # :nodoc:
|
|
2013
|
-
@writer.empty_tag('a:endParaRPr', [ ['lang', 'en-US'] ])
|
|
2014
|
-
end
|
|
2015
|
-
|
|
2016
1894
|
#
|
|
2017
1895
|
# Write the <a:r> element.
|
|
2018
1896
|
#
|
|
@@ -2036,24 +1914,6 @@ def write_a_r_pr(font) # :nodoc:
|
|
|
2036
1914
|
write_def_rpr_r_pr_common(font, attributes, 'a:rPr')
|
|
2037
1915
|
end
|
|
2038
1916
|
|
|
2039
|
-
def write_def_rpr_r_pr_common(font, style_attributes, tag) # :nodoc:
|
|
2040
|
-
latin_attributes = get_font_latin_attributes(font)
|
|
2041
|
-
has_color = ptrue?(font) && ptrue?(font[:_color])
|
|
2042
|
-
|
|
2043
|
-
if !latin_attributes.empty? || has_color
|
|
2044
|
-
@writer.tag_elements(tag, style_attributes) do
|
|
2045
|
-
if has_color
|
|
2046
|
-
write_a_solid_fill(:color => font[:_color])
|
|
2047
|
-
end
|
|
2048
|
-
if !latin_attributes.empty?
|
|
2049
|
-
write_a_latin(latin_attributes)
|
|
2050
|
-
end
|
|
2051
|
-
end
|
|
2052
|
-
else
|
|
2053
|
-
@writer.empty_tag(tag, style_attributes)
|
|
2054
|
-
end
|
|
2055
|
-
end
|
|
2056
|
-
|
|
2057
1917
|
#
|
|
2058
1918
|
# Write the <a:t> element.
|
|
2059
1919
|
#
|
|
@@ -2061,24 +1921,6 @@ def write_a_t(title) # :nodoc:
|
|
|
2061
1921
|
@writer.data_element('a:t', title)
|
|
2062
1922
|
end
|
|
2063
1923
|
|
|
2064
|
-
#
|
|
2065
|
-
# Write the <c:txPr> element.
|
|
2066
|
-
#
|
|
2067
|
-
def write_tx_pr(horiz, font) # :nodoc:
|
|
2068
|
-
rotation = nil
|
|
2069
|
-
if font && font[:_rotation]
|
|
2070
|
-
rotation = font[:_rotation]
|
|
2071
|
-
end
|
|
2072
|
-
@writer.tag_elements('c:txPr') do
|
|
2073
|
-
# Write the a:bodyPr element.
|
|
2074
|
-
write_a_body_pr(rotation, horiz)
|
|
2075
|
-
# Write the a:lstStyle element.
|
|
2076
|
-
write_a_lst_style
|
|
2077
|
-
# Write the a:p element.
|
|
2078
|
-
write_a_p_formula(font)
|
|
2079
|
-
end
|
|
2080
|
-
end
|
|
2081
|
-
|
|
2082
1924
|
#
|
|
2083
1925
|
# Write the <c:marker> element.
|
|
2084
1926
|
#
|
|
@@ -2199,34 +2041,6 @@ def write_a_no_fill # :nodoc:
|
|
|
2199
2041
|
@writer.empty_tag('a:noFill')
|
|
2200
2042
|
end
|
|
2201
2043
|
|
|
2202
|
-
#
|
|
2203
|
-
# Write the <a:solidFill> element.
|
|
2204
|
-
#
|
|
2205
|
-
def write_a_solid_fill(fill) # :nodoc:
|
|
2206
|
-
@writer.tag_elements('a:solidFill') do
|
|
2207
|
-
if fill[:color]
|
|
2208
|
-
# Write the a:srgbClr element.
|
|
2209
|
-
write_a_srgb_clr(color(fill[:color]), fill[:transparency])
|
|
2210
|
-
end
|
|
2211
|
-
end
|
|
2212
|
-
end
|
|
2213
|
-
|
|
2214
|
-
#
|
|
2215
|
-
# Write the <a:srgbClr> element.
|
|
2216
|
-
#
|
|
2217
|
-
def write_a_srgb_clr(color, transparency = nil) # :nodoc:
|
|
2218
|
-
tag = 'a:srgbClr'
|
|
2219
|
-
attributes = [ ['val', color] ]
|
|
2220
|
-
|
|
2221
|
-
if ptrue?(transparency)
|
|
2222
|
-
@writer.tag_elements(tag, attributes) do
|
|
2223
|
-
write_a_alpha(transparency)
|
|
2224
|
-
end
|
|
2225
|
-
else
|
|
2226
|
-
@writer.empty_tag(tag, attributes)
|
|
2227
|
-
end
|
|
2228
|
-
end
|
|
2229
|
-
|
|
2230
2044
|
#
|
|
2231
2045
|
# Write the <a:alpha> element.
|
|
2232
2046
|
#
|
|
@@ -2264,6 +2078,20 @@ def write_trendline(trendline) # :nodoc:
|
|
|
2264
2078
|
write_forward(trendline.forward)
|
|
2265
2079
|
# Write the c:backward element.
|
|
2266
2080
|
write_backward(trendline.backward)
|
|
2081
|
+
if trendline.intercept
|
|
2082
|
+
# Write the c:intercept element.
|
|
2083
|
+
write_intercept(trendline.intercept)
|
|
2084
|
+
end
|
|
2085
|
+
if trendline.display_r_squared
|
|
2086
|
+
# Write the c:dispRSqr element.
|
|
2087
|
+
write_disp_rsqr
|
|
2088
|
+
end
|
|
2089
|
+
if trendline.display_equation
|
|
2090
|
+
# Write the c:dispEq element.
|
|
2091
|
+
write_disp_eq
|
|
2092
|
+
# Write the c:trendlineLbl element.
|
|
2093
|
+
write_trendline_lbl
|
|
2094
|
+
end
|
|
2267
2095
|
end
|
|
2268
2096
|
end
|
|
2269
2097
|
|
|
@@ -2315,6 +2143,54 @@ def write_backward(val) # :nodoc:
|
|
|
2315
2143
|
@writer.empty_tag('c:backward', [ ['val', val] ])
|
|
2316
2144
|
end
|
|
2317
2145
|
|
|
2146
|
+
#
|
|
2147
|
+
# Write the <c:intercept> element.
|
|
2148
|
+
#
|
|
2149
|
+
def write_intercept(val)
|
|
2150
|
+
@writer.empty_tag('c:intercept', [ ['val', val] ])
|
|
2151
|
+
end
|
|
2152
|
+
|
|
2153
|
+
#
|
|
2154
|
+
# Write the <c:dispEq> element.
|
|
2155
|
+
#
|
|
2156
|
+
def write_disp_eq
|
|
2157
|
+
@writer.empty_tag('c:dispEq', [ ['val', 1] ])
|
|
2158
|
+
end
|
|
2159
|
+
|
|
2160
|
+
#
|
|
2161
|
+
# Write the <c:dispRSqr> element.
|
|
2162
|
+
#
|
|
2163
|
+
def write_disp_rsqr
|
|
2164
|
+
@writer.empty_tag('c:dispRSqr', [ ['val', 1] ])
|
|
2165
|
+
end
|
|
2166
|
+
|
|
2167
|
+
#
|
|
2168
|
+
# Write the <c:trendlineLbl> element.
|
|
2169
|
+
#
|
|
2170
|
+
def write_trendline_lbl
|
|
2171
|
+
@writer.tag_elements('c:trendlineLbl') do
|
|
2172
|
+
# Write the c:layout element.
|
|
2173
|
+
write_layout
|
|
2174
|
+
# Write the c:numFmt element.
|
|
2175
|
+
write_trendline_num_fmt
|
|
2176
|
+
end
|
|
2177
|
+
end
|
|
2178
|
+
|
|
2179
|
+
#
|
|
2180
|
+
# Write the <c:numFmt> element.
|
|
2181
|
+
#
|
|
2182
|
+
def write_trendline_num_fmt
|
|
2183
|
+
format_code = 'General'
|
|
2184
|
+
source_linked = 0
|
|
2185
|
+
|
|
2186
|
+
attributes = [
|
|
2187
|
+
['formatCode', format_code],
|
|
2188
|
+
['sourceLinked', source_linked]
|
|
2189
|
+
]
|
|
2190
|
+
|
|
2191
|
+
@writer.empty_tag('c:numFmt', attributes)
|
|
2192
|
+
end
|
|
2193
|
+
|
|
2318
2194
|
#
|
|
2319
2195
|
# Write the <c:hiLowLines> element.
|
|
2320
2196
|
#
|