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.
Files changed (213) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +43 -0
  3. data/Changes +88 -0
  4. data/LICENSE.txt +1 -1
  5. data/README.md +2 -2
  6. data/examples/a_simple.rb +1 -6
  7. data/examples/conditional_format.rb +73 -46
  8. data/examples/demo.rb +1 -7
  9. data/examples/hyperlink1.rb +4 -11
  10. data/lib/write_xlsx/chart.rb +125 -211
  11. data/lib/write_xlsx/chart/axis.rb +33 -8
  12. data/lib/write_xlsx/chart/caption.rb +3 -1
  13. data/lib/write_xlsx/chart/legend.rb +14 -0
  14. data/lib/write_xlsx/chart/pie.rb +11 -7
  15. data/lib/write_xlsx/chart/series.rb +11 -7
  16. data/lib/write_xlsx/chartsheet.rb +30 -2
  17. data/lib/write_xlsx/format.rb +19 -15
  18. data/lib/write_xlsx/package/comments.rb +50 -47
  19. data/lib/write_xlsx/package/conditional_format.rb +360 -39
  20. data/lib/write_xlsx/package/content_types.rb +10 -0
  21. data/lib/write_xlsx/package/core.rb +8 -6
  22. data/lib/write_xlsx/package/custom.rb +125 -0
  23. data/lib/write_xlsx/package/packager.rb +26 -0
  24. data/lib/write_xlsx/package/styles.rb +53 -21
  25. data/lib/write_xlsx/package/table.rb +16 -4
  26. data/lib/write_xlsx/utility.rb +293 -35
  27. data/lib/write_xlsx/version.rb +1 -1
  28. data/lib/write_xlsx/workbook.rb +127 -7
  29. data/lib/write_xlsx/worksheet.rb +304 -42
  30. data/lib/write_xlsx/worksheet/cell_data.rb +21 -0
  31. data/lib/write_xlsx/worksheet/data_validation.rb +10 -14
  32. data/lib/write_xlsx/worksheet/hyperlink.rb +4 -8
  33. data/test/chart/test_write_legend_pos.rb +9 -1
  34. data/test/chartsheet/test_write_sheet_protection.rb +91 -0
  35. data/test/helper.rb +6 -1
  36. data/test/package/comments/test_comments_01.rb +54 -0
  37. data/test/package/comments/test_comments_02.rb +54 -0
  38. data/test/perl_output/formats.xlsx +0 -0
  39. data/test/regression/_test_hyperlink31.rb +26 -0
  40. data/test/regression/images/happy.jpg +0 -0
  41. data/test/regression/images/zero_dpi.jpg +0 -0
  42. data/test/regression/test_array_formula03.rb +36 -0
  43. data/test/regression/test_autofilter08.rb +110 -0
  44. data/test/regression/test_autofilter09.rb +110 -0
  45. data/test/regression/test_autofilter10.rb +110 -0
  46. data/test/regression/test_chart_axis41.rb +48 -0
  47. data/test/regression/test_chart_axis42.rb +44 -0
  48. data/test/regression/test_chart_axis43.rb +44 -0
  49. data/test/regression/test_chart_bar08.rb +3 -0
  50. data/test/regression/test_chart_bar11.rb +3 -0
  51. data/test/regression/test_chart_bar14.rb +3 -0
  52. data/test/regression/test_chart_chartarea05.rb +16 -17
  53. data/test/regression/test_chart_chartarea06.rb +49 -0
  54. data/test/regression/test_chart_data_labels25.rb +61 -0
  55. data/test/regression/test_chart_format21.rb +47 -0
  56. data/test/regression/test_chart_format22.rb +47 -0
  57. data/test/regression/test_chart_format23.rb +47 -0
  58. data/test/regression/test_chart_format24.rb +52 -0
  59. data/test/regression/test_chart_format25.rb +46 -0
  60. data/test/regression/test_chart_format26.rb +48 -0
  61. data/test/regression/test_chart_format27.rb +58 -0
  62. data/test/regression/test_chart_format28.rb +52 -0
  63. data/test/regression/test_chart_format29.rb +59 -0
  64. data/test/regression/test_chart_format30.rb +53 -0
  65. data/test/regression/test_chart_format31.rb +60 -0
  66. data/test/regression/test_chart_gridlines04.rb +4 -3
  67. data/test/regression/test_chart_gridlines08.rb +8 -11
  68. data/test/regression/test_chart_legend03.rb +41 -0
  69. data/test/regression/test_chart_legend04.rb +41 -0
  70. data/test/regression/test_chart_legend05.rb +41 -0
  71. data/test/regression/test_chart_legend06.rb +41 -0
  72. data/test/regression/test_chart_legend07.rb +38 -0
  73. data/test/regression/test_chart_table03.rb +56 -0
  74. data/test/regression/test_comment13.rb +36 -0
  75. data/test/regression/test_cond_format14.rb +42 -0
  76. data/test/regression/test_cond_format15.rb +53 -0
  77. data/test/regression/test_cond_format16.rb +53 -0
  78. data/test/regression/test_cond_format17.rb +37 -0
  79. data/test/regression/test_cond_format18.rb +136 -0
  80. data/test/regression/test_cond_format19.rb +64 -0
  81. data/test/regression/test_cond_format20.rb +43 -0
  82. data/test/regression/test_date_1904_01.rb +1 -1
  83. data/test/regression/test_escapes04.rb +3 -0
  84. data/test/regression/test_escapes05.rb +3 -0
  85. data/test/regression/test_escapes07.rb +3 -0
  86. data/test/regression/test_escapes08.rb +3 -0
  87. data/test/regression/test_format14.rb +26 -0
  88. data/test/regression/test_format15.rb +26 -0
  89. data/test/regression/test_hyperlink01.rb +3 -0
  90. data/test/regression/test_hyperlink02.rb +3 -0
  91. data/test/regression/test_hyperlink03.rb +4 -0
  92. data/test/regression/test_hyperlink04.rb +3 -0
  93. data/test/regression/test_hyperlink05.rb +3 -0
  94. data/test/regression/test_hyperlink06.rb +3 -0
  95. data/test/regression/test_hyperlink07.rb +3 -0
  96. data/test/regression/test_hyperlink08.rb +3 -0
  97. data/test/regression/test_hyperlink09.rb +3 -0
  98. data/test/regression/test_hyperlink10.rb +3 -0
  99. data/test/regression/test_hyperlink11.rb +3 -0
  100. data/test/regression/test_hyperlink12.rb +3 -0
  101. data/test/regression/test_hyperlink13.rb +3 -0
  102. data/test/regression/test_hyperlink14.rb +3 -0
  103. data/test/regression/test_hyperlink15.rb +3 -0
  104. data/test/regression/test_hyperlink16.rb +3 -0
  105. data/test/regression/test_hyperlink17.rb +3 -0
  106. data/test/regression/test_hyperlink18.rb +3 -0
  107. data/test/regression/test_hyperlink20.rb +3 -0
  108. data/test/regression/test_hyperlink21.rb +3 -0
  109. data/test/regression/test_hyperlink22.rb +3 -0
  110. data/test/regression/test_hyperlink23.rb +3 -0
  111. data/test/regression/test_hyperlink24.rb +3 -0
  112. data/test/regression/test_hyperlink25.rb +30 -0
  113. data/test/regression/test_hyperlink26.rb +30 -0
  114. data/test/regression/test_hyperlink27.rb +27 -0
  115. data/test/regression/test_hyperlink28.rb +50 -0
  116. data/test/regression/test_hyperlink29.rb +27 -0
  117. data/test/regression/test_hyperlink30.rb +36 -0
  118. data/test/regression/test_image35.rb +26 -0
  119. data/test/regression/test_image36.rb +26 -0
  120. data/test/regression/test_properties01.rb +1 -4
  121. data/test/regression/test_properties02.rb +1 -4
  122. data/test/regression/test_properties03.rb +26 -0
  123. data/test/regression/test_properties04.rb +61 -0
  124. data/test/regression/test_properties05.rb +30 -0
  125. data/test/regression/test_table03.rb +3 -0
  126. data/test/regression/test_table04.rb +3 -0
  127. data/test/regression/test_table05.rb +3 -0
  128. data/test/regression/test_table06.rb +3 -0
  129. data/test/regression/test_table20.rb +34 -0
  130. data/test/regression/test_table21.rb +36 -0
  131. data/test/regression/test_table22.rb +32 -0
  132. data/test/regression/test_table23.rb +56 -0
  133. data/test/regression/test_types02.rb +25 -0
  134. data/test/regression/test_types08.rb +31 -0
  135. data/test/regression/test_utf8_11.rb +23 -0
  136. data/test/regression/xlsx_files/array_formula03.xlsx +0 -0
  137. data/test/regression/xlsx_files/autofilter08.xlsx +0 -0
  138. data/test/regression/xlsx_files/autofilter09.xlsx +0 -0
  139. data/test/regression/xlsx_files/autofilter10.xlsx +0 -0
  140. data/test/regression/xlsx_files/chart_axis41.xlsx +0 -0
  141. data/test/regression/xlsx_files/chart_axis42.xlsx +0 -0
  142. data/test/regression/xlsx_files/chart_axis43.xlsx +0 -0
  143. data/test/regression/xlsx_files/chart_chartarea05.xlsx +0 -0
  144. data/test/regression/xlsx_files/chart_chartarea06.xlsx +0 -0
  145. data/test/regression/xlsx_files/chart_data_labels25.xlsx +0 -0
  146. data/test/regression/xlsx_files/chart_format21.xlsx +0 -0
  147. data/test/regression/xlsx_files/chart_format22.xlsx +0 -0
  148. data/test/regression/xlsx_files/chart_format23.xlsx +0 -0
  149. data/test/regression/xlsx_files/chart_format24.xlsx +0 -0
  150. data/test/regression/xlsx_files/chart_format25.xlsx +0 -0
  151. data/test/regression/xlsx_files/chart_format26.xlsx +0 -0
  152. data/test/regression/xlsx_files/chart_format27.xlsx +0 -0
  153. data/test/regression/xlsx_files/chart_format28.xlsx +0 -0
  154. data/test/regression/xlsx_files/chart_format29.xlsx +0 -0
  155. data/test/regression/xlsx_files/chart_format30.xlsx +0 -0
  156. data/test/regression/xlsx_files/chart_format31.xlsx +0 -0
  157. data/test/regression/xlsx_files/chart_legend03.xlsx +0 -0
  158. data/test/regression/xlsx_files/chart_legend04.xlsx +0 -0
  159. data/test/regression/xlsx_files/chart_legend05.xlsx +0 -0
  160. data/test/regression/xlsx_files/chart_legend06.xlsx +0 -0
  161. data/test/regression/xlsx_files/chart_legend07.xlsx +0 -0
  162. data/test/regression/xlsx_files/chart_table03.xlsx +0 -0
  163. data/test/regression/xlsx_files/comment13.xlsx +0 -0
  164. data/test/regression/xlsx_files/cond_format14.xlsx +0 -0
  165. data/test/regression/xlsx_files/cond_format15.xlsx +0 -0
  166. data/test/regression/xlsx_files/cond_format16.xlsx +0 -0
  167. data/test/regression/xlsx_files/cond_format17.xlsx +0 -0
  168. data/test/regression/xlsx_files/cond_format18.xlsx +0 -0
  169. data/test/regression/xlsx_files/cond_format19.xlsx +0 -0
  170. data/test/regression/xlsx_files/cond_format20.xlsx +0 -0
  171. data/test/regression/xlsx_files/date_1904_01.xlsx +0 -0
  172. data/test/regression/xlsx_files/format14.xlsx +0 -0
  173. data/test/regression/xlsx_files/format15.xlsx +0 -0
  174. data/test/regression/xlsx_files/hyperlink25.xlsx +0 -0
  175. data/test/regression/xlsx_files/hyperlink26.xlsx +0 -0
  176. data/test/regression/xlsx_files/hyperlink27.xlsx +0 -0
  177. data/test/regression/xlsx_files/hyperlink28.xlsx +0 -0
  178. data/test/regression/xlsx_files/hyperlink29.xlsx +0 -0
  179. data/test/regression/xlsx_files/hyperlink30.xlsx +0 -0
  180. data/test/regression/xlsx_files/hyperlink31.xlsx +0 -0
  181. data/test/regression/xlsx_files/image35.xlsx +0 -0
  182. data/test/regression/xlsx_files/image36.xlsx +0 -0
  183. data/test/regression/xlsx_files/properties03.xlsx +0 -0
  184. data/test/regression/xlsx_files/properties04.xlsx +0 -0
  185. data/test/regression/xlsx_files/properties05.xlsx +0 -0
  186. data/test/regression/xlsx_files/table21.xlsx +0 -0
  187. data/test/regression/xlsx_files/table22.xlsx +0 -0
  188. data/test/regression/xlsx_files/table23.xlsx +0 -0
  189. data/test/regression/xlsx_files/types02.xlsx +0 -0
  190. data/test/regression/xlsx_files/types08.xlsx +0 -0
  191. data/test/regression/xlsx_files/utf8_11.xlsx +0 -0
  192. data/test/workbook/test_worksheet_by_name.rb +35 -0
  193. data/test/workbook/test_write_workbook_view.rb +117 -0
  194. data/test/worksheet/test_cond_format_22.rb +266 -0
  195. data/test/worksheet/test_cond_format_23.rb +242 -0
  196. data/test/worksheet/test_cond_format_24.rb +303 -0
  197. data/test/worksheet/test_data_bar_01.rb +53 -0
  198. data/test/worksheet/test_data_bar_02.rb +79 -0
  199. data/test/worksheet/test_data_bar_03.rb +147 -0
  200. data/test/worksheet/test_data_bar_04.rb +145 -0
  201. data/test/worksheet/test_data_bar_05.rb +147 -0
  202. data/test/worksheet/test_data_bar_06.rb +145 -0
  203. data/test/worksheet/test_data_bar_07.rb +146 -0
  204. data/test/worksheet/test_data_bar_08.rb +54 -0
  205. data/test/worksheet/test_data_bar_09.rb +80 -0
  206. data/test/worksheet/test_data_bar_10.rb +165 -0
  207. data/test/worksheet/test_data_bar_11.rb +167 -0
  208. data/test/worksheet/test_data_bar_12.rb +104 -0
  209. data/test/worksheet/test_write_data_validation_02.rb +44 -0
  210. data/test/worksheet/test_write_hyperlink.rb +0 -7
  211. data/test/worksheet/test_write_sheet_view.rb +19 -1
  212. metadata +267 -5
  213. 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: 6e7cdfffc65c56b8de477d41c1126ebd46a7d6e63aee6d6660bab0e9283be2c6
