write_xlsx 0.97.0 → 1.04.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 (313) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Changes +78 -0
  4. data/LICENSE.txt +1 -1
  5. data/README.md +2 -2
  6. data/examples/a_simple.rb +1 -1
  7. data/examples/add_vba_project.rb +1 -1
  8. data/examples/array_formula.rb +1 -1
  9. data/examples/chart_area.rb +5 -2
  10. data/examples/chart_bar.rb +5 -2
  11. data/examples/chart_clustered.rb +1 -1
  12. data/examples/chart_column.rb +5 -2
  13. data/examples/chart_combined.rb +1 -1
  14. data/examples/chart_data_table.rb +9 -3
  15. data/examples/chart_data_tools.rb +25 -7
  16. data/examples/chart_doughnut.rb +17 -5
  17. data/examples/chart_gauge.rb +73 -0
  18. data/examples/chart_line.rb +90 -12
  19. data/examples/chart_pareto.rb +1 -1
  20. data/examples/chart_pie.rb +9 -3
  21. data/examples/chart_radar.rb +13 -4
  22. data/examples/chart_scatter.rb +5 -2
  23. data/examples/chart_secondary_axis.rb +5 -2
  24. data/examples/chart_stock.rb +1 -1
  25. data/examples/chart_styles.rb +1 -1
  26. data/examples/colors.rb +1 -1
  27. data/examples/data_validate.rb +1 -1
  28. data/examples/date_time.rb +1 -1
  29. data/examples/demo.rb +4 -1
  30. data/examples/formats.rb +1 -1
  31. data/examples/headers.rb +1 -1
  32. data/examples/hide_row_col.rb +1 -1
  33. data/examples/hide_sheet.rb +1 -1
  34. data/examples/hyperlink1.rb +1 -1
  35. data/examples/indent.rb +1 -1
  36. data/examples/macros.rb +1 -1
  37. data/examples/merge1.rb +1 -1
  38. data/examples/merge2.rb +1 -1
  39. data/examples/merge3.rb +1 -1
  40. data/examples/merge4.rb +1 -1
  41. data/examples/merge5.rb +1 -1
  42. data/examples/merge6.rb +1 -1
  43. data/examples/outline.rb +1 -1
  44. data/examples/outline_collapsed.rb +1 -1
  45. data/examples/panes.rb +1 -1
  46. data/examples/properties.rb +1 -1
  47. data/examples/regions.rb +1 -1
  48. data/examples/rich_strings.rb +1 -1
  49. data/examples/right_to_left.rb +1 -1
  50. data/examples/shape1.rb +1 -1
  51. data/examples/shape2.rb +1 -1
  52. data/examples/shape3.rb +1 -1
  53. data/examples/shape4.rb +1 -1
  54. data/examples/shape5.rb +1 -1
  55. data/examples/shape6.rb +1 -1
  56. data/examples/shape7.rb +1 -1
  57. data/examples/shape8.rb +1 -1
  58. data/examples/shape_all.rb +1 -1
  59. data/examples/sparklines1.rb +1 -1
  60. data/examples/sparklines2.rb +1 -1
  61. data/examples/stats.rb +1 -1
  62. data/examples/stats_ext.rb +1 -1
  63. data/examples/stocks.rb +1 -1
  64. data/examples/tab_colors.rb +1 -1
  65. data/examples/tables.rb +78 -43
  66. data/lib/write_xlsx/chart.rb +43 -35
  67. data/lib/write_xlsx/chart/area.rb +1 -1
  68. data/lib/write_xlsx/chart/axis.rb +2 -2
  69. data/lib/write_xlsx/chart/bar.rb +1 -1
  70. data/lib/write_xlsx/chart/column.rb +1 -1
  71. data/lib/write_xlsx/chart/doughnut.rb +1 -1
  72. data/lib/write_xlsx/chart/legend.rb +14 -0
  73. data/lib/write_xlsx/chart/line.rb +16 -2
  74. data/lib/write_xlsx/chart/pie.rb +30 -15
  75. data/lib/write_xlsx/chart/radar.rb +1 -1
  76. data/lib/write_xlsx/chart/scatter.rb +1 -1
  77. data/lib/write_xlsx/chart/stock.rb +1 -1
  78. data/lib/write_xlsx/chartsheet.rb +35 -7
  79. data/lib/write_xlsx/drawing.rb +86 -30
  80. data/lib/write_xlsx/format.rb +9 -9
  81. data/lib/write_xlsx/package/comments.rb +61 -58
  82. data/lib/write_xlsx/package/conditional_format.rb +9 -1
  83. data/lib/write_xlsx/package/relationships.rb +4 -4
  84. data/lib/write_xlsx/package/styles.rb +26 -8
  85. data/lib/write_xlsx/package/table.rb +13 -7
  86. data/lib/write_xlsx/package/vml.rb +20 -19
  87. data/lib/write_xlsx/shape.rb +4 -3
  88. data/lib/write_xlsx/sheets.rb +18 -16
  89. data/lib/write_xlsx/sparkline.rb +1 -1
  90. data/lib/write_xlsx/utility.rb +96 -7
  91. data/lib/write_xlsx/version.rb +1 -1
  92. data/lib/write_xlsx/workbook.rb +99 -49
  93. data/lib/write_xlsx/worksheet.rb +225 -145
  94. data/lib/write_xlsx/worksheet/data_validation.rb +10 -14
  95. data/lib/write_xlsx/worksheet/hyperlink.rb +16 -37
  96. data/test/chart/test_write_legend_pos.rb +9 -1
  97. data/test/chartsheet/test_write_sheet_protection.rb +91 -0
  98. data/test/drawing/test_drawing_chart_01.rb +6 -2
  99. data/test/drawing/test_drawing_image_01.rb +12 -3
  100. data/test/drawing/test_drawing_shape_01.rb +8 -5
  101. data/test/drawing/test_drawing_shape_02.rb +12 -5
  102. data/test/drawing/test_drawing_shape_03.rb +8 -5
  103. data/test/drawing/test_drawing_shape_04.rb +8 -24
  104. data/test/drawing/test_drawing_shape_05.rb +8 -5
  105. data/test/drawing/test_drawing_shape_06.rb +11 -6
  106. data/test/drawing/test_drawing_shape_07.rb +11 -6
  107. data/test/drawing/test_write_a_graphic_frame_locks.rb +1 -1
  108. data/test/drawing/test_write_c_chart.rb +1 -1
  109. data/test/drawing/test_write_c_nv_graphic_frame_pr.rb +1 -1
  110. data/test/drawing/test_write_c_nv_pr.rb +1 -1
  111. data/test/drawing/test_write_col.rb +1 -1
  112. data/test/drawing/test_write_col_off.rb +1 -1
  113. data/test/drawing/test_write_ext.rb +1 -1
  114. data/test/drawing/test_write_pos.rb +1 -1
  115. data/test/drawing/test_write_row.rb +1 -1
  116. data/test/drawing/test_write_row_off.rb +1 -1
  117. data/test/drawing/test_write_xfrm_extension.rb +1 -1
  118. data/test/drawing/test_write_xfrm_offset.rb +1 -1
  119. data/test/package/comments/test_comments_01.rb +54 -0
  120. data/test/package/comments/test_comments_02.rb +54 -0
  121. data/test/perl_output/chart_gauge.xlsx +0 -0
  122. data/test/perl_output/chart_line.xlsx +0 -0
  123. data/test/perl_output/comments2.xlsx +0 -0
  124. data/test/perl_output/formats.xlsx +0 -0
  125. data/test/perl_output/tables.xlsx +0 -0
  126. data/test/regression/images/happy.jpg +0 -0
  127. data/test/regression/images/red2.png +0 -0
  128. data/test/regression/test_array_formula03.rb +36 -0
  129. data/test/regression/test_autofilter08.rb +110 -0
  130. data/test/regression/test_autofilter09.rb +110 -0
  131. data/test/regression/test_autofilter10.rb +110 -0
  132. data/test/regression/test_chart_axis26.rb +10 -8
  133. data/test/regression/test_chart_axis27.rb +1 -1
  134. data/test/regression/test_chart_axis28.rb +1 -1
  135. data/test/regression/test_chart_axis29.rb +1 -1
  136. data/test/regression/test_chart_axis33.rb +1 -1
  137. data/test/regression/test_chart_axis42.rb +44 -0
  138. data/test/regression/test_chart_axis43.rb +44 -0
  139. data/test/regression/test_chart_axis44.rb +54 -0
  140. data/test/regression/test_chart_axis45.rb +54 -0
  141. data/test/regression/test_chart_axis46.rb +54 -0
  142. data/test/regression/test_chart_combined10.rb +43 -0
  143. data/test/regression/test_chart_combined11.rb +63 -0
  144. data/test/regression/test_chart_data_labels25.rb +1 -1
  145. data/test/regression/test_chart_doughnut07.rb +37 -0
  146. data/test/regression/test_chart_font09.rb +1 -1
  147. data/test/regression/test_chart_legend03.rb +41 -0
  148. data/test/regression/test_chart_legend04.rb +41 -0
  149. data/test/regression/test_chart_legend05.rb +41 -0
  150. data/test/regression/test_chart_legend06.rb +41 -0
  151. data/test/regression/test_chart_legend07.rb +38 -0
  152. data/test/regression/test_chart_line05.rb +43 -0
  153. data/test/regression/test_chart_line06.rb +43 -0
  154. data/test/regression/test_chart_size03.rb +4 -1
  155. data/test/regression/test_comment13.rb +36 -0
  156. data/test/regression/test_comment14.rb +29 -0
  157. data/test/regression/test_comment15.rb +28 -0
  158. data/test/regression/test_comment16.rb +34 -0
  159. data/test/regression/test_cond_format19.rb +64 -0
  160. data/test/regression/test_cond_format20.rb +43 -0
  161. data/test/regression/test_format15.rb +26 -0
  162. data/test/regression/test_header_image15.rb +36 -0
  163. data/test/regression/test_header_image16.rb +42 -0
  164. data/test/regression/test_header_image17.rb +46 -0
  165. data/test/regression/test_header_image18.rb +48 -0
  166. data/test/regression/test_header_image19.rb +36 -0
  167. data/test/regression/test_hyperlink32.rb +27 -0
  168. data/test/regression/test_hyperlink33.rb +28 -0
  169. data/test/regression/test_hyperlink34.rb +33 -0
  170. data/test/regression/test_hyperlink35.rb +39 -0
  171. data/test/regression/test_hyperlink36.rb +34 -0
  172. data/test/regression/test_hyperlink37.rb +33 -0
  173. data/test/regression/test_hyperlink38.rb +27 -0
  174. data/test/regression/test_hyperlink39.rb +27 -0
  175. data/test/regression/test_hyperlink40.rb +27 -0
  176. data/test/regression/test_hyperlink41.rb +27 -0
  177. data/test/regression/test_hyperlink42.rb +27 -0
  178. data/test/regression/test_hyperlink43.rb +27 -0
  179. data/test/regression/test_hyperlink44.rb +27 -0
  180. data/test/regression/test_hyperlink45.rb +27 -0
  181. data/test/regression/test_hyperlink47.rb +27 -0
  182. data/test/regression/test_hyperlink48.rb +31 -0
  183. data/test/regression/test_hyperlink49.rb +29 -0
  184. data/test/regression/test_image06.rb +5 -5
  185. data/test/regression/test_image08.rb +5 -4
  186. data/test/regression/test_image15.rb +4 -2
  187. data/test/regression/test_image28.rb +1 -1
  188. data/test/regression/test_image36.rb +26 -0
  189. data/test/regression/test_image44.rb +28 -0
  190. data/test/regression/test_image45.rb +29 -0
  191. data/test/regression/test_image46.rb +29 -0
  192. data/test/regression/test_image47.rb +28 -0
  193. data/test/regression/test_image48.rb +32 -0
  194. data/test/regression/test_image49.rb +38 -0
  195. data/test/regression/test_image50.rb +24 -0
  196. data/test/regression/test_image51.rb +30 -0
  197. data/test/regression/test_object_position01.rb +26 -0
  198. data/test/regression/test_object_position02.rb +26 -0
  199. data/test/regression/test_object_position03.rb +26 -0
  200. data/test/regression/test_object_position04.rb +44 -0
  201. data/test/regression/test_object_position06.rb +28 -0
  202. data/test/regression/test_object_position07.rb +28 -0
  203. data/test/regression/test_object_position08.rb +47 -0
  204. data/test/regression/test_object_position09.rb +50 -0
  205. data/test/regression/test_object_position10.rb +28 -0
  206. data/test/regression/test_object_position12.rb +25 -0
  207. data/test/regression/test_object_position13.rb +25 -0
  208. data/test/regression/test_object_position14.rb +25 -0
  209. data/test/regression/test_object_position15.rb +29 -0
  210. data/test/regression/test_object_position16.rb +29 -0
  211. data/test/regression/test_object_position17.rb +29 -0
  212. data/test/regression/test_object_position18.rb +29 -0
  213. data/test/regression/test_object_position19.rb +29 -0
  214. data/test/regression/test_object_position20.rb +29 -0
  215. data/test/regression/test_shape_connect01.rb +4 -2
  216. data/test/regression/test_table23.rb +56 -0
  217. data/test/regression/test_table24.rb +27 -0
  218. data/test/regression/test_table25.rb +27 -0
  219. data/test/regression/xlsx_files/array_formula03.xlsx +0 -0
  220. data/test/regression/xlsx_files/autofilter08.xlsx +0 -0
  221. data/test/regression/xlsx_files/autofilter09.xlsx +0 -0
  222. data/test/regression/xlsx_files/autofilter10.xlsx +0 -0
  223. data/test/regression/xlsx_files/chart_axis26.xlsx +0 -0
  224. data/test/regression/xlsx_files/chart_axis27.xlsx +0 -0
  225. data/test/regression/xlsx_files/chart_axis28.xlsx +0 -0
  226. data/test/regression/xlsx_files/chart_axis29.xlsx +0 -0
  227. data/test/regression/xlsx_files/chart_axis33.xlsx +0 -0
  228. data/test/regression/xlsx_files/chart_axis42.xlsx +0 -0
  229. data/test/regression/xlsx_files/chart_axis43.xlsx +0 -0
  230. data/test/regression/xlsx_files/chart_axis44.xlsx +0 -0
  231. data/test/regression/xlsx_files/chart_axis45.xlsx +0 -0
  232. data/test/regression/xlsx_files/chart_axis46.xlsx +0 -0
  233. data/test/regression/xlsx_files/chart_combined10.xlsx +0 -0
  234. data/test/regression/xlsx_files/chart_combined11.xlsx +0 -0
  235. data/test/regression/xlsx_files/chart_data_labels25.xlsx +0 -0
  236. data/test/regression/xlsx_files/chart_doughnut07.xlsx +0 -0
  237. data/test/regression/xlsx_files/chart_font09.xlsx +0 -0
  238. data/test/regression/xlsx_files/chart_legend03.xlsx +0 -0
  239. data/test/regression/xlsx_files/chart_legend04.xlsx +0 -0
  240. data/test/regression/xlsx_files/chart_legend05.xlsx +0 -0
  241. data/test/regression/xlsx_files/chart_legend06.xlsx +0 -0
  242. data/test/regression/xlsx_files/chart_legend07.xlsx +0 -0
  243. data/test/regression/xlsx_files/chart_line05.xlsx +0 -0
  244. data/test/regression/xlsx_files/chart_line06.xlsx +0 -0
  245. data/test/regression/xlsx_files/comment13.xlsx +0 -0
  246. data/test/regression/xlsx_files/comment14.xlsx +0 -0
  247. data/test/regression/xlsx_files/comment15.xlsx +0 -0
  248. data/test/regression/xlsx_files/comment16.xlsx +0 -0
  249. data/test/regression/xlsx_files/cond_format19.xlsx +0 -0
  250. data/test/regression/xlsx_files/cond_format20.xlsx +0 -0
  251. data/test/regression/xlsx_files/format15.xlsx +0 -0
  252. data/test/regression/xlsx_files/header_image15.xlsx +0 -0
  253. data/test/regression/xlsx_files/header_image16.xlsx +0 -0
  254. data/test/regression/xlsx_files/header_image17.xlsx +0 -0
  255. data/test/regression/xlsx_files/header_image18.xlsx +0 -0
  256. data/test/regression/xlsx_files/header_image19.xlsx +0 -0
  257. data/test/regression/xlsx_files/hyperlink32.xlsx +0 -0
  258. data/test/regression/xlsx_files/hyperlink33.xlsx +0 -0
  259. data/test/regression/xlsx_files/hyperlink34.xlsx +0 -0
  260. data/test/regression/xlsx_files/hyperlink35.xlsx +0 -0
  261. data/test/regression/xlsx_files/hyperlink36.xlsx +0 -0
  262. data/test/regression/xlsx_files/hyperlink37.xlsx +0 -0
  263. data/test/regression/xlsx_files/hyperlink38.xlsx +0 -0
  264. data/test/regression/xlsx_files/hyperlink39.xlsx +0 -0
  265. data/test/regression/xlsx_files/hyperlink40.xlsx +0 -0
  266. data/test/regression/xlsx_files/hyperlink41.xlsx +0 -0
  267. data/test/regression/xlsx_files/hyperlink42.xlsx +0 -0
  268. data/test/regression/xlsx_files/hyperlink43.xlsx +0 -0
  269. data/test/regression/xlsx_files/hyperlink44.xlsx +0 -0
  270. data/test/regression/xlsx_files/hyperlink45.xlsx +0 -0
  271. data/test/regression/xlsx_files/hyperlink46.xlsx +0 -0
  272. data/test/regression/xlsx_files/hyperlink47.xlsx +0 -0
  273. data/test/regression/xlsx_files/hyperlink48.xlsx +0 -0
  274. data/test/regression/xlsx_files/hyperlink49.xlsx +0 -0
  275. data/test/regression/xlsx_files/image06.xlsx +0 -0
  276. data/test/regression/xlsx_files/image36.xlsx +0 -0
  277. data/test/regression/xlsx_files/image44.xlsx +0 -0
  278. data/test/regression/xlsx_files/image45.xlsx +0 -0
  279. data/test/regression/xlsx_files/image46.xlsx +0 -0
  280. data/test/regression/xlsx_files/image47.xlsx +0 -0
  281. data/test/regression/xlsx_files/image48.xlsx +0 -0
  282. data/test/regression/xlsx_files/image49.xlsx +0 -0
  283. data/test/regression/xlsx_files/image50.xlsx +0 -0
  284. data/test/regression/xlsx_files/image51.xlsx +0 -0
  285. data/test/regression/xlsx_files/object_position01.xlsx +0 -0
  286. data/test/regression/xlsx_files/object_position02.xlsx +0 -0
  287. data/test/regression/xlsx_files/object_position03.xlsx +0 -0
  288. data/test/regression/xlsx_files/object_position04.xlsx +0 -0
  289. data/test/regression/xlsx_files/object_position06.xlsx +0 -0
  290. data/test/regression/xlsx_files/object_position07.xlsx +0 -0
  291. data/test/regression/xlsx_files/object_position08.xlsx +0 -0
  292. data/test/regression/xlsx_files/object_position09.xlsx +0 -0
  293. data/test/regression/xlsx_files/object_position10.xlsx +0 -0
  294. data/test/regression/xlsx_files/object_position12.xlsx +0 -0
  295. data/test/regression/xlsx_files/object_position13.xlsx +0 -0
  296. data/test/regression/xlsx_files/object_position14.xlsx +0 -0
  297. data/test/regression/xlsx_files/object_position15.xlsx +0 -0
  298. data/test/regression/xlsx_files/object_position16.xlsx +0 -0
  299. data/test/regression/xlsx_files/object_position17.xlsx +0 -0
  300. data/test/regression/xlsx_files/object_position18.xlsx +0 -0
  301. data/test/regression/xlsx_files/object_position19.xlsx +0 -0
  302. data/test/regression/xlsx_files/object_position20.xlsx +0 -0
  303. data/test/regression/xlsx_files/table23.xlsx +0 -0
  304. data/test/regression/xlsx_files/table24.xlsx +0 -0
  305. data/test/regression/xlsx_files/table25.xlsx +0 -0
  306. data/test/test_example_match.rb +955 -780
  307. data/test/workbook/test_check_sheetname.rb +51 -0
  308. data/test/workbook/test_write_workbook_view.rb +36 -0
  309. data/test/worksheet/test_write_data_validation_02.rb +17 -0
  310. data/test/worksheet/test_write_sheet_view.rb +19 -1
  311. data/write_xlsx.gemspec +1 -0
  312. metadata +349 -7
  313. data/test/package/comments/test_write_text_t.rb +0 -44
