write_xlsx 0.89.0 → 1.01.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 (340) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Changes +98 -0
  4. data/LICENSE.txt +1 -1
  5. data/README.md +2 -2
  6. data/examples/a_simple.rb +2 -7
  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 +5 -2
  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/conditional_format.rb +73 -46
  28. data/examples/data_validate.rb +1 -1
  29. data/examples/date_time.rb +1 -1
  30. data/examples/demo.rb +5 -8
  31. data/examples/formats.rb +1 -1
  32. data/examples/headers.rb +1 -1
  33. data/examples/hide_row_col.rb +1 -1
  34. data/examples/hide_sheet.rb +1 -1
  35. data/examples/hyperlink1.rb +5 -12
  36. data/examples/indent.rb +1 -1
  37. data/examples/macros.rb +1 -1
  38. data/examples/merge1.rb +1 -1
  39. data/examples/merge2.rb +1 -1
  40. data/examples/merge3.rb +1 -1
  41. data/examples/merge4.rb +1 -1
  42. data/examples/merge5.rb +1 -1
  43. data/examples/merge6.rb +1 -1
  44. data/examples/outline.rb +1 -1
  45. data/examples/outline_collapsed.rb +1 -1
  46. data/examples/panes.rb +1 -1
  47. data/examples/properties.rb +1 -1
  48. data/examples/regions.rb +1 -1
  49. data/examples/rich_strings.rb +1 -1
  50. data/examples/right_to_left.rb +1 -1
  51. data/examples/shape1.rb +1 -1
  52. data/examples/shape2.rb +1 -1
  53. data/examples/shape3.rb +1 -1
  54. data/examples/shape4.rb +1 -1
  55. data/examples/shape5.rb +1 -1
  56. data/examples/shape6.rb +1 -1
  57. data/examples/shape7.rb +1 -1
  58. data/examples/shape8.rb +1 -1
  59. data/examples/shape_all.rb +1 -1
  60. data/examples/sparklines1.rb +1 -1
  61. data/examples/sparklines2.rb +1 -1
  62. data/examples/stats.rb +1 -1
  63. data/examples/stats_ext.rb +1 -1
  64. data/examples/stocks.rb +1 -1
  65. data/examples/tab_colors.rb +1 -1
  66. data/examples/tables.rb +1 -1
  67. data/lib/write_xlsx/chart.rb +124 -240
  68. data/lib/write_xlsx/chart/area.rb +1 -1
  69. data/lib/write_xlsx/chart/axis.rb +4 -4
  70. data/lib/write_xlsx/chart/bar.rb +1 -1
  71. data/lib/write_xlsx/chart/caption.rb +3 -1
  72. data/lib/write_xlsx/chart/column.rb +1 -1
  73. data/lib/write_xlsx/chart/doughnut.rb +1 -1
  74. data/lib/write_xlsx/chart/legend.rb +14 -0
  75. data/lib/write_xlsx/chart/line.rb +1 -1
  76. data/lib/write_xlsx/chart/pie.rb +32 -15
  77. data/lib/write_xlsx/chart/radar.rb +1 -1
  78. data/lib/write_xlsx/chart/scatter.rb +1 -1
  79. data/lib/write_xlsx/chart/series.rb +11 -7
  80. data/lib/write_xlsx/chart/stock.rb +1 -1
  81. data/lib/write_xlsx/chartsheet.rb +35 -7
  82. data/lib/write_xlsx/drawing.rb +28 -8
  83. data/lib/write_xlsx/format.rb +19 -15
  84. data/lib/write_xlsx/package/comments.rb +57 -54
  85. data/lib/write_xlsx/package/conditional_format.rb +360 -39
  86. data/lib/write_xlsx/package/content_types.rb +10 -0
  87. data/lib/write_xlsx/package/core.rb +8 -6
  88. data/lib/write_xlsx/package/custom.rb +125 -0
  89. data/lib/write_xlsx/package/packager.rb +26 -0
  90. data/lib/write_xlsx/package/styles.rb +53 -21
  91. data/lib/write_xlsx/package/table.rb +16 -4
  92. data/lib/write_xlsx/shape.rb +4 -3
  93. data/lib/write_xlsx/sheets.rb +11 -1
  94. data/lib/write_xlsx/sparkline.rb +1 -1
  95. data/lib/write_xlsx/utility.rb +305 -35
  96. data/lib/write_xlsx/version.rb +1 -1
  97. data/lib/write_xlsx/workbook.rb +132 -12
  98. data/lib/write_xlsx/worksheet.rb +397 -163
  99. data/lib/write_xlsx/worksheet/data_validation.rb +10 -14
  100. data/lib/write_xlsx/worksheet/hyperlink.rb +4 -13
  101. data/test/chart/test_write_legend_pos.rb +9 -1
  102. data/test/chartsheet/test_write_sheet_protection.rb +91 -0
  103. data/test/drawing/test_drawing_chart_01.rb +6 -2
  104. data/test/drawing/test_drawing_image_01.rb +12 -3
  105. data/test/drawing/test_drawing_shape_01.rb +8 -5
  106. data/test/drawing/test_drawing_shape_02.rb +12 -5
  107. data/test/drawing/test_drawing_shape_03.rb +8 -5
  108. data/test/drawing/test_drawing_shape_04.rb +8 -24
  109. data/test/drawing/test_drawing_shape_05.rb +8 -5
  110. data/test/drawing/test_drawing_shape_06.rb +11 -6
  111. data/test/drawing/test_drawing_shape_07.rb +11 -6
  112. data/test/drawing/test_write_a_graphic_frame_locks.rb +1 -1
  113. data/test/drawing/test_write_c_chart.rb +1 -1
  114. data/test/drawing/test_write_c_nv_graphic_frame_pr.rb +1 -1
  115. data/test/drawing/test_write_c_nv_pr.rb +1 -1
  116. data/test/drawing/test_write_col.rb +1 -1
  117. data/test/drawing/test_write_col_off.rb +1 -1
  118. data/test/drawing/test_write_ext.rb +1 -1
  119. data/test/drawing/test_write_pos.rb +1 -1
  120. data/test/drawing/test_write_row.rb +1 -1
  121. data/test/drawing/test_write_row_off.rb +1 -1
  122. data/test/drawing/test_write_xfrm_extension.rb +1 -1
  123. data/test/drawing/test_write_xfrm_offset.rb +1 -1
  124. data/test/helper.rb +6 -1
  125. data/test/package/comments/test_comments_01.rb +54 -0
  126. data/test/package/comments/test_comments_02.rb +54 -0
  127. data/test/perl_output/chart_gauge.xlsx +0 -0
  128. data/test/perl_output/formats.xlsx +0 -0
  129. data/test/regression/_test_hyperlink31.rb +26 -0
  130. data/test/regression/images/happy.jpg +0 -0
  131. data/test/regression/images/zero_dpi.jpg +0 -0
  132. data/test/regression/test_array_formula03.rb +36 -0
  133. data/test/regression/test_autofilter08.rb +110 -0
  134. data/test/regression/test_autofilter09.rb +110 -0
  135. data/test/regression/test_autofilter10.rb +110 -0
  136. data/test/regression/test_chart_axis26.rb +10 -8
  137. data/test/regression/test_chart_axis27.rb +1 -1
  138. data/test/regression/test_chart_axis28.rb +1 -1
  139. data/test/regression/test_chart_axis29.rb +1 -1
  140. data/test/regression/test_chart_axis33.rb +1 -1
  141. data/test/regression/test_chart_axis42.rb +44 -0
  142. data/test/regression/test_chart_axis43.rb +44 -0
  143. data/test/regression/test_chart_axis44.rb +54 -0
  144. data/test/regression/test_chart_axis45.rb +54 -0
  145. data/test/regression/test_chart_axis46.rb +54 -0
  146. data/test/regression/test_chart_bar08.rb +3 -0
  147. data/test/regression/test_chart_bar11.rb +3 -0
  148. data/test/regression/test_chart_bar14.rb +3 -0
  149. data/test/regression/test_chart_chartarea05.rb +16 -17
  150. data/test/regression/test_chart_chartarea06.rb +49 -0
  151. data/test/regression/test_chart_combined10.rb +43 -0
  152. data/test/regression/test_chart_combined11.rb +63 -0
  153. data/test/regression/test_chart_data_labels25.rb +61 -0
  154. data/test/regression/test_chart_doughnut07.rb +37 -0
  155. data/test/regression/test_chart_font09.rb +1 -1
  156. data/test/regression/test_chart_format26.rb +48 -0
  157. data/test/regression/test_chart_format27.rb +58 -0
  158. data/test/regression/test_chart_format28.rb +52 -0
  159. data/test/regression/test_chart_format29.rb +59 -0
  160. data/test/regression/test_chart_format30.rb +53 -0
  161. data/test/regression/test_chart_format31.rb +60 -0
  162. data/test/regression/test_chart_legend03.rb +41 -0
  163. data/test/regression/test_chart_legend04.rb +41 -0
  164. data/test/regression/test_chart_legend05.rb +41 -0
  165. data/test/regression/test_chart_legend06.rb +41 -0
  166. data/test/regression/test_chart_legend07.rb +38 -0
  167. data/test/regression/test_chart_size03.rb +4 -1
  168. data/test/regression/test_chart_table03.rb +56 -0
  169. data/test/regression/test_comment13.rb +36 -0
  170. data/test/regression/test_comment14.rb +29 -0
  171. data/test/regression/test_cond_format14.rb +42 -0
  172. data/test/regression/test_cond_format15.rb +53 -0
  173. data/test/regression/test_cond_format16.rb +53 -0
  174. data/test/regression/test_cond_format17.rb +37 -0
  175. data/test/regression/test_cond_format18.rb +136 -0
  176. data/test/regression/test_cond_format19.rb +64 -0
  177. data/test/regression/test_cond_format20.rb +43 -0
  178. data/test/regression/test_date_1904_01.rb +1 -1
  179. data/test/regression/test_escapes04.rb +3 -0
  180. data/test/regression/test_escapes05.rb +3 -0
  181. data/test/regression/test_escapes07.rb +3 -0
  182. data/test/regression/test_escapes08.rb +3 -0
  183. data/test/regression/test_format15.rb +26 -0
  184. data/test/regression/test_hyperlink01.rb +3 -0
  185. data/test/regression/test_hyperlink02.rb +3 -0
  186. data/test/regression/test_hyperlink03.rb +4 -0
  187. data/test/regression/test_hyperlink04.rb +3 -0
  188. data/test/regression/test_hyperlink05.rb +3 -0
  189. data/test/regression/test_hyperlink06.rb +3 -0
  190. data/test/regression/test_hyperlink07.rb +3 -0
  191. data/test/regression/test_hyperlink08.rb +3 -0
  192. data/test/regression/test_hyperlink09.rb +3 -0
  193. data/test/regression/test_hyperlink10.rb +3 -0
  194. data/test/regression/test_hyperlink11.rb +3 -0
  195. data/test/regression/test_hyperlink12.rb +3 -0
  196. data/test/regression/test_hyperlink13.rb +3 -0
  197. data/test/regression/test_hyperlink14.rb +3 -0
  198. data/test/regression/test_hyperlink15.rb +3 -0
  199. data/test/regression/test_hyperlink16.rb +3 -0
  200. data/test/regression/test_hyperlink17.rb +3 -0
  201. data/test/regression/test_hyperlink18.rb +3 -0
  202. data/test/regression/test_hyperlink20.rb +3 -0
  203. data/test/regression/test_hyperlink21.rb +3 -0
  204. data/test/regression/test_hyperlink22.rb +3 -0
  205. data/test/regression/test_hyperlink23.rb +3 -0
  206. data/test/regression/test_hyperlink24.rb +3 -0
  207. data/test/regression/test_hyperlink25.rb +3 -0
  208. data/test/regression/test_hyperlink26.rb +3 -0
  209. data/test/regression/test_hyperlink27.rb +27 -0
  210. data/test/regression/test_hyperlink28.rb +50 -0
  211. data/test/regression/test_hyperlink29.rb +27 -0
  212. data/test/regression/test_hyperlink30.rb +36 -0
  213. data/test/regression/test_image08.rb +5 -4
  214. data/test/regression/test_image15.rb +4 -2
  215. data/test/regression/test_image28.rb +1 -1
  216. data/test/regression/test_image35.rb +26 -0
  217. data/test/regression/test_image36.rb +26 -0
  218. data/test/regression/test_image44.rb +28 -0
  219. data/test/regression/test_image45.rb +28 -0
  220. data/test/regression/test_image46.rb +29 -0
  221. data/test/regression/test_image47.rb +28 -0
  222. data/test/regression/test_object_position01.rb +26 -0
  223. data/test/regression/test_object_position02.rb +26 -0
  224. data/test/regression/test_object_position03.rb +26 -0
  225. data/test/regression/test_object_position04.rb +44 -0
  226. data/test/regression/test_object_position06.rb +28 -0
  227. data/test/regression/test_object_position07.rb +28 -0
  228. data/test/regression/test_object_position08.rb +47 -0
  229. data/test/regression/test_object_position09.rb +50 -0
  230. data/test/regression/test_object_position10.rb +28 -0
  231. data/test/regression/test_properties01.rb +1 -4
  232. data/test/regression/test_properties02.rb +1 -4
  233. data/test/regression/test_properties03.rb +26 -0
  234. data/test/regression/test_properties04.rb +61 -0
  235. data/test/regression/test_properties05.rb +30 -0
  236. data/test/regression/test_shape_connect01.rb +4 -2
  237. data/test/regression/test_table03.rb +3 -0
  238. data/test/regression/test_table04.rb +3 -0
  239. data/test/regression/test_table05.rb +3 -0
  240. data/test/regression/test_table06.rb +3 -0
  241. data/test/regression/test_table20.rb +34 -0
  242. data/test/regression/test_table21.rb +36 -0
  243. data/test/regression/test_table22.rb +32 -0
  244. data/test/regression/test_table23.rb +56 -0
  245. data/test/regression/test_utf8_11.rb +23 -0
  246. data/test/regression/xlsx_files/array_formula03.xlsx +0 -0
  247. data/test/regression/xlsx_files/autofilter08.xlsx +0 -0
  248. data/test/regression/xlsx_files/autofilter09.xlsx +0 -0
  249. data/test/regression/xlsx_files/autofilter10.xlsx +0 -0
  250. data/test/regression/xlsx_files/chart_axis26.xlsx +0 -0
  251. data/test/regression/xlsx_files/chart_axis27.xlsx +0 -0
  252. data/test/regression/xlsx_files/chart_axis28.xlsx +0 -0
  253. data/test/regression/xlsx_files/chart_axis29.xlsx +0 -0
  254. data/test/regression/xlsx_files/chart_axis33.xlsx +0 -0
  255. data/test/regression/xlsx_files/chart_axis42.xlsx +0 -0
  256. data/test/regression/xlsx_files/chart_axis43.xlsx +0 -0
  257. data/test/regression/xlsx_files/chart_axis44.xlsx +0 -0
  258. data/test/regression/xlsx_files/chart_axis45.xlsx +0 -0
  259. data/test/regression/xlsx_files/chart_axis46.xlsx +0 -0
  260. data/test/regression/xlsx_files/chart_chartarea05.xlsx +0 -0
  261. data/test/regression/xlsx_files/chart_chartarea06.xlsx +0 -0
  262. data/test/regression/xlsx_files/chart_combined10.xlsx +0 -0
  263. data/test/regression/xlsx_files/chart_combined11.xlsx +0 -0
  264. data/test/regression/xlsx_files/chart_data_labels25.xlsx +0 -0
  265. data/test/regression/xlsx_files/chart_doughnut07.xlsx +0 -0
  266. data/test/regression/xlsx_files/chart_font09.xlsx +0 -0
  267. data/test/regression/xlsx_files/chart_format26.xlsx +0 -0
  268. data/test/regression/xlsx_files/chart_format27.xlsx +0 -0
  269. data/test/regression/xlsx_files/chart_format28.xlsx +0 -0
  270. data/test/regression/xlsx_files/chart_format29.xlsx +0 -0
  271. data/test/regression/xlsx_files/chart_format30.xlsx +0 -0
  272. data/test/regression/xlsx_files/chart_format31.xlsx +0 -0
  273. data/test/regression/xlsx_files/chart_legend03.xlsx +0 -0
  274. data/test/regression/xlsx_files/chart_legend04.xlsx +0 -0
  275. data/test/regression/xlsx_files/chart_legend05.xlsx +0 -0
  276. data/test/regression/xlsx_files/chart_legend06.xlsx +0 -0
  277. data/test/regression/xlsx_files/chart_legend07.xlsx +0 -0
  278. data/test/regression/xlsx_files/chart_table03.xlsx +0 -0
  279. data/test/regression/xlsx_files/comment13.xlsx +0 -0
  280. data/test/regression/xlsx_files/comment14.xlsx +0 -0
  281. data/test/regression/xlsx_files/cond_format14.xlsx +0 -0
  282. data/test/regression/xlsx_files/cond_format15.xlsx +0 -0
  283. data/test/regression/xlsx_files/cond_format16.xlsx +0 -0
  284. data/test/regression/xlsx_files/cond_format17.xlsx +0 -0
  285. data/test/regression/xlsx_files/cond_format18.xlsx +0 -0
  286. data/test/regression/xlsx_files/cond_format19.xlsx +0 -0
  287. data/test/regression/xlsx_files/cond_format20.xlsx +0 -0
  288. data/test/regression/xlsx_files/date_1904_01.xlsx +0 -0
  289. data/test/regression/xlsx_files/format15.xlsx +0 -0
  290. data/test/regression/xlsx_files/hyperlink27.xlsx +0 -0
  291. data/test/regression/xlsx_files/hyperlink28.xlsx +0 -0
  292. data/test/regression/xlsx_files/hyperlink29.xlsx +0 -0
  293. data/test/regression/xlsx_files/hyperlink30.xlsx +0 -0
  294. data/test/regression/xlsx_files/hyperlink31.xlsx +0 -0
  295. data/test/regression/xlsx_files/image35.xlsx +0 -0
  296. data/test/regression/xlsx_files/image36.xlsx +0 -0
  297. data/test/regression/xlsx_files/image44.xlsx +0 -0
  298. data/test/regression/xlsx_files/image45.xlsx +0 -0
  299. data/test/regression/xlsx_files/image46.xlsx +0 -0
  300. data/test/regression/xlsx_files/image47.xlsx +0 -0
  301. data/test/regression/xlsx_files/object_position01.xlsx +0 -0
  302. data/test/regression/xlsx_files/object_position02.xlsx +0 -0
  303. data/test/regression/xlsx_files/object_position03.xlsx +0 -0
  304. data/test/regression/xlsx_files/object_position04.xlsx +0 -0
  305. data/test/regression/xlsx_files/object_position06.xlsx +0 -0
  306. data/test/regression/xlsx_files/object_position07.xlsx +0 -0
  307. data/test/regression/xlsx_files/object_position08.xlsx +0 -0
  308. data/test/regression/xlsx_files/object_position09.xlsx +0 -0
  309. data/test/regression/xlsx_files/object_position10.xlsx +0 -0
  310. data/test/regression/xlsx_files/properties03.xlsx +0 -0
  311. data/test/regression/xlsx_files/properties04.xlsx +0 -0
  312. data/test/regression/xlsx_files/properties05.xlsx +0 -0
  313. data/test/regression/xlsx_files/table21.xlsx +0 -0
  314. data/test/regression/xlsx_files/table22.xlsx +0 -0
  315. data/test/regression/xlsx_files/table23.xlsx +0 -0
  316. data/test/regression/xlsx_files/utf8_11.xlsx +0 -0
  317. data/test/test_example_match.rb +836 -771
  318. data/test/workbook/test_check_sheetname.rb +61 -0
  319. data/test/workbook/test_worksheet_by_name.rb +35 -0
  320. data/test/workbook/test_write_workbook_view.rb +117 -0
  321. data/test/worksheet/test_cond_format_22.rb +266 -0
  322. data/test/worksheet/test_cond_format_23.rb +242 -0
  323. data/test/worksheet/test_cond_format_24.rb +303 -0
  324. data/test/worksheet/test_data_bar_01.rb +53 -0
  325. data/test/worksheet/test_data_bar_02.rb +79 -0
  326. data/test/worksheet/test_data_bar_03.rb +147 -0
  327. data/test/worksheet/test_data_bar_04.rb +145 -0
  328. data/test/worksheet/test_data_bar_05.rb +147 -0
  329. data/test/worksheet/test_data_bar_06.rb +145 -0
  330. data/test/worksheet/test_data_bar_07.rb +146 -0
  331. data/test/worksheet/test_data_bar_08.rb +54 -0
  332. data/test/worksheet/test_data_bar_09.rb +80 -0
  333. data/test/worksheet/test_data_bar_10.rb +165 -0
  334. data/test/worksheet/test_data_bar_11.rb +167 -0
  335. data/test/worksheet/test_data_bar_12.rb +104 -0
  336. data/test/worksheet/test_write_data_validation_02.rb +44 -0
  337. data/test/worksheet/test_write_hyperlink.rb +0 -7
  338. data/test/worksheet/test_write_sheet_view.rb +19 -1
  339. metadata +308 -5
  340. data/test/package/comments/test_write_text_t.rb +0 -44