4
- data.tar.gz: c62748b94058a7021e796b88031b7d126b8508ce9ece50bdaa7455a620d8403b
3
+ metadata.gz: a8880984e96fe4a8788fe6642220163ff36932dea018a335d00165a7b2d2ae04
4
+ data.tar.gz: 99153b43aba51974cca58ed8c38d6308814820846b4617444fcd302752843bc5
5
5
  SHA512:
6
- metadata.gz: 0042aea94458add0013ceefed1e734593692c00f9dc32d8b02fef80093b2e62d3510ef62e84481c74acbf0436e8fe8223485a562a76ec8fd011724e2869c5b1e
7
- data.tar.gz: 0bb9fed1ec24707d52b7557c256579606c39eadb716bfdc4acb5e5e6b13f0792fb3627e75f16aef375675160d57556fff7f02af6fea8e4819bbdb244f96657e9
6
+ metadata.gz: 1b5c868f6e42846e925282b0eed02064b4541e852e72012e083009dbaa44e6bc419f1ad5b630cfe3ca149b12832732b972f340e6038502e1c8acbce9358702d2
7
+ data.tar.gz: 8bc6c84b0bb6c5901516441c7a5b1e45044ba5c26d30c92ac773f0de521e8e78785cd8aa4759a0d0db96d629aedd4aaf2a7453cb1f075b36dd1e61fc34cb217d
@@ -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.
@@ -1,4 +1,4 @@
1
- Copyright (c) 2012-2014 Hideo NAKAMURA
1
+ Copyright (c) 2012-2021 Hideo NAKAMURA
2
2
 