data/examples/merge6.rb CHANGED
@@ -7,7 +7,7 @@
7
7
  # method with Unicode strings.
8
8
  #
9
9
  # reverse(c), December 2005, John McNamara, jmcnamara@cpan.org
10
- # convert to ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
10
+ # convert to ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
11
11
  #
12
12
 
13
13
  require 'write_xlsx'
data/examples/outline.rb CHANGED
@@ -61,7 +61,7 @@
61
61
  # See the main Excel::Writer::XLSX documentation for more information.
62
62
  #
63
63
  # reverse(c), April 2003, John McNamara, jmcnamara@cpan.org
64
- # convert to ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
64
+ # convert to ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
65
65
  #
66
66
 
67
67
  require 'write_xlsx'
@@ -9,7 +9,7 @@
9
9
  # outlines.pl example program for more general examples.
10
10
  #
11
11
  # reverse ('(c)'), March 2008, John McNamara, jmcnamara@cpan.org
12
- # convert to ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
12
+ # convert to ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
13
13
  #
14
14
 
15
15
  require 'write_xlsx'
data/examples/panes.rb CHANGED
@@ -6,7 +6,7 @@
6
6
  # Example of using the Excel::Writer::XLSX module to create worksheet panes.
7
7
  #
8
8
  # reverse(c), May 2001, John McNamara, jmcnamara@cpan.org