@@ -8,7 +8,7 @@
8
8
  # See formatting note in Chart.
9
9
  #
10
10
  # Copyright 2000-2011, John McNamara, jmcnamara@cpan.org
11
- # Convert to ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
11
+ # Convert to ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
12
12
  #
13
13
 
14
14
  require 'write_xlsx/package/xml_writer_simple'
@@ -16,7 +16,7 @@ class Axis < Caption
16
16
  attr_reader :log_base, :crossing, :position_axis, :label_position, :visible
17
17
  attr_reader :num_format_linked, :num_font, :layout, :interval_unit
18
18
  attr_reader :interval_tick, :major_gridlines, :minor_gridlines, :reverse
19
- attr_reader :line, :fill, :text_axis
19
+ attr_reader :line, :fill, :text_axis, :label_align
20
20
  #
21
21
  # Convert user defined axis values into axis instance.
22
22
  #
@@ -28,7 +28,7 @@ def merge_with_hash(params) # :nodoc:
28
28
  :reverse, :min, :max, :minor_unit, :major_unit, :minor_unit_type,
29
29
  :major_unit_type, :log_base, :crossing, :position_axis,
30
30
  :label_position, :num_format, :num_format_linked, :interval_unit,
31
- :interval_tick, :line, :fill
31
+ :interval_tick, :line, :fill, :label_align
32
32
  ].each { |val| instance_variable_set("@#{val}", args[val]) }