3
3
  MIT License
4
4
 
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.86](https://github.com/jmcnamara/excel-writer-xlsx) .
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-2020 Hideo NAKAMURA.
88
+ Copyright (c) 2012-2021 Hideo NAKAMURA.
89
89
 
90
90
  See LICENSE.txt for further details.
91
91
 
@@ -34,11 +34,6 @@
34
34
  worksheet.write(8, 0, '=IF(A5>3,"Yes", "No")')
35
35
 
36
36
  # Write a hyperlink
37
- hyperlink_format = workbook.add_format(
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
- # Use different sample data for examples 7 and 8
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', data7)
228
+ worksheet7.write_col('B3', data)
236
229
 
237
230
  worksheet7.write('D2', "3 Color Scale")
238
- worksheet7.write_col('D3', data7)
231
+ worksheet7.write_col('D3', data)
239
232
 
240
233
  worksheet7.write('F2', "Data Bars")
241
- worksheet7.write_col('F3', data7)
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', data7)
267
+ worksheet8.write_col('B3', data)
273
268
 
274
269
  worksheet8.write('D2', "3 Color Scale")
275
- worksheet8.write_col('D3', data7)
270
+ worksheet8.write_col('D3', data)
276
271
 
277
272
  worksheet8.write('F2', "Data Bars")
278
- worksheet8.write_col('F3', data7)
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 = 'Cells with values >= 100 are always in blue. ' +
310
- 'Otherwise, cells with values >= 50 are in light red ' +
311
- 'and values < 50 are in light green.'
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
- # Write a conditional format over a range.
318
- # Use stopIfTrue to prevent previous formats from being used
319
- # if the conditions of this format are met.
320
- worksheet9.conditional_formatting('B3:K12',
321
- {
322
- :type => 'cell',
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
- # Write another conditional format over the same range.
331
- worksheet9.conditional_formatting('B3:K12',
332
- {
333
- :type => 'cell',
334
- :criteria => '>=',
335
- :value => 50,
336
- :format => format1
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
- # Write another conditional format over the same range.
341
- worksheet9.conditional_formatting('B3:K12',
342
- {
343
- :type => 'cell',
344
- :criteria => '<',
345
- :value => 50,
346
- :format => format2
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
@@ -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/', hyperlink_format)
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
-
@@ -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/', url_format)
49
- worksheet.write('A3', 'http://www.perl.com/', url_format, str)
50
- worksheet.write('A5', 'http://www.perl.com/', url_format, str, tip)
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', url_format, 'Mail me')
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/')
@@ -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.tag_elements('c:dTable') do
25
- writer.empty_tag('c:showHorzBorder', attributes) if ptrue?(horizontal)
26
- writer.empty_tag('c:showVertBorder', attributes) if ptrue?(vertical)
27
- writer.empty_tag('c:showOutline', attributes) if ptrue?(outline)
28
- writer.empty_tag('c:showKeys', attributes) if ptrue?(show_keys)
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
- if params[:none]
344
- @legend_position = 'none'
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
- @legend_position = 'right'
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('ctr')
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 = @legend_position.sub(/^overlay_/, '')
1679
+ position = @legend.position.sub(/^overlay_/, '')
1731
1680
  return if position == 'none' || (not position_allowed.has_key?(position))
1732
1681
 
1733
- @delete_series = @legend_delete_series if @legend_delete_series.kind_of?(Array)
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(@legend_layout, 'legend')
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 @legend_position =~ /^overlay_/
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' => 'r',
1752
- 'left' => 'l',
1753
- 'top' => 't',
1754
- 'bottom' => 'b'
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:solidFill> element.
2048
+ # Write the <a:alpha> element.
2189
2049
  #
2190
- def write_a_solid_fill(line) # :nodoc:
2191
- @writer.tag_elements('a:solidFill') do
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
  #