9
- # convert to ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
9
+ # convert to ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
10
10
  #
11
11
 
12
12
  require 'write_xlsx'
@@ -6,7 +6,7 @@
6
6
  # An example of adding document properties to a Excel::Writer::XLSX file.
7
7
  #
8
8
  # reverse('©'), August 2008, John McNamara, jmcnamara@cpan.org
9
- # convert to ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
9
+ # convert to ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
10
10
  #
11
11
 
12
12
  require 'write_xlsx'
data/examples/regions.rb CHANGED
@@ -7,7 +7,7 @@
7
7
  # Excel workbook with multiple worksheets.
8
8
  #
9
9
  # reverse(c), March 2001, John McNamara, jmcnamara@cpan.org
10
- # convert to ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
10
+ # convert to ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
11
11
  #
12
12
 
13
13
  require 'write_xlsx'
@@ -7,7 +7,7 @@
7
7
  # strings with multiple formatting.
8
8
  #
9
9
  # reverse(c), February 2011, John McNamara, jmcnamara@cpan.org
10
- # convert to ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
10
+ # convert to ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
11
11
  #
12
12
 
13
13
  require 'write_xlsx'
@@ -7,7 +7,7 @@
7
7
  # of Excel.
8
8
  #
9
9
  # reverse(c), January 2006, John McNamara, jmcnamara@cpan.org