33
33
  set_major_minor_gridlines(args)
34
34
 
@@ -184,8 +184,8 @@ def set_position_axis
184
184
  end
185
185
 
186
186
  def set_font_properties(args)
187
- @num_font = @chart.convert_font_args(args[:num_font])
188
- @name_font = @chart.convert_font_args(args[:name_font])
187
+ @num_font = convert_font_args(args[:num_font])
188
+ @name_font = convert_font_args(args[:name_font])
189
189
  end
190
190
 
191
191
  def set_axis_name_layout(args)
@@ -8,7 +8,7 @@
8
8
  # See formatting note in Chart.
9
9
  #
10
10
  # Copyright 2000-2011, John McNamara, jmcnamara@cpan.org
11
- # Convert to ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
11
+ # Convert to ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
12
12
  #
13
13
 
14
14
  require 'write_xlsx/package/xml_writer_simple'
@@ -3,6 +3,8 @@
3
3
  module Writexlsx
4
4
  class Chart
5
5
  class Caption
6
+ include Writexlsx::Utility
7
+
6
8
  attr_accessor :name, :formula, :data_id, :name_font
7
9
  attr_reader :layout, :overlay, :none
8
10
 
@@ -13,7 +15,7 @@ def initialize(chart)
13
15
  def merge_with_hash(params) # :nodoc:
14
16
  @name, @formula = @chart.process_names(params[:name], params[:name_formula])
15
17
  @data_id = @chart.data_id(@formula, params[:data])
16
- @name_font = @chart.convert_font_args(params[:name_font])
18
+ @name_font = convert_font_args(params[:name_font])
17
19
  @layout = @chart.layout_properties(params[:layout], 1)
18
20
 
19
21
  # Set the title overlay option.
@@ -8,7 +8,7 @@
8
8
  # See formatting note in Chart.
9
9
  #
10
10
  # Copyright 2000-2011, John McNamara, jmcnamara@cpan.org
11
- # Convert to ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
11
+ # Convert to ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
12
12
  #
13
13
 
14
14
  require 'write_xlsx/package/xml_writer_simple'
@@ -8,7 +8,7 @@
8
8
  # See formatting note in Excel::Writer::XLSX::Chart.
9
9
  #
10
10
  # Copyright 2000-2014, John McNamara, jmcnamara@cpan.org
11
- # Convert to ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
11
+ # Convert to ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
12
12
  #
13
13
 
14
14
  require 'write_xlsx/package/xml_writer_simple'
@@ -0,0 +1,14 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module Writexlsx
4
+ class Chart
5
+ class Legend
6
+ attr_accessor :line, :fill, :pattern, :gradient
7
+ attr_accessor :position, :delete_series, :layout, :font
8
+
9
+ def initialize
10
+ @position = 'right'
11
+ end
12
+ end
13
+ end
14
+ end
@@ -8,7 +8,7 @@
8
8
  # See formatting note in Chart.
