write_xlsx 0.90.0 → 0.97.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
#
|