10
- # convert to ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
10
+ # convert to ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
11
11
  #
12
12
 
13
13
  require 'write_xlsx'
data/examples/shape1.rb CHANGED
@@ -7,7 +7,7 @@
7
7
  # add shapes to an Excel xlsx file.
8
8
  #
9
9
  # reverse('c'), May 2012, John McNamara, jmcnamara@cpan.org
10
- # converted to Ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
10
+ # converted to Ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
11
11
  #
12
12
 
13
13
  require 'write_xlsx'
data/examples/shape2.rb CHANGED
@@ -7,7 +7,7 @@
7
7
  # modify shapes properties in an Excel xlsx file.
8
8
  #
9
9
  # reverse('c'), May 2012, John McNamara, jmcnamara@cpan.org
10
- # converted to Ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
10
+ # converted to Ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
11
11
  #
12
12
 
13
13
  require 'write_xlsx'
data/examples/shape3.rb CHANGED
@@ -7,7 +7,7 @@
7
7
  # scale shapes in an Excel xlsx file.
8
8
  #
9
9
  # reverse('c'), May 2012, John McNamara, jmcnamara@cpan.org
10
- # converted to Ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
10
+ # converted to Ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
11
11
  #
12
12
 
13
13
  require 'write_xlsx'
data/examples/shape4.rb CHANGED
@@ -7,7 +7,7 @@
7
7
  # demonstrate stenciling in an Excel xlsx file.