9
9
  #
10
10
  # Copyright 2000-2011, John McNamara, jmcnamara@cpan.org
11
- # Convert to ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
11
+ # Convert to ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
12
12
  #
13
13
 
14
14
  require 'write_xlsx/package/xml_writer_simple'
@@ -8,7 +8,7 @@
8
8
  # See formatting note in Chart.
9
9
  #
10
10
  # Copyright 2000-2011, John McNamara, jmcnamara@cpan.org
11
- # Convert to ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
11
+ # Convert to ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
12
12
  #
13
13
 
14
14
  require 'write_xlsx/package/xml_writer_simple'
@@ -42,13 +42,6 @@ def initialize(subtype)
42
42
  }
43
43
  end
44
44
 
45
- #
46
- # Override parent method to add a warning.
47
- #
48
- def combine(chart)
49
- raise "Combined chart not currently supported for Pie charts"
50
- end
51
-
52
45
  #
53
46
  # Set the Pie/Doughnut chart rotation: the angle of the first slice.
54
47
  #
@@ -91,11 +84,33 @@ def write_pie_chart
91
84
  # Write the <c:plotArea> element.
92
85
  #
93
86
  def write_plot_area
87
+ second_chart = @combined
88
+
94
89
  @writer.tag_elements('c:plotArea') do
