write_xlsx 0.87.0 → 0.99.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/.travis.yml +43 -0
- data/Changes +88 -0
- data/LICENSE.txt +1 -1
- data/README.md +2 -2
- 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 +125 -211
- data/lib/write_xlsx/chart/axis.rb +33 -8
- data/lib/write_xlsx/chart/caption.rb +3 -1
- data/lib/write_xlsx/chart/legend.rb +14 -0
- data/lib/write_xlsx/chart/pie.rb +11 -7
- data/lib/write_xlsx/chart/series.rb +11 -7
- data/lib/write_xlsx/chartsheet.rb +30 -2
- data/lib/write_xlsx/format.rb +19 -15
- data/lib/write_xlsx/package/comments.rb +50 -47
- data/lib/write_xlsx/package/conditional_format.rb +360 -39
- data/lib/write_xlsx/package/content_types.rb +10 -0
- data/lib/write_xlsx/package/core.rb +8 -6
- 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 +16 -4
- data/lib/write_xlsx/utility.rb +293 -35
- data/lib/write_xlsx/version.rb +1 -1
- data/lib/write_xlsx/workbook.rb +127 -7
- data/lib/write_xlsx/worksheet.rb +304 -42
- data/lib/write_xlsx/worksheet/cell_data.rb +21 -0
- data/lib/write_xlsx/worksheet/data_validation.rb +10 -14
- data/lib/write_xlsx/worksheet/hyperlink.rb +4 -8
- data/test/chart/test_write_legend_pos.rb +9 -1
- data/test/chartsheet/test_write_sheet_protection.rb +91 -0
- data/test/helper.rb +6 -1
- data/test/package/comments/test_comments_01.rb +54 -0
- data/test/package/comments/test_comments_02.rb +54 -0
- data/test/perl_output/formats.xlsx +0 -0
- data/test/regression/_test_hyperlink31.rb +26 -0
- data/test/regression/images/happy.jpg +0 -0
- data/test/regression/images/zero_dpi.jpg +0 -0
- data/test/regression/test_array_formula03.rb +36 -0
- data/test/regression/test_autofilter08.rb +110 -0
- data/test/regression/test_autofilter09.rb +110 -0
- data/test/regression/test_autofilter10.rb +110 -0
- data/test/regression/test_chart_axis41.rb +48 -0
- data/test/regression/test_chart_axis42.rb +44 -0
- data/test/regression/test_chart_axis43.rb +44 -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_format21.rb +47 -0
- data/test/regression/test_chart_format22.rb +47 -0
- data/test/regression/test_chart_format23.rb +47 -0
- data/test/regression/test_chart_format24.rb +52 -0
- data/test/regression/test_chart_format25.rb +46 -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_gridlines04.rb +4 -3
- data/test/regression/test_chart_gridlines08.rb +8 -11
- data/test/regression/test_chart_legend03.rb +41 -0
- data/test/regression/test_chart_legend04.rb +41 -0
- data/test/regression/test_chart_legend05.rb +41 -0
- data/test/regression/test_chart_legend06.rb +41 -0
- data/test/regression/test_chart_legend07.rb +38 -0
- data/test/regression/test_chart_table03.rb +56 -0
- data/test/regression/test_comment13.rb +36 -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_cond_format19.rb +64 -0
- data/test/regression/test_cond_format20.rb +43 -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_format14.rb +26 -0
- data/test/regression/test_format15.rb +26 -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 +30 -0
- data/test/regression/test_hyperlink26.rb +30 -0
- data/test/regression/test_hyperlink27.rb +27 -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_image36.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/test_table23.rb +56 -0
- data/test/regression/test_types02.rb +25 -0
- data/test/regression/test_types08.rb +31 -0
- data/test/regression/test_utf8_11.rb +23 -0
- data/test/regression/xlsx_files/array_formula03.xlsx +0 -0
- data/test/regression/xlsx_files/autofilter08.xlsx +0 -0
- data/test/regression/xlsx_files/autofilter09.xlsx +0 -0
- data/test/regression/xlsx_files/autofilter10.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis41.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis42.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis43.xlsx +0 -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_format21.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format22.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format23.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format24.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format25.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_legend03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_legend04.xlsx +0 -0
- data/test/regression/xlsx_files/chart_legend05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_legend06.xlsx +0 -0
- data/test/regression/xlsx_files/chart_legend07.xlsx +0 -0
- data/test/regression/xlsx_files/chart_table03.xlsx +0 -0
- data/test/regression/xlsx_files/comment13.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/cond_format19.xlsx +0 -0
- data/test/regression/xlsx_files/cond_format20.xlsx +0 -0
- data/test/regression/xlsx_files/date_1904_01.xlsx +0 -0
- data/test/regression/xlsx_files/format14.xlsx +0 -0
- data/test/regression/xlsx_files/format15.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink25.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink26.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink27.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/image36.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/regression/xlsx_files/table23.xlsx +0 -0
- data/test/regression/xlsx_files/types02.xlsx +0 -0
- data/test/regression/xlsx_files/types08.xlsx +0 -0
- data/test/regression/xlsx_files/utf8_11.xlsx +0 -0
- data/test/workbook/test_worksheet_by_name.rb +35 -0
- data/test/workbook/test_write_workbook_view.rb +117 -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 +44 -0
- data/test/worksheet/test_write_hyperlink.rb +0 -7
- data/test/worksheet/test_write_sheet_view.rb +19 -1
- metadata +267 -5
- data/test/package/comments/test_write_text_t.rb +0 -44
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a8880984e96fe4a8788fe6642220163ff36932dea018a335d00165a7b2d2ae04
|
|
4
|
+
data.tar.gz: 99153b43aba51974cca58ed8c38d6308814820846b4617444fcd302752843bc5
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1b5c868f6e42846e925282b0eed02064b4541e852e72012e083009dbaa44e6bc419f1ad5b630cfe3ca149b12832732b972f340e6038502e1c8acbce9358702d2
|
|
7
|
+
data.tar.gz: 8bc6c84b0bb6c5901516441c7a5b1e45044ba5c26d30c92ac773f0de521e8e78785cd8aa4759a0d0db96d629aedd4aaf2a7453cb1f075b36dd1e61fc34cb217d
|
data/.travis.yml
CHANGED
|
@@ -1,7 +1,50 @@
|
|
|
1
1
|
language: ruby
|
|
2
2
|
rvm:
|
|
3
|
+
- 3.0.0
|
|
4
|
+
- 2.7.2
|
|
5
|
+
- 2.7.1
|
|
6
|
+
- 2.7.0
|
|
7
|
+
- 2.6.6
|
|
8
|
+
- 2.6.5
|
|
9
|
+
- 2.6.4
|
|
10
|
+
- 2.6.3
|
|
11
|
+
- 2.6.2
|
|
12
|
+
- 2.6.1
|
|
13
|
+
- 2.6.0
|
|
14
|
+
- 2.5.8
|
|
15
|
+
- 2.5.7
|
|
16
|
+
- 2.5.6
|
|
17
|
+
- 2.5.5
|
|
18
|
+
- 2.5.4
|
|
19
|
+
- 2.5.3
|
|
20
|
+
- 2.5.2
|
|
21
|
+
- 2.5.1
|
|
22
|
+
- 2.5.0
|
|
23
|
+
- 2.4.10
|
|
24
|
+
- 2.4.9
|
|
25
|
+
- 2.4.8
|
|
26
|
+
- 2.4.7
|
|
27
|
+
- 2.4.6
|
|
28
|
+
- 2.4.5
|
|
29
|
+
- 2.4.4
|
|
30
|
+
- 2.4.3
|
|
31
|
+
- 2.4.2
|
|
32
|
+
- 2.4.1
|
|
33
|
+
- 2.4.0
|
|
34
|
+
- 2.3.8
|
|
35
|
+
- 2.3.7
|
|
36
|
+
- 2.3.6
|
|
37
|
+
- 2.3.5
|
|
38
|
+
- 2.3.4
|
|
39
|
+
- 2.3.3
|
|
40
|
+
- 2.3.2
|
|
3
41
|
- 2.3.1
|
|
4
42
|
- 2.3.0
|
|
43
|
+
- 2.2.10
|
|
44
|
+
- 2.2.9
|
|
45
|
+
- 2.2.8
|
|
46
|
+
- 2.2.7
|
|
47
|
+
- 2.2.6
|
|
5
48
|
- 2.2.5
|
|
6
49
|
- 2.2.4
|
|
7
50
|
- 2.2.3
|
data/Changes
CHANGED
|
@@ -1,5 +1,93 @@
|
|
|
1
1
|
Change history of write_xlsx rubygem.
|
|
2
2
|
|
|
3
|
+
2021-01-08 v0.99.0
|
|
4
|
+
|
|
5
|
+
Added font and font_size parameters to write_comment().
|
|
6
|
+
|
|
7
|
+
Allow formulas in date field of data_validation().
|
|
8
|
+
|
|
9
|
+
Added top_left chart legend position.
|
|
10
|
+
|
|
11
|
+
Added legend formatting options.
|
|
12
|
+
|
|
13
|
+
Added set_tab_ratio() method to set the ratio between the worksheet tabs
|
|
14
|
+
and the horizontal slider.
|
|
15
|
+
|
|
16
|
+
Added worksheet hide_row_col_headers() method to turn off worksheet row
|
|
17
|
+
and column headings.
|
|
18
|
+
|
|
19
|
+
Add functionality to align chart category axis labels.
|
|
20
|
+
|
|
21
|
+
Fix for issue with special characters in worksheet table functions.
|
|
22
|
+
|
|
23
|
+
Fix handling of 'num_format': '0' in duplicate formats.
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
2021-01-03 v0.98.0
|
|
27
|
+
|
|
28
|
+
fixed for autofilter rule with blanks plus another filter.
|
|
29
|
+
|
|
30
|
+
2021-01-02 v0.97.0
|
|
31
|
+
|
|
32
|
+
Added Excel 2010 data bar features such as solid fills and control over
|
|
33
|
+
the display of negative values.
|
|
34
|
+
|
|
35
|
+
Added default formatting for hyperlinks if none is specified. The format
|
|
36
|
+
is the Excel hyperlink style so links change colour after they are
|
|
37
|
+
clicked.
|
|
38
|
+
|
|
39
|
+
Fixed missing plotarea formatting in pie/doughnut charts.
|
|
40
|
+
|
|
41
|
+
2020-12-31 v0.96.0
|
|
42
|
+
|
|
43
|
+
Added icon sets to conditional formatting.
|
|
44
|
+
|
|
45
|
+
2020-12-30 v0.95.0
|
|
46
|
+
|
|
47
|
+
Added workbook set_size() method.
|
|
48
|
+
|
|
49
|
+
2020-12-30 v0.94.0
|
|
50
|
+
|
|
51
|
+
Added font support to chart tables.
|
|
52
|
+
|
|
53
|
+
2020-12-30 v0.93.0
|
|
54
|
+
|
|
55
|
+
Added trendline properties: intercept, display_equation and
|
|
56
|
+
display_r_squared.
|
|
57
|
+
|
|
58
|
+
2020-12-30 v0.92.0
|
|
59
|
+
|
|
60
|
+
Fix for insert_image issue when handling images with zero dpi.
|
|
61
|
+
|
|
62
|
+
2020-12-30 v0.91.0
|
|
63
|
+
|
|
64
|
+
Add set_custom_property() workbook method to set custom document
|
|
65
|
+
properties.
|
|
66
|
+
|
|
67
|
+
2020-12-28 v0.90.0
|
|
68
|
+
|
|
69
|
+
Added worksheet_by_name() workbook method to retrieve a worksheet
|
|
70
|
+
in a workbook by name.
|
|
71
|
+
|
|
72
|
+
Fixed issue where internal file creation and modification dates where
|
|
73
|
+
in the local timezone instead of UTC.
|
|
74
|
+
|
|
75
|
+
Fixed issue with "external:" urls with space in sheetname.
|
|
76
|
+
|
|
77
|
+
Fixed issue where Unicode full-width number strings were treated as
|
|
78
|
+
numbers in write().
|
|
79
|
+
|
|
80
|
+
2020-12-27 v0.89.0
|
|
81
|
+
|
|
82
|
+
Added write_boolean() worksheet method to write Excel boolean values.
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
2020-12-26 v0.88.0
|
|
86
|
+
|
|
87
|
+
Added transparency option to solid fills in chart areas.
|
|
88
|
+
|
|
89
|
+
Added options to configure chart axis tick placement.
|
|
90
|
+
|
|
3
91
|
2020-12-26 v0.87.0
|
|
4
92
|
|
|
5
93
|
Added chart pattern and gradient fills.
|
data/LICENSE.txt
CHANGED
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.99](https://github.com/jmcnamara/excel-writer-xlsx) .
|
|
9
9
|
|
|
10
10
|
## Description
|
|
11
11
|
|
|
@@ -85,7 +85,7 @@ the first worksheet in an Excel XML spreadsheet called ruby.xlsx:
|
|
|
85
85
|
Original Perl module was written by John McNamara(jmcnamara@cpan.org).
|
|
86
86
|
|
|
87
87
|
Converted to ruby by Hideo NAKAMURA(nakamrua.hideo@gmail.com)
|
|
88
|
-
Copyright (c) 2012-
|
|
88
|
+
Copyright (c) 2012-2021 Hideo NAKAMURA.
|
|
89
89
|
|
|
90
90
|
See LICENSE.txt for further details.
|
|
91
91
|
|
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
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
require 'write_xlsx/package/xml_writer_simple'
|
|
3
3
|
require 'write_xlsx/gradient'
|
|
4
|
+
require 'write_xlsx/chart/legend'
|
|
4
5
|
require 'write_xlsx/utility'
|
|
5
6
|
require 'write_xlsx/chart/axis'
|
|
6
7
|
require 'write_xlsx/chart/caption'
|
|
@@ -10,7 +11,7 @@ module Writexlsx
|
|
|
10
11
|
class Table
|
|
11
12
|
include Writexlsx::Utility
|
|
12
13
|
|
|
13
|
-
attr_reader :horizontal, :vertical, :outline, :show_keys
|
|
14
|
+
attr_reader :horizontal, :vertical, :outline, :show_keys, :font
|
|
14
15
|
|
|
15
16
|
def initialize(params = {})
|
|
16
17
|
@horizontal, @vertical, @outline, @show_keys = true, true, true, false
|
|
@@ -18,14 +19,22 @@ def initialize(params = {})
|
|
|
18
19
|
@vertical = params[:vertical] if params.has_key?(:vertical)
|
|
19
20
|
@outline = params[:outline] if params.has_key?(:outline)
|
|
20
21
|
@show_keys = params[:show_keys] if params.has_key?(:show_keys)
|
|
22
|
+
@font = convert_font_args(params[:font])
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def palette=(palette)
|
|
26
|
+
@palette = palette
|
|
21
27
|
end
|
|
22
28
|
|
|
23
29
|
def write_d_table(writer)
|
|
24
|
-
writer
|
|
25
|
-
|
|
26
|
-
writer.empty_tag('c:
|
|
27
|
-
writer.empty_tag('c:
|
|
28
|
-
writer.empty_tag('c:
|
|
30
|
+
@writer = writer
|
|
31
|
+
@writer.tag_elements('c:dTable') do
|
|
32
|
+
@writer.empty_tag('c:showHorzBorder', attributes) if ptrue?(horizontal)
|
|
33
|
+
@writer.empty_tag('c:showVertBorder', attributes) if ptrue?(vertical)
|
|
34
|
+
@writer.empty_tag('c:showOutline', attributes) if ptrue?(outline)
|
|
35
|
+
@writer.empty_tag('c:showKeys', attributes) if ptrue?(show_keys)
|
|
36
|
+
# Write the table font.
|
|
37
|
+
write_tx_pr(nil, font) if ptrue?(font)
|
|
29
38
|
end
|
|
30
39
|
end
|
|
31
40
|
|
|
@@ -154,6 +163,7 @@ def numeric_or_downcase(val)
|
|
|
154
163
|
|
|
155
164
|
class Chart
|
|
156
165
|
include Writexlsx::Utility
|
|
166
|
+
include Writexlsx::Gradient
|
|
157
167
|
|
|
158
168
|
attr_accessor :id, :name # :nodoc:
|
|
159
169
|
attr_writer :index, :palette, :protection # :nodoc:
|
|
@@ -264,6 +274,10 @@ def add_series(params)
|
|
|
264
274
|
raise "Must specify ':categories' in add_series for this chart type"
|
|
265
275
|
end
|
|
266
276
|
|
|
277
|
+
if @series.size == 255
|
|
278
|
+
raise "The maximum number of series that can be added to an Excel Chart is 255."
|
|
279
|
+
end
|
|
280
|
+
|
|
267
281
|
@series << Series.new(self, params)
|
|
268
282
|
|
|
269
283
|
# Set the secondary axis properties.
|
|
@@ -340,16 +354,8 @@ def set_title(params)
|
|
|
340
354
|
# Set the properties of the chart legend.
|
|
341
355
|
#
|
|
342
356
|
def set_legend(params)
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
else
|
|
346
|
-
@legend_position = params[:position] || 'right'
|
|
347
|
-
end
|
|
348
|
-
@legend_delete_series = params[:delete_series]
|
|
349
|
-
@legend_font = convert_font_args(params[:font])
|
|
350
|
-
|
|
351
|
-
# Set the legend layout.
|
|
352
|
-
@legend_layout = layout_properties(params[:layout])
|
|
357
|
+
# Convert the user default properties to internal properties.
|
|
358
|
+
legend_properties(params)
|
|
353
359
|
end
|
|
354
360
|
|
|
355
361
|
#
|
|
@@ -417,6 +423,7 @@ def set_size(params = {})
|
|
|
417
423
|
#
|
|
418
424
|
def set_table(params = {})
|
|
419
425
|
@table = Table.new(params)
|
|
426
|
+
@table.palette = @palette
|
|
420
427
|
end
|
|
421
428
|
|
|
422
429
|
#
|
|
@@ -517,39 +524,6 @@ def write_bar_chart(params) # :nodoc:
|
|
|
517
524
|
end
|
|
518
525
|
end
|
|
519
526
|
|
|
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
527
|
#
|
|
554
528
|
# Switch name and name_formula parameters if required.
|
|
555
529
|
#
|
|
@@ -631,7 +605,7 @@ def display_setup
|
|
|
631
605
|
@y_scale = 1
|
|
632
606
|
@x_offset = 0
|
|
633
607
|
@y_offset = 0
|
|
634
|
-
@
|
|
608
|
+
@legend = Legend.new
|
|
635
609
|
@smooth_allowed = 0
|
|
636
610
|
@cross_between = 'between'
|
|
637
611
|
@date_category = false
|
|
@@ -672,20 +646,6 @@ def get_data_type(data) # :nodoc:
|
|
|
672
646
|
'num'
|
|
673
647
|
end
|
|
674
648
|
|
|
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
649
|
#
|
|
690
650
|
# Returns series which use the primary axes.
|
|
691
651
|
#
|
|
@@ -723,38 +683,6 @@ def ids
|
|
|
723
683
|
[id1, id2]
|
|
724
684
|
end
|
|
725
685
|
|
|
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
686
|
#
|
|
759
687
|
# Setup the default properties for a chart.
|
|
760
688
|
#
|
|
@@ -1285,6 +1213,9 @@ def write_cat_axis(params) # :nodoc:
|
|
|
1285
1213
|
# Write the c:majorTickMark element.
|
|
1286
1214
|
write_major_tick_mark(x_axis.major_tick_mark)
|
|
1287
1215
|
|
|
1216
|
+
# Write the c:minorTickMark element.
|
|
1217
|
+
write_minor_tick_mark(x_axis.minor_tick_mark)
|
|
1218
|
+
|
|
1288
1219
|
# Write the c:tickLblPos element.
|
|
1289
1220
|
write_tick_label_pos(x_axis.label_position)
|
|
1290
1221
|
|
|
@@ -1303,7 +1234,7 @@ def write_cat_axis(params) # :nodoc:
|
|
|
1303
1234
|
# Write the c:auto element.
|
|
1304
1235
|
write_auto(1) unless x_axis.text_axis
|
|
1305
1236
|
# Write the c:labelAlign element.
|
|
1306
|
-
write_label_align(
|
|
1237
|
+
write_label_align(x_axis.label_align)
|
|
1307
1238
|
# Write the c:labelOffset element.
|
|
1308
1239
|
write_label_offset(100)
|
|
1309
1240
|
# Write the c:tickLblSkip element.
|
|
@@ -1359,6 +1290,9 @@ def write_val_axis_base(x_axis, y_axis, axis_ids_0, axis_ids_1, position) # :no
|
|
|
1359
1290
|
# Write the c:majorTickMark element.
|
|
1360
1291
|
write_major_tick_mark(y_axis.major_tick_mark)
|
|
1361
1292
|
|
|
1293
|
+
# Write the c:minorTickMark element.
|
|
1294
|
+
write_minor_tick_mark(y_axis.minor_tick_mark)
|
|
1295
|
+
|
|
1362
1296
|
# Write the c:tickLblPos element.
|
|
1363
1297
|
write_tick_label_pos(y_axis.label_position)
|
|
1364
1298
|
|
|
@@ -1581,6 +1515,15 @@ def write_major_tick_mark(val)
|
|
|
1581
1515
|
@writer.empty_tag('c:majorTickMark', [ ['val', val] ])
|
|
1582
1516
|
end
|
|
1583
1517
|
|
|
1518
|
+
#
|
|
1519
|
+
# Write the <c:minorTickMark> element.
|
|
1520
|
+
#
|
|
1521
|
+
def write_minor_tick_mark(val)
|
|
1522
|
+
return unless ptrue?(val)
|
|
1523
|
+
|
|
1524
|
+
@writer.empty_tag('c:minorTickMark', [ ['val', val] ])
|
|
1525
|
+
end
|
|
1526
|
+
|
|
1584
1527
|
#
|
|
1585
1528
|
# Write the <c:tickLblPos> element.
|
|
1586
1529
|
#
|
|
@@ -1625,6 +1568,12 @@ def write_auto(val) # :nodoc:
|
|
|
1625
1568
|
# Write the <c:labelAlign> element.
|
|
1626
1569
|
#
|
|
1627
1570
|
def write_label_align(val) # :nodoc:
|
|
1571
|
+
val ||= 'ctr'
|
|
1572
|
+
if val == 'right'
|
|
1573
|
+
val = 'r'
|
|
1574
|
+
elsif val == 'left'
|
|
1575
|
+
val = 'l'
|
|
1576
|
+
end
|
|
1628
1577
|
@writer.empty_tag('c:lblAlgn', [ ['val', val] ])
|
|
1629
1578
|
end
|
|
1630
1579
|
|
|
@@ -1727,10 +1676,10 @@ def write_c_minor_time_unit(val) # :nodoc:
|
|
|
1727
1676
|
# Write the <c:legend> element.
|
|
1728
1677
|
#
|
|
1729
1678
|
def write_legend # :nodoc:
|
|
1730
|
-
position = @
|
|
1679
|
+
position = @legend.position.sub(/^overlay_/, '')
|
|
1731
1680
|
return if position == 'none' || (not position_allowed.has_key?(position))
|
|
1732
1681
|
|
|
1733
|
-
@delete_series = @
|
|
1682
|
+
@delete_series = @legend.delete_series if @legend.delete_series.kind_of?(Array)
|
|
1734
1683
|
@writer.tag_elements('c:legend') do
|
|
1735
1684
|
# Write the c:legendPos element.
|
|
1736
1685
|
write_legend_pos(position_allowed[position])
|
|
@@ -1738,20 +1687,23 @@ def write_legend # :nodoc:
|
|
|
1738
1687
|
# Write the c:legendEntry element.
|
|
1739
1688
|
@delete_series.each { |i| write_legend_entry(i) } if @delete_series
|
|
1740
1689
|
# Write the c:layout element.
|
|
1741
|
-
write_layout(@
|
|
1742
|
-
# Write the c:txPr element.
|
|
1743
|
-
write_tx_pr(nil, @legend_font) if ptrue?(@legend_font)
|
|
1690
|
+
write_layout(@legend.layout, 'legend')
|
|
1744
1691
|
# Write the c:overlay element.
|
|
1745
|
-
write_overlay if @
|
|
1692
|
+
write_overlay if @legend.position =~ /^overlay_/
|
|
1693
|
+
# Write the c:spPr element.
|
|
1694
|
+
write_sp_pr(@legend)
|
|
1695
|
+
# Write the c:txPr element.
|
|
1696
|
+
write_tx_pr(nil, @legend.font) if ptrue?(@legend.font)
|
|
1746
1697
|
end
|
|
1747
1698
|
end
|
|
1748
1699
|
|
|
1749
1700
|
def position_allowed
|
|
1750
1701
|
{
|
|
1751
|
-
'right'
|
|
1752
|
-
'left'
|
|
1753
|
-
'top'
|
|
1754
|
-
'bottom'
|
|
1702
|
+
'right' => 'r',
|
|
1703
|
+
'left' => 'l',
|
|
1704
|
+
'top' => 't',
|
|
1705
|
+
'bottom' => 'b',
|
|
1706
|
+
'top_right' => 'tr'
|
|
1755
1707
|
}
|
|
1756
1708
|
end
|
|
1757
1709
|
|
|
@@ -1923,26 +1875,6 @@ def write_rich(title, horiz) # :nodoc:
|
|
|
1923
1875
|
write_a_p_rich(title)
|
|
1924
1876
|
end
|
|
1925
1877
|
end
|
|
1926
|
-
|
|
1927
|
-
#
|
|
1928
|
-
# Write the <a:bodyPr> element.
|
|
1929
|
-
#
|
|
1930
|
-
def write_a_body_pr(rot, horiz = nil) # :nodoc:
|
|
1931
|
-
rot = -5400000 if !rot && ptrue?(horiz)
|
|
1932
|
-
attributes = []
|
|
1933
|
-
attributes << ['rot', rot] if rot
|
|
1934
|
-
attributes << ['vert', 'horz'] if ptrue?(horiz)
|
|
1935
|
-
|
|
1936
|
-
@writer.empty_tag('a:bodyPr', attributes)
|
|
1937
|
-
end
|
|
1938
|
-
|
|
1939
|
-
#
|
|
1940
|
-
# Write the <a:lstStyle> element.
|
|
1941
|
-
#
|
|
1942
|
-
def write_a_lst_style # :nodoc:
|
|
1943
|
-
@writer.empty_tag('a:lstStyle')
|
|
1944
|
-
end
|
|
1945
|
-
|
|
1946
1878
|
#
|
|
1947
1879
|
# Write the <a:p> element for rich string titles.
|
|
1948
1880
|
#
|
|
@@ -1955,18 +1887,6 @@ def write_a_p_rich(title) # :nodoc:
|
|
|
1955
1887
|
end
|
|
1956
1888
|
end
|
|
1957
1889
|
|
|
1958
|
-
#
|
|
1959
|
-
# Write the <a:p> element for formula titles.
|
|
1960
|
-
#
|
|
1961
|
-
def write_a_p_formula(font = nil) # :nodoc:
|
|
1962
|
-
@writer.tag_elements('a:p') do
|
|
1963
|
-
# Write the a:pPr element.
|
|
1964
|
-
write_a_p_pr_formula(font)
|
|
1965
|
-
# Write the a:endParaRPr element.
|
|
1966
|
-
write_a_end_para_rpr
|
|
1967
|
-
end
|
|
1968
|
-
end
|
|
1969
|
-
|
|
1970
1890
|
#
|
|
1971
1891
|
# Write the <a:pPr> element for rich string titles.
|
|
1972
1892
|
#
|
|
@@ -1974,30 +1894,6 @@ def write_a_p_pr_rich(font) # :nodoc:
|
|
|
1974
1894
|
@writer.tag_elements('a:pPr') { write_a_def_rpr(font) }
|
|
1975
1895
|
end
|
|
1976
1896
|
|
|
1977
|
-
#
|
|
1978
|
-
# Write the <a:pPr> element for formula titles.
|
|
1979
|
-
#
|
|
1980
|
-
def write_a_p_pr_formula(font) # :nodoc:
|
|
1981
|
-
@writer.tag_elements('a:pPr') { write_a_def_rpr(font) }
|
|
1982
|
-
end
|
|
1983
|
-
|
|
1984
|
-
#
|
|
1985
|
-
# Write the <a:defRPr> element.
|
|
1986
|
-
#
|
|
1987
|
-
def write_a_def_rpr(font = nil) # :nodoc:
|
|
1988
|
-
write_def_rpr_r_pr_common(
|
|
1989
|
-
font,
|
|
1990
|
-
get_font_style_attributes(font),
|
|
1991
|
-
'a:defRPr')
|
|
1992
|
-
end
|
|
1993
|
-
|
|
1994
|
-
#
|
|
1995
|
-
# Write the <a:endParaRPr> element.
|
|
1996
|
-
#
|
|
1997
|
-
def write_a_end_para_rpr # :nodoc:
|
|
1998
|
-
@writer.empty_tag('a:endParaRPr', [ ['lang', 'en-US'] ])
|
|
1999
|
-
end
|
|
2000
|
-
|
|
2001
1897
|
#
|
|
2002
1898
|
# Write the <a:r> element.
|
|
2003
1899
|
#
|
|
@@ -2021,24 +1917,6 @@ def write_a_r_pr(font) # :nodoc:
|
|
|
2021
1917
|
write_def_rpr_r_pr_common(font, attributes, 'a:rPr')
|
|
2022
1918
|
end
|
|
2023
1919
|
|
|
2024
|
-
def write_def_rpr_r_pr_common(font, style_attributes, tag) # :nodoc:
|
|
2025
|
-
latin_attributes = get_font_latin_attributes(font)
|
|
2026
|
-
has_color = ptrue?(font) && ptrue?(font[:_color])
|
|
2027
|
-
|
|
2028
|
-
if !latin_attributes.empty? || has_color
|
|
2029
|
-
@writer.tag_elements(tag, style_attributes) do
|
|
2030
|
-
if has_color
|
|
2031
|
-
write_a_solid_fill(:color => font[:_color])
|
|
2032
|
-
end
|
|
2033
|
-
if !latin_attributes.empty?
|
|
2034
|
-
write_a_latin(latin_attributes)
|
|
2035
|
-
end
|
|
2036
|
-
end
|
|
2037
|
-
else
|
|
2038
|
-
@writer.empty_tag(tag, style_attributes)
|
|
2039
|
-
end
|
|
2040
|
-
end
|
|
2041
|
-
|
|
2042
1920
|
#
|
|
2043
1921
|
# Write the <a:t> element.
|
|
2044
1922
|
#
|
|
@@ -2046,24 +1924,6 @@ def write_a_t(title) # :nodoc:
|
|
|
2046
1924
|
@writer.data_element('a:t', title)
|
|
2047
1925
|
end
|
|
2048
1926
|
|
|
2049
|
-
#
|
|
2050
|
-
# Write the <c:txPr> element.
|
|
2051
|
-
#
|
|
2052
|
-
def write_tx_pr(horiz, font) # :nodoc:
|
|
2053
|
-
rotation = nil
|
|
2054
|
-
if font && font[:_rotation]
|
|
2055
|
-
rotation = font[:_rotation]
|
|
2056
|
-
end
|
|
2057
|
-
@writer.tag_elements('c:txPr') do
|
|
2058
|
-
# Write the a:bodyPr element.
|
|
2059
|
-
write_a_body_pr(rotation, horiz)
|
|
2060
|
-
# Write the a:lstStyle element.
|
|
2061
|
-
write_a_lst_style
|
|
2062
|
-
# Write the a:p element.
|
|
2063
|
-
write_a_p_formula(font)
|
|
2064
|
-
end
|
|
2065
|
-
end
|
|
2066
|
-
|
|
2067
1927
|
#
|
|
2068
1928
|
# Write the <c:marker> element.
|
|
2069
1929
|
#
|
|
@@ -2185,20 +2045,12 @@ def write_a_no_fill # :nodoc:
|
|
|
2185
2045
|
end
|
|
2186
2046
|
|
|
2187
2047
|
#
|
|
2188
|
-
# Write the <a:
|
|
2048
|
+
# Write the <a:alpha> element.
|
|
2189
2049
|
#
|
|
2190
|
-
def
|
|
2191
|
-
|
|
2192
|
-
# Write the a:srgbClr element.
|
|
2193
|
-
write_a_srgb_clr(color(line[:color])) if line[:color]
|
|
2194
|
-
end
|
|
2195
|
-
end
|
|
2050
|
+
def write_a_alpha(val)
|
|
2051
|
+
val = (100 - val.to_i) * 1000
|
|
2196
2052
|
|
|
2197
|
-
|
|
2198
|
-
# Write the <a:srgbClr> element.
|
|
2199
|
-
#
|
|
2200
|
-
def write_a_srgb_clr(val) # :nodoc:
|
|
2201
|
-
@writer.empty_tag('a:srgbClr', [ ['val', val] ])
|
|
2053
|
+
@writer.empty_tag('a:alpha', [ ['val', val] ])
|
|
2202
2054
|
end
|
|
2203
2055
|
|
|
2204
2056
|
#
|
|
@@ -2229,6 +2081,20 @@ def write_trendline(trendline) # :nodoc:
|
|
|
2229
2081
|
write_forward(trendline.forward)
|
|
2230
2082
|
# Write the c:backward element.
|
|
2231
2083
|
write_backward(trendline.backward)
|
|
2084
|
+
if trendline.intercept
|
|
2085
|
+
# Write the c:intercept element.
|
|
2086
|
+
write_intercept(trendline.intercept)
|
|
2087
|
+
end
|
|
2088
|
+
if trendline.display_r_squared
|
|
2089
|
+
# Write the c:dispRSqr element.
|
|
2090
|
+
write_disp_rsqr
|
|
2091
|
+
end
|
|
2092
|
+
if trendline.display_equation
|
|
2093
|
+
# Write the c:dispEq element.
|
|
2094
|
+
write_disp_eq
|
|
2095
|
+
# Write the c:trendlineLbl element.
|
|
2096
|
+
write_trendline_lbl
|
|
2097
|
+
end
|
|
2232
2098
|
end
|
|
2233
2099
|
end
|
|
2234
2100
|
|
|
@@ -2280,6 +2146,54 @@ def write_backward(val) # :nodoc:
|
|
|
2280
2146
|
@writer.empty_tag('c:backward', [ ['val', val] ])
|
|
2281
2147
|
end
|
|
2282
2148
|
|
|
2149
|
+
#
|
|
2150
|
+
# Write the <c:intercept> element.
|
|
2151
|
+
#
|
|
2152
|
+
def write_intercept(val)
|
|
2153
|
+
@writer.empty_tag('c:intercept', [ ['val', val] ])
|
|
2154
|
+
end
|
|
2155
|
+
|
|
2156
|
+
#
|
|
2157
|
+
# Write the <c:dispEq> element.
|
|
2158
|
+
#
|
|
2159
|
+
def write_disp_eq
|
|
2160
|
+
@writer.empty_tag('c:dispEq', [ ['val', 1] ])
|
|
2161
|
+
end
|
|
2162
|
+
|
|
2163
|
+
#
|
|
2164
|
+
# Write the <c:dispRSqr> element.
|
|
2165
|
+
#
|
|
2166
|
+
def write_disp_rsqr
|
|
2167
|
+
@writer.empty_tag('c:dispRSqr', [ ['val', 1] ])
|
|
2168
|
+
end
|
|
2169
|
+
|
|
2170
|
+
#
|
|
2171
|
+
# Write the <c:trendlineLbl> element.
|
|
2172
|
+
#
|
|
2173
|
+
def write_trendline_lbl
|
|
2174
|
+
@writer.tag_elements('c:trendlineLbl') do
|
|
2175
|
+
# Write the c:layout element.
|
|
2176
|
+
write_layout
|
|
2177
|
+
# Write the c:numFmt element.
|
|
2178
|
+
write_trendline_num_fmt
|
|
2179
|
+
end
|
|
2180
|
+
end
|
|
2181
|
+
|
|
2182
|
+
#
|
|
2183
|
+
# Write the <c:numFmt> element.
|
|
2184
|
+
#
|
|
2185
|
+
def write_trendline_num_fmt
|
|
2186
|
+
format_code = 'General'
|
|
2187
|
+
source_linked = 0
|
|
2188
|
+
|
|
2189
|
+
attributes = [
|
|
2190
|
+
['formatCode', format_code],
|
|
2191
|
+
['sourceLinked', source_linked]
|
|
2192
|
+
]
|
|
2193
|
+
|
|
2194
|
+
@writer.empty_tag('c:numFmt', attributes)
|
|
2195
|
+
end
|
|
2196
|
+
|
|
2283
2197
|
#
|
|
2284
2198
|
# Write the <c:hiLowLines> element.
|
|
2285
2199
|
#
|