8
8
  #
9
9
  # reverse('c'), May 2012, John McNamara, jmcnamara@cpan.org
10
- # converted to Ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
10
+ # converted to Ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
11
11
  #
12
12
 
13
13
  require 'write_xlsx'
data/examples/shape5.rb CHANGED
@@ -7,7 +7,7 @@
7
7
  # add shapes (objects and top/bottom connectors) to an Excel xlsx file.
8
8
  #
9
9
  # reverse('c'), May 2012, John McNamara, jmcnamara@cpan.org
10
- # converted to Ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
10
+ # converted to Ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
11
11
  #
12
12
 
13
13
  require 'write_xlsx'
data/examples/shape6.rb CHANGED
@@ -7,7 +7,7 @@
7
7
  # add shapes (objects and right/left connectors) to an Excel xlsx file.
8
8
  #
9
9
  # reverse('c'), May 2012, John McNamara, jmcnamara@cpan.org
10
- # converted to Ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
10
+ # converted to Ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
11
11
  #
12
12
 
13
13
  require 'write_xlsx'
data/examples/shape7.rb CHANGED
@@ -7,7 +7,7 @@
7
7
  # add shapes and one-to-many connectors to an Excel xlsx file.
8
8
  #
9
9
  # reverse('c'), May 2012, John McNamara, jmcnamara@cpan.org
10
- # converted to Ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
10
+ # converted to Ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
11
11
  #
12
12
 
13
13
  require 'write_xlsx'
data/examples/shape8.rb CHANGED
@@ -7,7 +7,7 @@
7
7
  # add shapes and one-to-many connectors to an Excel xlsx file.
8
8
  #
9
9
  # reverse('c'), May 2012, John McNamara, jmcnamara@cpan.org
10
- # converted to Ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
10
+ # converted to Ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
11
11
  #
12
12
 
13
13
  require 'write_xlsx'
@@ -10,7 +10,7 @@
10
10
  # part of the ECMA-376 standard.
11
11
  #
12
12
  # reverse(c), May 2012, John McNamara, jmcnamara@cpan.org
13
- # converted to ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
13
+ # converted to ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
14
14
  #
15
15
  require 'write_xlsx'
16
16
 
@@ -10,7 +10,7 @@
10
10
  # of more complex sparkline formatting.
11
11
  #
12
12
  # reverse ('(c)'), November 2011, John McNamara, jmcnamara@cpan.org
13
- # convert to ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
13
+ # convert to ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
14
14
  #
15
15
 
16
16
  require 'write_xlsx'
@@ -10,7 +10,7 @@
10
10
  # options that can be applied to sparklines.
11
11
  #
12
12
  # reverse ('(c)'), November 2011, John McNamara, jmcnamara@cpan.org
13
- # convert to ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
13
+ # convert to ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
14
14
  #
15
15
 
16
16
  require 'write_xlsx'
data/examples/stats.rb CHANGED
@@ -6,7 +6,7 @@
6
6
  # A Simple example of how to use functions with the WriteXLSX gem.