95
90
  # Write the c:layout element.
96
91
  write_layout(@plotarea.layout, 'plot')
97
92
  # Write the subclass chart type element.
98
93
  write_chart_type
94
+ # Configure a combined chart if present.
95
+ if second_chart
96
+ # Secondary axis has unique id otherwise use same as primary.
97
+ if second_chart.is_secondary?
98
+ second_chart.id = 1000 + @id
99
+ else
100
+ second_chart.id = @id
101
+ end
102
+
103
+ # Share the same filehandle for writing
104
+ second_chart.writer = @writer
105
+
106
+ # Share series index with primary chart.
107
+ second_chart.series_index = @series_index
108
+
109
+ # Write the subclass chart type elements for combined chart.
110
+ second_chart.write_chart_type
111
+ end
112
+ # Write the c:spPr eleent for the plotarea formatting.
113
+ write_sp_pr(@plotarea)
99
114
  end
100
115
  end
101
116
 
@@ -105,15 +120,15 @@ def write_plot_area
105
120
  # Write the <c:legend> element.
106
121
  #
107
122
  def write_legend
108
- position = @legend_position
123
+ position = @legend.position
109
124
  allowed = %w(right left top bottom)
110
- delete_series = @legend_delete_series || []
125
+ delete_series = @legend.delete_series || []
111
126
 
112
- if @legend_position =~ /^overlay_/
113
- position = @legend_position.sub(/^overlay_/, '')
127
+ if @legend.position =~ /^overlay_/
128
+ position = @legend.position.sub(/^overlay_/, '')
114
129
  overlay = true
115
130
  else
116
- position = @legend_position
131
+ position = @legend.position
117
132
  overlay = false
118
133
  end
119
134
 
@@ -127,11 +142,13 @@ def write_legend
127
142
  # Write the c:legendEntry element.
128
143
  delete_series.each { |index| write_legend_entry(index) }
129
144
  # Write the c:layout element.
130
- write_layout(@legend_layout, 'legend')
145
+ write_layout(@legend.layout, 'legend')
131
146
  # Write the c:overlay element.
132
147
  write_overlay if overlay
148
+ # Write the c:spPr element.
149
+ write_sp_pr(@legend)
133
150
  # Write the c:txPr element. Over-ridden.
134
- write_tx_pr_legend(0, @legend_font)
151
+ write_tx_pr_legend(0, @legend.font)
135
152
  end
136
153
  end
137
154
 
@@ -8,7 +8,7 @@
8
8
  # See formatting note in Chart.
9
9
  #
10
10
  # Copyright 2000-2012, John McNamara, jmcnamara@cpan.org
11
- # Convert to ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
11
+ # Convert to ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
12
12
  #
13
13
 
14
14
  require 'write_xlsx/package/xml_writer_simple'
@@ -8,7 +8,7 @@
8
8
  # See formatting note in Chart.
9
9
  #
10
10
  # Copyright 2000-2011, John McNamara, jmcnamara@cpan.org
11
- # Convert to ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
11
+ # Convert to ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
12
12
  #
13
13
 
14
14
  require 'write_xlsx/package/xml_writer_simple'
@@ -57,16 +57,20 @@ def initialize(params)
57
57
 
58
58
  class Trendline < Chartline
59
59
  attr_reader :name, :forward, :backward, :order, :period
60
+ attr_reader :intercept, :display_equation, :display_r_squared
60
61
 
61
62
  def initialize(params)
62
63
  super(params)
63
64
 
64
- @name = params[:name]
65
- @forward = params[:forward]
66
- @backward = params[:backward]
67
- @order = params[:order]
68
- @period = params[:period]
69
- @type = value_or_raise(types, params[:type], 'trendline type')
65
+ @name = params[:name]
66
+ @forward = params[:forward]
67
+ @backward = params[:backward]
68
+ @order = params[:order]
69
+ @period = params[:period]
70
+ @intercept = params[:intercept]
71
+ @display_equation = params[:display_equation]
72
+ @display_r_squared = params[:display_r_squared]
73
+ @type = value_or_raise(types, params[:type], 'trendline type')
70
74
  end
71
75
 
72
76
  private
@@ -293,7 +297,7 @@ def labels_properties(labels) # :nodoc:
293
297
  end
294
298
 
295
299
  if labels[:font]
296
- labels[:font] = @chart.convert_font_args(labels[:font])
300
+ labels[:font] = convert_font_args(labels[:font])
297
301
  end
298
302
 
299
303
  labels
@@ -8,7 +8,7 @@
8
8
  # See formatting note in Chart.
9
9
  #
10
10
  # Copyright 2000-2011, John McNamara, jmcnamara@cpan.org
11
- # Convert to ruby by Hideo NAKAMURA, cxn03651@msj.biglobe.ne.jp
11
+ # Convert to ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
12
12
  #
13
13
 
14
14
  require 'write_xlsx/package/xml_writer_simple'
@@ -6,7 +6,7 @@
6
6
  # Used in conjunction with WriteXLSX
7
7
  #
8
8
  # Copyright 2000-2011, 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/worksheet'
@@ -19,7 +19,7 @@ class Chartsheet < Worksheet
19
19
 
20
20
  def initialize(workbook, index, name)
21
21
  super
22
- @drawing = Drawing.new
22
+ @drawings = Drawings.new
23
23
  @is_chartsheet = true
24
24
  @chart = nil
25
25
  @charts = [1]
@@ -57,11 +57,39 @@ def assemble_xml_file # :nodoc:
57
57
  end
58
58
  end
59
59
 
60
- def protect(password = '', options = {})
60
+ def protect(password = '', user_options = nil, options = {})
61
+ # Objects are default on for chartsheets.
62
+ if user_options
63
+ if user_options.has_key?(:objects)
64
+ if ptrue?(user_options[:objects])
65
+ options[:objects] = 0
66
+ else
67
+ options[:objects] = 1
68
+ end
69
+ else
70
+ options[:objects] = 0
71
+ end
72
+
73
+ if user_options.has_key?(:content)
74
+ options[:content] = user_options[:content]
75
+ else
76
+ options[:content] = 1
77
+ end
78
+ else
79
+ options[:objects] = 0
80
+ options[:content] = 1
81
+ end
82
+
83
+ # Is objects and content are off then the chartsheet isn't locked.
84
+ # except if it has a password.
85
+ if password == '' && ptrue?(options[:objects]) && !ptrue?(options[:content])
86
+ return
87
+ end
88
+
61
89
  @chart.protection = 1
62
90
 
91
+ # Turn off worksheet defaults.
63
92
  options[:sheet] = 0
64
- options[:content] = 1
65
93
  options[:scenarios] = 1
66
94
 
67
95
  super(password, options)
@@ -148,9 +176,9 @@ def set_high_low_lines(*args)
148
176
  def prepare_chart(index, chart_id, drawing_id) # :nodoc:
149
177
  @chart.id = chart_id - 1
150
178
 
151
- drawing = Drawing.new
152
- @drawing = drawing
153
- @drawing.orientation = @page_setup.orientation
179
+ drawings = Drawings.new
180
+ @drawings = drawings
181
+ @drawings.orientation = @page_setup.orientation
154
182
 
155
183
  @external_drawing_links << [ '/drawing', "../drawings/drawing#{drawing_id}.xml" ]
156
184
 
@@ -4,6 +4,15 @@
4
4
 
5
5
  module Writexlsx
6
6
  class Drawing
7
+ attr_accessor :type, :dimensions, :width, :height, :name, :shape, :anchor
8
+
9
+ def initialize(type, dimensions, width, height, name, shape, anchor)
10
+ @type, @dimensions, @width, @height, @name, @shape, @anchor =
11
+ type, dimensions, width, height, name, shape, anchor
12
+ end
13
+ end
14
+
15
+ class Drawings
7
16
  include Writexlsx::Utility
8
17
 
9
18
  attr_writer :embedded, :orientation
@@ -32,10 +41,10 @@ def assemble_xml_file
32
41
  write_drawing_workspace do
33
42
  if @embedded
34
43
  index = 0
35
- @drawings.each do |dimensions|
44
+ @drawings.each do |drawing|
36
45
  # Write the xdr:twoCellAnchor element.
37
46
  index += 1
38
- write_two_cell_anchor(index, *(dimensions.flatten))
47
+ write_two_cell_anchor(index, drawing)
39
48
  end
40
49
  else
41
50
  # Write the xdr:absoluteAnchor element.
@@ -48,8 +57,8 @@ def assemble_xml_file
48
57
  #
49
58
  # Add a chart, image or shape sub object to the drawing.
50
59
  #
51
- def add_drawing_object(*args)
52
- @drawings << args.flatten
60
+ def add_drawing_object(drawing)
61
+ @drawings << drawing
53
62
  end
54
63
 
55
64
  private
@@ -71,14 +80,25 @@ def write_drawing_workspace
71
80
  # Write the <xdr:twoCellAnchor> element.
72
81
  #
73
82
  def write_two_cell_anchor(*args)
74
- index, type, col_from, row_from, col_from_offset, row_from_offset,
75
- col_to, row_to, col_to_offset, row_to_offset, col_absolute, row_absolute,
76
- width, height, description, shape = args
83
+ index, drawing = args
84
+
85
+ type = drawing.type
86
+ width = drawing.width
87
+ height = drawing.height
88
+ description = drawing.name
89
+ shape = drawing.shape
90
+ anchor = drawing.anchor
91
+ col_from, row_from, col_from_offset, row_from_offset,
92
+ col_to, row_to, col_to_offset, row_to_offset, col_absolute, row_absolute = drawing.dimensions
77
93
 