7
7
  #
8
8
  # reverse(c), March 2001, John McNamara, jmcnamara@cpan.org
9
- # convert to ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
9
+ # convert to ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
10
10
  #
11
11
 
12
12
  require 'write_xlsx'
@@ -9,7 +9,7 @@
9
9
  # other worksheets within the same workbook.
10
10
  #
11
11
  # reverse(c), March 2001, John McNamara, jmcnamara@cpan.org
12
- # convert to ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
12
+ # convert to ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
13
13
  #
14
14
 
15
15
  require 'write_xlsx'
data/examples/stocks.rb CHANGED
@@ -9,7 +9,7 @@
9
9
  # with colours to indicate if a share price has gone up or down.
10
10
  #
11
11
  # reverse(c), March 2001, John McNamara, jmcnamara@cpan.org
12
- # convert to ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
12
+ # convert to ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
13
13
  #
14
14
 
15
15
  require 'write_xlsx'
@@ -5,7 +5,7 @@
5
5
  # Example of how to set Excel worksheet tab colours.
6
6
  #
7
7
  # reverse(c), May 2006, John McNamara, jmcnamara@cpan.org
8
- # convert to ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
8
+ # convert to ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
9
9
  #
10
10
 
11
11
  require 'write_xlsx'
data/examples/tables.rb CHANGED
@@ -9,7 +9,7 @@
9
9
  # structure that can be references in a formula or formatted collectively.
10
10
  #
11
11
  # reverse(c), March 2001, John McNamara, jmcnamara@cpan.org
12
- # convert to ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
12
+ # convert to ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
13
13
  #
14
14
 
15
15
  require 'write_xlsx'
@@ -28,6 +28,7 @@
28
28
  worksheet10 = workbook.add_worksheet
29
29
  worksheet11 = workbook.add_worksheet
30
30
  worksheet12 = workbook.add_worksheet
31
+ worksheet13 = workbook.add_worksheet
31
32
 
32
33
  currency_format = workbook.add_format(:num_format => '$#,##0')
33
34
 
@@ -60,7 +61,7 @@
60
61
  #
61
62
  # Example 2.
62
63
  #
63
- caption = 'Default table with data.';
64
+ caption = 'Default table with data.'
64
65
 
65
66
  # Set the columns widths.
66
67
  worksheet2.set_column('B:G', 12)
@@ -130,7 +131,7 @@
130
131
  #
131
132
  # Example 6.
132
133
  #
133
- caption = 'Table with banded columns but without default banded rows.';
134
+ caption = 'Table with banded columns but without default banded rows.'
134
135
 
135
136
  # Set the columns widths.
136
137
  worksheet6.set_column('B:G', 12)
@@ -149,7 +150,7 @@
149
150
  #
150
151
  # Example 7.
151
152
  #
152
- caption = 'Table with user defined column headers';
153
+ caption = 'Table with user defined column headers'
153
154
 
154
155
  # Set the columns widths.
155
156
  worksheet7.set_column('B:G', 12)
@@ -176,7 +177,7 @@
176
177
  #
177
178
  # Example 8.
178
179
  #
179
- caption = 'Table with user defined column headers';
180
+ caption = 'Table with user defined column headers'
180
181
 
181
182
  # Set the columns widths.
182
183
  worksheet8.set_column('B:G', 12)
@@ -208,7 +209,7 @@
208
209
  #
209
210
  # Example 9.
210
211
  #
211
- caption = 'Table with totals row (but no caption or totals).';
212
+ caption = 'Table with totals row (but no caption or totals).'
212
213
 
213
214
  # Set the columns widths.
214
215
  worksheet9.set_column('B:G', 12)
@@ -241,7 +242,7 @@
241
242
  #
242
243
  # Example 10.
243
244
  #
244
- caption = 'Table with totals row with user captions and functions.';
245
+ caption = 'Table with totals row with user captions and functions.'
245
246
 
246
247
  # Set the columns widths.
247
248
  worksheet10.set_column('B:G', 12)
@@ -275,7 +276,7 @@
275
276
  #
276
277
  # Example 11.
277
278
  #
278
- caption = 'Table with alternative Excel style.';
279
+ caption = 'Table with alternative Excel style.'
279
280
 
280
281
  # Set the columns widths.
281
282
  worksheet11.set_column('B:G', 12)
@@ -310,7 +311,7 @@
310
311
  #
311
312
  # Example 12.
312
313
  #
313
- caption = 'Table with column formats.';
314
+ caption = 'Table with no Excel style.'
314
315
 
315
316
  # Set the columns widths.
316
317
  worksheet12.set_column('B:G', 12)
@@ -320,40 +321,74 @@
320
321
 
321
322
  # Add a table to the worksheet.
322
323
  worksheet12.add_table(
323
- 'B3:G8',
324
- {
325
- :data => data,
326
- :total_row => 1,
327
- :columns => [
328
- { :header => 'Product', :total_string => 'Totals' },
329
- {
330
- :header => 'Quarter 1',
331
- :total_function => 'sum',
332
- :format => currency_format,
333
- },
334
- {
335
- :header => 'Quarter 2',
336
- :total_function => 'sum',
337
- :format => currency_format,
338
- },
339
- {
340
- :header => 'Quarter 3',
341
- :total_function => 'sum',
342
- :format => currency_format,
343
- },
344
- {
345
- :header => 'Quarter 4',
346
- :total_function => 'sum',
347
- :format => currency_format,
348
- },
349
- {
350
- :header => 'Year',
351
- :formula => '=SUM(Table8[@[Quarter 1]:[Quarter 4]])',
352
- :total_function => 'sum',
353
- :format => currency_format,
354
- }
355
- ]
356
- }
324
+ 'B3:G8',
325
+ {
326
+ :data => data,
327
+ :style => 'None',
328
+ :total_row => 1,
329
+ :columns => [
330
+ { :header => 'Product', :total_string => 'Totals' },
331
+ { :header => 'Quarter 1', :total_function => 'sum' },
332
+ { :header => 'Quarter 2', :total_function => 'sum' },
333
+ { :header => 'Quarter 3', :total_function => 'sum' },
334
+ { :header => 'Quarter 4', :total_function => 'sum' },
335
+ {
336
+ :header => 'Year',
337
+ :formula => '=SUM(Table12[@[Quarter 1]:[Quarter 4]])',
338
+ :total_function => 'sum'
339
+ }
340
+ ]
341
+ }
342
+ )
343
+
344
+ ###############################################################################
345
+ #
346
+ # Example 13.
347
+ #
348
+ caption = 'Table with column formats.'
349
+
350
+ # Set the columns widths.
351
+ worksheet13.set_column('B:G', 12)
352
+
353
+ # Write the caption.
354
+ worksheet13.write('B1', caption)
355
+
356
+ # Add a table to the worksheet.
357
+ worksheet13.add_table(
358
+ 'B3:G8',
359
+ {
360
+ :data => data,
361
+ :total_row => 1,
362
+ :columns => [
363
+ { :header => 'Product', :total_string => 'Totals' },
364
+ {
365
+ :header => 'Quarter 1',
366
+ :total_function => 'sum',
367
+ :format => currency_format,
368
+ },
369
+ {
370
+ :header => 'Quarter 2',
371
+ :total_function => 'sum',
372
+ :format => currency_format,
373
+ },
374
+ {
375
+ :header => 'Quarter 3',
376
+ :total_function => 'sum',
377
+ :format => currency_format,
378
+ },
379
+ {
380
+ :header => 'Quarter 4',
381
+ :total_function => 'sum',
382
+ :format => currency_format,
383
+ },
384
+ {
385
+ :header => 'Year',
386
+ :formula => '=SUM(Table8[@[Quarter 1]:[Quarter 4]])',
387
+ :total_function => 'sum',
388
+ :format => currency_format,
389
+ }
390
+ ]
391
+ }
357
392
  )
358
393
 
359
394
  workbook.close
@@ -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'
@@ -162,6 +163,7 @@ def numeric_or_downcase(val)
162
163
 
163
164
  class Chart
164
165
  include Writexlsx::Utility
166
+ include Writexlsx::Gradient
165
167
 
166
168
  attr_accessor :id, :name # :nodoc:
167
169
  attr_writer :index, :palette, :protection # :nodoc:
@@ -352,16 +354,8 @@ def set_title(params)
352
354
  # Set the properties of the chart legend.
353
355
  #
354
356
  def set_legend(params)
355
- if params[:none]
356
- @legend_position = 'none'
357
- else
358
- @legend_position = params[:position] || 'right'
359
- end
360
- @legend_delete_series = params[:delete_series]
361
- @legend_font = convert_font_args(params[:font])
362
-
363
- # Set the legend layout.
364
- @legend_layout = layout_properties(params[:layout])
357
+ # Convert the user default properties to internal properties.
358
+ legend_properties(params)
365
359
  end
366
360
 
367
361
  #
@@ -611,7 +605,7 @@ def display_setup
611
605
  @y_scale = 1
612
606
  @x_offset = 0
613
607
  @y_offset = 0
614
- @legend_position = 'right'
608
+ @legend = Legend.new
615
609
  @smooth_allowed = 0
616
610
  @cross_between = 'between'
617
611
  @date_category = false
@@ -1184,8 +1178,8 @@ def write_cat_axis(params) # :nodoc:
1184
1178
  return unless axis_ids
1185
1179
  return if axis_ids.empty?
1186
1180
 
1187
- position = @cat_axis_position
1188
- horiz = @horiz_cat_axis
1181
+ position = @cat_axis_position
1182
+ is_y_axis = @horiz_cat_axis
1189
1183
 
1190
1184
  # Overwrite the default axis position with a user supplied value.
1191
1185
  position = x_axis.position || position
@@ -1208,9 +1202,9 @@ def write_cat_axis(params) # :nodoc:
1208
1202
 
1209
1203
  # Write the axis title elements.
1210
1204
  if x_axis.formula
1211
- write_title_formula(x_axis, horiz, @x_axis, x_axis.layout)
1205
+ write_title_formula(x_axis, is_y_axis, @x_axis, x_axis.layout)
1212
1206
  elsif x_axis.name
1213
- write_title_rich(x_axis, horiz, x_axis.layout)
1207
+ write_title_rich(x_axis, is_y_axis, x_axis.layout)
1214
1208
  end
1215
1209
 
1216
1210
  # Write the c:numFmt element.
@@ -1240,7 +1234,7 @@ def write_cat_axis(params) # :nodoc:
1240
1234
  # Write the c:auto element.
1241
1235
  write_auto(1) unless x_axis.text_axis
1242
1236
  # Write the c:labelAlign element.
1243
- write_label_align('ctr')
1237
+ write_label_align(x_axis.label_align)
1244
1238
  # Write the c:labelOffset element.
1245
1239
  write_label_offset(100)
1246
1240
  # Write the c:tickLblSkip element.
@@ -1574,6 +1568,12 @@ def write_auto(val) # :nodoc:
1574
1568
  # Write the <c:labelAlign> element.
1575
1569
  #
1576
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
1577
1577
  @writer.empty_tag('c:lblAlgn', [ ['val', val] ])