78
94
  attributes = []
79
95
 
80
96
  # Add attribute for images.
81
- attributes << [:editAs, 'oneCell'] if type == 2
97
+ if anchor == 2
98
+ attributes << [:editAs, 'oneCell']
99
+ elsif anchor == 3
100
+ attributes << [:editAs, 'absolute']
101
+ end
82
102
 
83
103
  # Add attribute for shapes.
84
104
  attributes << [:editAs, shape.edit_as] if shape && shape.edit_as
@@ -163,7 +163,7 @@ class Format
163
163
  include Writexlsx::Utility
164
164
 
165
165
  attr_reader :xf_index, :dxf_index, :num_format # :nodoc:
166
- attr_reader :underline, :font_script, :size, :theme, :font, :font_family, :hyperlink # :nodoc:
166
+ attr_reader :underline, :font_script, :size, :theme, :font, :font_family, :hyperlink, :xf_id # :nodoc:
167
167
  attr_reader :diag_type, :diag_color, :font_only, :color, :color_indexed # :nodoc:
168
168
  attr_reader :left, :left_color, :right, :right_color, :top, :top_color, :bottom, :bottom_color # :nodoc:
169
169
  attr_reader :font_scheme # :nodoc:
@@ -180,7 +180,7 @@ def initialize(formats, params = {}) # :nodoc:
180
180
  @xf_index = nil
181
181
  @dxf_index = nil
182
182
 
183
- @num_format = 0
183
+ @num_format = 'General'
184
184
  @num_format_index = 0
185
185
  @font_index = 0
186
186
  @font = 'Calibri'
@@ -200,6 +200,7 @@ def initialize(formats, params = {}) # :nodoc:
200
200
  @font_extend = 0
201
201
  @theme = 0
202
202
  @hyperlink = 0
203
+ @xf_id = 0
203
204
 
204
205
  @hidden = 0
205
206
  @locked = 1
@@ -396,7 +397,8 @@ def get_font_key
396
397
  @font,
397
398
  @italic,
398
399
  @size,
399
- @underline
400
+ @underline,
401
+ @theme
400
402
  ].join(':')
401
403
  end
402
404
 
@@ -476,13 +478,13 @@ def self.color(color_code)
476
478
 
477
479
  colors = Colors::COLORS
478
480
 
481
+ # Return the default color if nil,
482
+ return 0x00 unless color_code
483
+
479
484
  if color_code.respond_to?(:to_str)
480
485
  # Return RGB style colors for processing later.
481
486
  return color_code if color_code =~ /^#[0-9A-F]{6}$/i
482
487
 
483
- # Return the default color if undef,
484
- return 0x00 unless color_code
485
-
486
488
  # or the color string converted to an integer,
487
489
  return colors[color_code.downcase.to_sym] if colors[color_code.downcase.to_sym]
488
490
 
@@ -593,15 +595,15 @@ def set_rotation(rotation)
593
595
  end
594
596
 
595
597
  #
596
- # Set the properties for the hyperlink style. TODO. This doesn't currently
597
- # work. Fix it when styles are supported.
598
+ # Set the properties for the hyperlink style. This isn't a public method. To
599
+ # be fixed when styles are supported.
598
600
  #
599
- def set_hyperlink
600
- @hyperlink = 1
601
+ def set_hyperlink(hyperlink)
602
+ @xf_id = 1
601
603
 
602
604
  set_underline(1)
603
605
  set_theme(10)
604
- set_align('top')
606
+ @hyperlink = hyperlink
605
607
  end
606
608
 
607
609
  def set_font_info(fonts)
@@ -804,11 +806,11 @@ def xf_attributes
804
806
  ['fontId' , font_index],
805
807
  ['fillId' , fill_index],
806
808
  ['borderId', border_index],
807
- ['xfId' , 0]
809
+ ['xfId' , xf_id]
808
810
  ]
809
811
  attributes << ['applyNumberFormat', 1] if num_format_index > 0
810
812
  # Add applyFont attribute if XF format uses a font element.
811
- attributes << ['applyFont', 1] if font_index > 0
813
+ attributes << ['applyFont', 1] if font_index > 0 && !ptrue?(@hyperlink)
812
814
  # Add applyFill attribute if XF format uses a fill element.
813
815
  attributes << ['applyFill', 1] if fill_index > 0
814
816
  # Add applyBorder attribute if XF format uses a border element.
@@ -817,8 +819,10 @@ def xf_attributes
817
819
  # Check if XF format has alignment properties set.
818
820
  apply_align, align = get_align_properties
819
821
  # We can also have applyAlignment without a sub-element.
820
- attributes << ['applyAlignment', 1] if apply_align
821
- attributes << ['applyProtection', 1] if get_protection_properties
822
+ attributes << ['applyAlignment', 1] if apply_align || ptrue?(@hyperlink)
823
+ if get_protection_properties || ptrue?(hyperlink)
824
+ attributes << ['applyProtection', 1]
825
+ end
822
826
 
823
827
  attributes
824
828
  end