1578
1578
  end
1579
1579
 
@@ -1676,10 +1676,10 @@ def write_c_minor_time_unit(val) # :nodoc:
1676
1676
  # Write the <c:legend> element.
1677
1677
  #
1678
1678
  def write_legend # :nodoc:
1679
- position = @legend_position.sub(/^overlay_/, '')
1679
+ position = @legend.position.sub(/^overlay_/, '')
1680
1680
  return if position == 'none' || (not position_allowed.has_key?(position))
1681
1681
 
1682
- @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)
1683
1683
  @writer.tag_elements('c:legend') do
1684
1684
  # Write the c:legendPos element.
1685
1685
  write_legend_pos(position_allowed[position])
@@ -1687,20 +1687,23 @@ def write_legend # :nodoc:
1687
1687
  # Write the c:legendEntry element.
1688
1688
  @delete_series.each { |i| write_legend_entry(i) } if @delete_series
1689
1689
  # Write the c:layout element.
1690
- write_layout(@legend_layout, 'legend')
1691
- # Write the c:txPr element.
1692
- write_tx_pr(nil, @legend_font) if ptrue?(@legend_font)
1690
+ write_layout(@legend.layout, 'legend')
1693
1691
  # Write the c:overlay element.
1694
- 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)
1695
1697
  end
1696
1698
  end
1697
1699
 
1698
1700
  def position_allowed
1699
1701
  {
1700
- 'right' => 'r',
1701
- 'left' => 'l',
1702
- 'top' => 't',
1703
- 'bottom' => 'b'
1702
+ 'right' => 'r',
1703
+ 'left' => 'l',
1704
+ 'top' => 't',
1705
+ 'bottom' => 'b',
1706
+ 'top_right' => 'tr'
1704
1707
  }
1705
1708
  end
1706
1709
 
@@ -1805,10 +1808,10 @@ def write_auto_title_deleted
1805
1808
  #
1806
1809
  # Write the <c:title> element for a rich string.
1807
1810
  #
1808
- def write_title_rich(title, horiz = nil, layout = nil, overlay = nil) # :nodoc:
1811
+ def write_title_rich(title, is_y_axis = nil, layout = nil, overlay = nil) # :nodoc:
1809
1812
  @writer.tag_elements('c:title') do
1810
1813
  # Write the c:tx element.
1811
- write_tx_rich(title, horiz)
1814
+ write_tx_rich(title, is_y_axis)
1812
1815
  # Write the c:layout element.
1813
1816
  write_layout(layout, 'text')
1814
1817
  # Write the c:overlay element.
@@ -1819,7 +1822,7 @@ def write_title_rich(title, horiz = nil, layout = nil, overlay = nil) # :nodoc:
1819
1822
  #
1820
1823
  # Write the <c:title> element for a rich string.
1821
1824
  #
1822
- def write_title_formula(title, horiz = nil, axis = nil, layout = nil, overlay = nil) # :nodoc:
1825
+ def write_title_formula(title, is_y_axis = nil, axis = nil, layout = nil, overlay = nil) # :nodoc:
1823
1826
  @writer.tag_elements('c:title') do
1824
1827
  # Write the c:tx element.
1825
1828
  write_tx_formula(title.formula, axis ? axis.data_id : title.data_id)
@@ -1828,15 +1831,15 @@ def write_title_formula(title, horiz = nil, axis = nil, layout = nil, overlay =
1828
1831
  # Write the c:overlay element.
1829
1832
  write_overlay if overlay
1830
1833
  # Write the c:txPr element.
1831
- write_tx_pr(horiz, axis ? axis.name_font : title.name_font)
1834
+ write_tx_pr(is_y_axis, axis ? axis.name_font : title.name_font)
1832
1835
  end
1833
1836
  end
1834
1837
 
1835
1838
  #
1836
1839
  # Write the <c:tx> element.
1837
1840
  #
1838
- def write_tx_rich(title, horiz) # :nodoc:
1839
- @writer.tag_elements('c:tx') { write_rich(title, horiz) }
1841
+ def write_tx_rich(title, is_y_axis) # :nodoc:
1842
+ @writer.tag_elements('c:tx') { write_rich(title, is_y_axis) }
1840
1843
  end
1841
1844
 
1842
1845
  #
@@ -1858,14 +1861,14 @@ def write_tx_formula(title, data_id) # :nodoc:
1858
1861
  #
1859
1862
  # Write the <c:rich> element.
1860
1863
  #
1861
- def write_rich(title, horiz) # :nodoc:
1864
+ def write_rich(title, is_y_axis) # :nodoc:
1862
1865
  rotation = nil
1863
1866
  if title.name_font && title.name_font[:_rotation]
1864
1867
  rotation = title.name_font[:_rotation]
1865
1868
  end
1866
1869
  @writer.tag_elements('c:rich') do
1867
1870
  # Write the a:bodyPr element.
1868
- write_a_body_pr(rotation, horiz)
1871
+ write_a_body_pr(rotation, is_y_axis)
1869
1872
  # Write the a:lstStyle element.
1870
1873
  write_a_lst_style
1871
1874
  # Write the a:p element.
@@ -2238,7 +2241,12 @@ def write_num_base(tag, data)
2238
2241
  write_format_code('General')
2239
2242
 
2240
2243
  # Write the c:ptCount element.
2241
- write_pt_count(data.size)
2244
+ if data
2245
+ count = data.size
2246
+ else
2247
+ count = 0
2248
+ end
2249
+ write_pt_count(count)
2242
2250
 
2243
2251
  data.each_with_index do |token, i|
2244
2252
  # Write non-numeric data as 0.