write_xlsx 0.86.0 → 0.97.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 (975) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +43 -0
  3. data/Changes +74 -0
  4. data/LICENSE.txt +1 -1
  5. data/README.md +4 -4
  6. data/examples/a_simple.rb +1 -6
  7. data/examples/chart_combined.rb +3 -1
  8. data/examples/conditional_format.rb +73 -46
  9. data/examples/demo.rb +1 -7
  10. data/examples/hyperlink1.rb +4 -11
  11. data/lib/write_xlsx/chart.rb +150 -192
  12. data/lib/write_xlsx/chart/axis.rb +33 -8
  13. data/lib/write_xlsx/chart/caption.rb +3 -1
  14. data/lib/write_xlsx/chart/pie.rb +2 -0
  15. data/lib/write_xlsx/chart/series.rb +37 -17
  16. data/lib/write_xlsx/format.rb +19 -11
  17. data/lib/write_xlsx/package/conditional_format.rb +351 -38
  18. data/lib/write_xlsx/package/content_types.rb +10 -0
  19. data/lib/write_xlsx/package/core.rb +8 -6
  20. data/lib/write_xlsx/package/custom.rb +125 -0
  21. data/lib/write_xlsx/package/packager.rb +26 -0
  22. data/lib/write_xlsx/package/styles.rb +53 -21
  23. data/lib/write_xlsx/package/table.rb +25 -4
  24. data/lib/write_xlsx/utility.rb +317 -32
  25. data/lib/write_xlsx/version.rb +1 -1
  26. data/lib/write_xlsx/workbook.rb +103 -7
  27. data/lib/write_xlsx/worksheet.rb +280 -30
  28. data/lib/write_xlsx/worksheet/cell_data.rb +21 -0
  29. data/lib/write_xlsx/worksheet/hyperlink.rb +4 -8
  30. data/test/chart/test_add_series.rb +11 -1
  31. data/test/chart/test_process_names.rb +1 -1
  32. data/test/chart/test_write_a_latin.rb +1 -1
  33. data/test/chart/test_write_auto.rb +1 -1
  34. data/test/chart/test_write_ax_id.rb +1 -1
  35. data/test/chart/test_write_ax_pos.rb +1 -1
  36. data/test/chart/test_write_cross_ax.rb +1 -1
  37. data/test/chart/test_write_crosses.rb +1 -1
  38. data/test/chart/test_write_d_lbls.rb +1 -1
  39. data/test/chart/test_write_format_code.rb +1 -1
  40. data/test/chart/test_write_idx.rb +1 -1
  41. data/test/chart/test_write_label_align.rb +1 -1
  42. data/test/chart/test_write_label_offset.rb +1 -1
  43. data/test/chart/test_write_lang.rb +1 -1
  44. data/test/chart/test_write_layout.rb +1 -1
  45. data/test/chart/test_write_legend.rb +1 -1
  46. data/test/chart/test_write_legend_pos.rb +1 -1
  47. data/test/chart/test_write_major_gridlines.rb +1 -1
  48. data/test/chart/test_write_marker.rb +1 -1
  49. data/test/chart/test_write_marker_size.rb +1 -1
  50. data/test/chart/test_write_marker_value.rb +1 -1
  51. data/test/chart/test_write_num_cache.rb +1 -1
  52. data/test/chart/test_write_number_format.rb +2 -3
  53. data/test/chart/test_write_order.rb +1 -1
  54. data/test/chart/test_write_orientation.rb +1 -1
  55. data/test/chart/test_write_page_margins.rb +1 -1
  56. data/test/chart/test_write_page_setup.rb +1 -1
  57. data/test/chart/test_write_plot_vis_only.rb +1 -1
  58. data/test/chart/test_write_pt.rb +1 -1
  59. data/test/chart/test_write_pt_count.rb +1 -1
  60. data/test/chart/test_write_series_formula.rb +1 -1
  61. data/test/chart/test_write_style.rb +1 -1
  62. data/test/chart/test_write_symbol.rb +1 -1
  63. data/test/chart/test_write_tick_lbl_pos.rb +1 -1
  64. data/test/chart/test_write_v.rb +1 -1
  65. data/test/chartsheet/test_chartsheet01.rb +1 -1
  66. data/test/drawing/test_drawing_chart_01.rb +1 -1
  67. data/test/drawing/test_drawing_image_01.rb +1 -1
  68. data/test/drawing/test_drawing_shape_01.rb +1 -1
  69. data/test/drawing/test_drawing_shape_02.rb +1 -1
  70. data/test/drawing/test_drawing_shape_03.rb +1 -1
  71. data/test/drawing/test_drawing_shape_04.rb +1 -1
  72. data/test/drawing/test_drawing_shape_05.rb +1 -1
  73. data/test/drawing/test_drawing_shape_06.rb +1 -1
  74. data/test/drawing/test_drawing_shape_07.rb +1 -1
  75. data/test/drawing/test_write_a_graphic_frame_locks.rb +1 -1
  76. data/test/drawing/test_write_c_chart.rb +1 -1
  77. data/test/drawing/test_write_c_nv_graphic_frame_pr.rb +1 -1
  78. data/test/drawing/test_write_c_nv_pr.rb +1 -1
  79. data/test/drawing/test_write_col.rb +1 -1
  80. data/test/drawing/test_write_col_off.rb +1 -1
  81. data/test/drawing/test_write_ext.rb +1 -1
  82. data/test/drawing/test_write_pos.rb +1 -1
  83. data/test/drawing/test_write_row.rb +1 -1
  84. data/test/drawing/test_write_row_off.rb +1 -1
  85. data/test/drawing/test_write_xfrm_extension.rb +1 -1
  86. data/test/drawing/test_write_xfrm_offset.rb +1 -1
  87. data/test/helper.rb +8 -3
  88. data/test/package/app/test_app01.rb +1 -1
  89. data/test/package/app/test_app02.rb +1 -1
  90. data/test/package/app/test_app03.rb +1 -1
  91. data/test/package/comments/test_write_text_t.rb +1 -1
  92. data/test/package/content_types/test_content_types.rb +1 -1
  93. data/test/package/content_types/test_write_default.rb +1 -1
  94. data/test/package/content_types/test_write_override.rb +1 -1
  95. data/test/package/core/test_core01.rb +1 -1
  96. data/test/package/core/test_core02.rb +1 -1
  97. data/test/package/relationships/test_relationships.rb +1 -1
  98. data/test/package/relationships/test_sheet_rels.rb +1 -1
  99. data/test/package/shared_strings/test_shared_strings01.rb +1 -1
  100. data/test/package/shared_strings/test_shared_strings02.rb +1 -1
  101. data/test/package/shared_strings/test_write_si.rb +1 -7
  102. data/test/package/styles/test_styles_01.rb +1 -1
  103. data/test/package/styles/test_styles_02.rb +1 -1
  104. data/test/package/styles/test_styles_03.rb +1 -1
  105. data/test/package/styles/test_styles_04.rb +1 -1
  106. data/test/package/styles/test_styles_05.rb +1 -1
  107. data/test/package/styles/test_styles_06.rb +1 -1
  108. data/test/package/styles/test_styles_07.rb +1 -1
  109. data/test/package/styles/test_styles_08.rb +1 -1
  110. data/test/package/styles/test_styles_09.rb +1 -1
  111. data/test/package/table/test_table01.rb +3 -3
  112. data/test/package/table/test_table02.rb +2 -2
  113. data/test/package/table/test_table03.rb +2 -2
  114. data/test/package/table/test_table04.rb +2 -2
  115. data/test/package/table/test_table05.rb +2 -2
  116. data/test/package/table/test_table06.rb +2 -2
  117. data/test/package/table/test_table07.rb +2 -2
  118. data/test/package/table/test_table08.rb +2 -2
  119. data/test/package/table/test_table09.rb +2 -2
  120. data/test/package/table/test_table10.rb +2 -2
  121. data/test/package/table/test_table11.rb +2 -2
  122. data/test/package/table/test_table12.rb +2 -2
  123. data/test/package/table/test_table13.rb +1 -1
  124. data/test/package/table/test_write_auto_filter.rb +1 -1
  125. data/test/package/table/test_write_table_column.rb +1 -1
  126. data/test/package/table/test_write_table_style_info.rb +1 -1
  127. data/test/package/vml/test_write_auto_fill.rb +1 -1
  128. data/test/package/vml/test_write_div.rb +1 -1
  129. data/test/package/vml/test_write_idmap.rb +1 -1
  130. data/test/package/vml/test_write_path.rb +1 -1
  131. data/test/package/vml/test_write_shapelayout.rb +1 -1
  132. data/test/package/vml/test_write_shapetype.rb +1 -1
  133. data/test/package/vml/test_write_stroke.rb +1 -1
  134. data/test/regression/_test_hyperlink31.rb +26 -0
  135. data/test/regression/disabled_test_vml04.rb +1 -1
  136. data/test/regression/images/zero_dpi.jpg +0 -0
  137. data/test/regression/test_array_formula01.rb +1 -1
  138. data/test/regression/test_array_formula02.rb +1 -1
  139. data/test/regression/test_autofilter00.rb +1 -1
  140. data/test/regression/test_autofilter01.rb +1 -1
  141. data/test/regression/test_autofilter02.rb +1 -1
  142. data/test/regression/test_autofilter03.rb +1 -1
  143. data/test/regression/test_autofilter04.rb +1 -1
  144. data/test/regression/test_autofilter05.rb +1 -1
  145. data/test/regression/test_autofilter06.rb +1 -1
  146. data/test/regression/test_autofilter07.rb +1 -1
  147. data/test/regression/test_button01.rb +1 -1
  148. data/test/regression/test_button02.rb +1 -1
  149. data/test/regression/test_button03.rb +1 -1
  150. data/test/regression/test_button04.rb +1 -1
  151. data/test/regression/test_button05.rb +1 -1
  152. data/test/regression/test_button06.rb +1 -1
  153. data/test/regression/test_button07.rb +1 -1
  154. data/test/regression/test_button08.rb +1 -1
  155. data/test/regression/test_button13.rb +1 -1
  156. data/test/regression/test_button14.rb +1 -1
  157. data/test/regression/test_chart_area01.rb +1 -1
  158. data/test/regression/test_chart_area02.rb +1 -1
  159. data/test/regression/test_chart_area03.rb +1 -1
  160. data/test/regression/test_chart_area04.rb +1 -1
  161. data/test/regression/test_chart_axis01.rb +1 -1
  162. data/test/regression/test_chart_axis02.rb +1 -1
  163. data/test/regression/test_chart_axis03.rb +1 -1
  164. data/test/regression/test_chart_axis04.rb +1 -1
  165. data/test/regression/test_chart_axis05.rb +1 -1
  166. data/test/regression/test_chart_axis06.rb +1 -1
  167. data/test/regression/test_chart_axis07.rb +1 -1
  168. data/test/regression/test_chart_axis08.rb +1 -1
  169. data/test/regression/test_chart_axis09.rb +1 -1
  170. data/test/regression/test_chart_axis10.rb +1 -1
  171. data/test/regression/test_chart_axis11.rb +1 -1
  172. data/test/regression/test_chart_axis12.rb +1 -1
  173. data/test/regression/test_chart_axis13.rb +1 -1
  174. data/test/regression/test_chart_axis14.rb +1 -1
  175. data/test/regression/test_chart_axis15.rb +1 -1
  176. data/test/regression/test_chart_axis16.rb +1 -1
  177. data/test/regression/test_chart_axis17.rb +1 -1
  178. data/test/regression/test_chart_axis18.rb +1 -1
  179. data/test/regression/test_chart_axis19.rb +1 -1
  180. data/test/regression/test_chart_axis20.rb +1 -1
  181. data/test/regression/test_chart_axis21.rb +1 -1
  182. data/test/regression/test_chart_axis22.rb +1 -1
  183. data/test/regression/test_chart_axis23.rb +1 -1
  184. data/test/regression/test_chart_axis24.rb +1 -1
  185. data/test/regression/test_chart_axis25.rb +1 -1
  186. data/test/regression/test_chart_axis26.rb +1 -1
  187. data/test/regression/test_chart_axis27.rb +1 -1
  188. data/test/regression/test_chart_axis28.rb +1 -1
  189. data/test/regression/test_chart_axis29.rb +1 -1
  190. data/test/regression/test_chart_axis30.rb +1 -1
  191. data/test/regression/test_chart_axis31.rb +1 -1
  192. data/test/regression/test_chart_axis32.rb +1 -1
  193. data/test/regression/test_chart_axis33.rb +1 -1
  194. data/test/regression/test_chart_axis34.rb +1 -1
  195. data/test/regression/test_chart_axis35.rb +1 -1
  196. data/test/regression/test_chart_axis36.rb +1 -1
  197. data/test/regression/test_chart_axis37.rb +1 -1
  198. data/test/regression/test_chart_axis38.rb +1 -1
  199. data/test/regression/test_chart_axis39.rb +1 -1
  200. data/test/regression/test_chart_axis40.rb +44 -0
  201. data/test/regression/test_chart_axis41.rb +48 -0
  202. data/test/regression/test_chart_bar01.rb +1 -1
  203. data/test/regression/test_chart_bar02.rb +1 -1
  204. data/test/regression/test_chart_bar03.rb +1 -1
  205. data/test/regression/test_chart_bar04.rb +1 -1
  206. data/test/regression/test_chart_bar05.rb +1 -1
  207. data/test/regression/test_chart_bar06.rb +1 -1
  208. data/test/regression/test_chart_bar07.rb +1 -1
  209. data/test/regression/test_chart_bar08.rb +4 -1
  210. data/test/regression/test_chart_bar09.rb +1 -1
  211. data/test/regression/test_chart_bar10.rb +1 -1
  212. data/test/regression/test_chart_bar11.rb +4 -1
  213. data/test/regression/test_chart_bar12.rb +1 -1
  214. data/test/regression/test_chart_bar13.rb +1 -1
  215. data/test/regression/test_chart_bar14.rb +4 -1
  216. data/test/regression/test_chart_bar15.rb +1 -1
  217. data/test/regression/test_chart_bar16.rb +1 -1
  218. data/test/regression/test_chart_bar17.rb +1 -1
  219. data/test/regression/test_chart_bar18.rb +1 -1
  220. data/test/regression/test_chart_bar19.rb +1 -1
  221. data/test/regression/test_chart_bar20.rb +1 -1
  222. data/test/regression/test_chart_bar21.rb +1 -1
  223. data/test/regression/test_chart_bar22.rb +1 -1
  224. data/test/regression/test_chart_bar23.rb +1 -1
  225. data/test/regression/test_chart_bar24.rb +1 -1
  226. data/test/regression/test_chart_blank01.rb +1 -1
  227. data/test/regression/test_chart_blank02.rb +1 -1
  228. data/test/regression/test_chart_blank03.rb +1 -1
  229. data/test/regression/test_chart_blank04.rb +1 -1
  230. data/test/regression/test_chart_blank05.rb +1 -1
  231. data/test/regression/test_chart_blank06.rb +1 -1
  232. data/test/regression/test_chart_chartarea01.rb +1 -1
  233. data/test/regression/test_chart_chartarea02.rb +1 -1
  234. data/test/regression/test_chart_chartarea03.rb +1 -1
  235. data/test/regression/test_chart_chartarea04.rb +1 -1
  236. data/test/regression/test_chart_chartarea05.rb +17 -18
  237. data/test/regression/test_chart_chartarea06.rb +49 -0
  238. data/test/regression/test_chart_clustered01.rb +1 -1
  239. data/test/regression/test_chart_column01.rb +1 -1
  240. data/test/regression/test_chart_column02.rb +1 -1
  241. data/test/regression/test_chart_column03.rb +1 -1
  242. data/test/regression/test_chart_column04.rb +1 -1
  243. data/test/regression/test_chart_column05.rb +1 -1
  244. data/test/regression/test_chart_column06.rb +1 -1
  245. data/test/regression/test_chart_column07.rb +1 -1
  246. data/test/regression/test_chart_column08.rb +1 -1
  247. data/test/regression/test_chart_column09.rb +1 -1
  248. data/test/regression/test_chart_column10.rb +1 -1
  249. data/test/regression/test_chart_column11.rb +1 -1
  250. data/test/regression/test_chart_column12.rb +1 -1
  251. data/test/regression/test_chart_combined01.rb +1 -1
  252. data/test/regression/test_chart_combined02.rb +1 -1
  253. data/test/regression/test_chart_combined03.rb +1 -1
  254. data/test/regression/test_chart_combined04.rb +1 -1
  255. data/test/regression/test_chart_combined05.rb +1 -1
  256. data/test/regression/test_chart_combined06.rb +1 -1
  257. data/test/regression/test_chart_combined07.rb +1 -1
  258. data/test/regression/test_chart_combined08.rb +1 -1
  259. data/test/regression/test_chart_combined09.rb +50 -0
  260. data/test/regression/test_chart_crossing01.rb +1 -1
  261. data/test/regression/test_chart_crossing02.rb +1 -1
  262. data/test/regression/test_chart_crossing03.rb +1 -1
  263. data/test/regression/test_chart_crossing04.rb +1 -1
  264. data/test/regression/test_chart_data_labels01.rb +1 -1
  265. data/test/regression/test_chart_data_labels02.rb +1 -1
  266. data/test/regression/test_chart_data_labels03.rb +1 -1
  267. data/test/regression/test_chart_data_labels04.rb +1 -1
  268. data/test/regression/test_chart_data_labels05.rb +1 -1
  269. data/test/regression/test_chart_data_labels06.rb +1 -1
  270. data/test/regression/test_chart_data_labels07.rb +1 -1
  271. data/test/regression/test_chart_data_labels08.rb +1 -1
  272. data/test/regression/test_chart_data_labels09.rb +1 -1
  273. data/test/regression/test_chart_data_labels10.rb +1 -1
  274. data/test/regression/test_chart_data_labels11.rb +1 -1
  275. data/test/regression/test_chart_data_labels12.rb +1 -1
  276. data/test/regression/test_chart_data_labels13.rb +1 -1
  277. data/test/regression/test_chart_data_labels14.rb +1 -1
  278. data/test/regression/test_chart_data_labels15.rb +1 -1
  279. data/test/regression/test_chart_data_labels16.rb +1 -1
  280. data/test/regression/test_chart_data_labels17.rb +1 -1
  281. data/test/regression/test_chart_data_labels18.rb +1 -1
  282. data/test/regression/test_chart_data_labels19.rb +1 -1
  283. data/test/regression/test_chart_data_labels20.rb +1 -1
  284. data/test/regression/test_chart_data_labels21.rb +1 -1
  285. data/test/regression/test_chart_data_labels22.rb +1 -1
  286. data/test/regression/test_chart_data_labels23.rb +1 -1
  287. data/test/regression/test_chart_data_labels24.rb +1 -1
  288. data/test/regression/test_chart_data_labels25.rb +61 -0
  289. data/test/regression/test_chart_date01.rb +1 -1
  290. data/test/regression/test_chart_date02.rb +1 -1
  291. data/test/regression/test_chart_date03.rb +1 -1
  292. data/test/regression/test_chart_date04.rb +1 -1
  293. data/test/regression/test_chart_date05.rb +1 -1
  294. data/test/regression/test_chart_display_units01.rb +1 -1
  295. data/test/regression/test_chart_display_units02.rb +1 -1
  296. data/test/regression/test_chart_display_units03.rb +1 -1
  297. data/test/regression/test_chart_display_units04.rb +1 -1
  298. data/test/regression/test_chart_display_units05.rb +1 -1
  299. data/test/regression/test_chart_display_units06.rb +1 -1
  300. data/test/regression/test_chart_display_units07.rb +1 -1
  301. data/test/regression/test_chart_display_units08.rb +1 -1
  302. data/test/regression/test_chart_display_units09.rb +1 -1
  303. data/test/regression/test_chart_display_units10.rb +1 -1
  304. data/test/regression/test_chart_display_units11.rb +1 -1
  305. data/test/regression/test_chart_display_units12.rb +1 -1
  306. data/test/regression/test_chart_doughnut01.rb +1 -1
  307. data/test/regression/test_chart_doughnut02.rb +1 -1
  308. data/test/regression/test_chart_doughnut03.rb +1 -1
  309. data/test/regression/test_chart_doughnut04.rb +1 -1
  310. data/test/regression/test_chart_doughnut05.rb +1 -1
  311. data/test/regression/test_chart_doughnut06.rb +1 -1
  312. data/test/regression/test_chart_drop_lines01.rb +1 -1
  313. data/test/regression/test_chart_drop_lines02.rb +1 -1
  314. data/test/regression/test_chart_drop_lines03.rb +1 -1
  315. data/test/regression/test_chart_drop_lines04.rb +1 -1
  316. data/test/regression/test_chart_errorbars01.rb +1 -1
  317. data/test/regression/test_chart_errorbars02.rb +1 -1
  318. data/test/regression/test_chart_errorbars03.rb +1 -1
  319. data/test/regression/test_chart_errorbars04.rb +1 -1
  320. data/test/regression/test_chart_errorbars05.rb +1 -1
  321. data/test/regression/test_chart_errorbars06.rb +1 -1
  322. data/test/regression/test_chart_errorbars07.rb +1 -1
  323. data/test/regression/test_chart_errorbars08.rb +1 -1
  324. data/test/regression/test_chart_errorbars09.rb +1 -1
  325. data/test/regression/test_chart_errorbars10.rb +1 -1
  326. data/test/regression/test_chart_font01.rb +1 -1
  327. data/test/regression/test_chart_font02.rb +1 -1
  328. data/test/regression/test_chart_font03.rb +1 -1
  329. data/test/regression/test_chart_font04.rb +1 -1
  330. data/test/regression/test_chart_font05.rb +1 -1
  331. data/test/regression/test_chart_font06.rb +1 -1
  332. data/test/regression/test_chart_font07.rb +1 -1
  333. data/test/regression/test_chart_font08.rb +1 -1
  334. data/test/regression/test_chart_font09.rb +1 -1
  335. data/test/regression/test_chart_format01.rb +1 -1
  336. data/test/regression/test_chart_format02.rb +1 -1
  337. data/test/regression/test_chart_format03.rb +1 -1
  338. data/test/regression/test_chart_format04.rb +1 -1
  339. data/test/regression/test_chart_format05.rb +1 -1
  340. data/test/regression/test_chart_format06.rb +1 -1
  341. data/test/regression/test_chart_format07.rb +1 -1
  342. data/test/regression/test_chart_format08.rb +1 -1
  343. data/test/regression/test_chart_format09.rb +1 -1
  344. data/test/regression/test_chart_format10.rb +1 -1
  345. data/test/regression/test_chart_format11.rb +1 -1
  346. data/test/regression/test_chart_format12.rb +1 -1
  347. data/test/regression/test_chart_format13.rb +1 -1
  348. data/test/regression/test_chart_format14.rb +1 -1
  349. data/test/regression/test_chart_format15.rb +1 -1
  350. data/test/regression/test_chart_format16.rb +1 -1
  351. data/test/regression/test_chart_format17.rb +1 -1
  352. data/test/regression/test_chart_format18.rb +1 -1
  353. data/test/regression/test_chart_format19.rb +1 -1
  354. data/test/regression/test_chart_format20.rb +1 -1
  355. data/test/regression/test_chart_format21.rb +47 -0
  356. data/test/regression/test_chart_format22.rb +47 -0
  357. data/test/regression/test_chart_format23.rb +47 -0
  358. data/test/regression/test_chart_format24.rb +52 -0
  359. data/test/regression/test_chart_format25.rb +46 -0
  360. data/test/regression/test_chart_format26.rb +48 -0
  361. data/test/regression/test_chart_format27.rb +58 -0
  362. data/test/regression/test_chart_format28.rb +52 -0
  363. data/test/regression/test_chart_format29.rb +59 -0
  364. data/test/regression/test_chart_format30.rb +53 -0
  365. data/test/regression/test_chart_format31.rb +60 -0
  366. data/test/regression/test_chart_gap01.rb +1 -1
  367. data/test/regression/test_chart_gap02.rb +1 -1
  368. data/test/regression/test_chart_gap03.rb +1 -1
  369. data/test/regression/test_chart_gap04.rb +1 -1
  370. data/test/regression/test_chart_gap05.rb +1 -1
  371. data/test/regression/test_chart_gradient01.rb +1 -1
  372. data/test/regression/test_chart_gradient02.rb +1 -1
  373. data/test/regression/test_chart_gradient03.rb +1 -1
  374. data/test/regression/test_chart_gradient04.rb +1 -1
  375. data/test/regression/test_chart_gradient05.rb +1 -1
  376. data/test/regression/test_chart_gradient06.rb +1 -1
  377. data/test/regression/test_chart_gradient07.rb +1 -1
  378. data/test/regression/test_chart_gradient08.rb +1 -1
  379. data/test/regression/test_chart_gradient09.rb +1 -1
  380. data/test/regression/test_chart_gradient10.rb +1 -1
  381. data/test/regression/test_chart_gradient11.rb +1 -1
  382. data/test/regression/test_chart_gradient12.rb +1 -1
  383. data/test/regression/test_chart_gradient13.rb +1 -1
  384. data/test/regression/test_chart_gridlines01.rb +1 -1
  385. data/test/regression/test_chart_gridlines02.rb +1 -1
  386. data/test/regression/test_chart_gridlines03.rb +1 -1
  387. data/test/regression/test_chart_gridlines04.rb +5 -4
  388. data/test/regression/test_chart_gridlines05.rb +1 -1
  389. data/test/regression/test_chart_gridlines06.rb +1 -1
  390. data/test/regression/test_chart_gridlines07.rb +1 -1
  391. data/test/regression/test_chart_gridlines08.rb +9 -12
  392. data/test/regression/test_chart_gridlines09.rb +1 -1
  393. data/test/regression/test_chart_layout01.rb +1 -1
  394. data/test/regression/test_chart_layout02.rb +1 -1
  395. data/test/regression/test_chart_layout03.rb +1 -1
  396. data/test/regression/test_chart_layout04.rb +1 -1
  397. data/test/regression/test_chart_layout05.rb +1 -1
  398. data/test/regression/test_chart_layout06.rb +1 -1
  399. data/test/regression/test_chart_layout07.rb +1 -1
  400. data/test/regression/test_chart_layout08.rb +1 -1
  401. data/test/regression/test_chart_legend01.rb +1 -1
  402. data/test/regression/test_chart_legend02.rb +1 -1
  403. data/test/regression/test_chart_line01.rb +1 -1
  404. data/test/regression/test_chart_line02.rb +1 -1
  405. data/test/regression/test_chart_line03.rb +1 -1
  406. data/test/regression/test_chart_line04.rb +1 -1
  407. data/test/regression/test_chart_name01.rb +1 -1
  408. data/test/regression/test_chart_name02.rb +1 -1
  409. data/test/regression/test_chart_name03.rb +1 -1
  410. data/test/regression/test_chart_order01.rb +1 -1
  411. data/test/regression/test_chart_order02.rb +1 -1
  412. data/test/regression/test_chart_order03.rb +1 -1
  413. data/test/regression/test_chart_pattern01.rb +49 -0
  414. data/test/regression/test_chart_pattern02.rb +106 -0
  415. data/test/regression/test_chart_pattern03.rb +105 -0
  416. data/test/regression/test_chart_pattern04.rb +105 -0
  417. data/test/regression/test_chart_pattern05.rb +105 -0
  418. data/test/regression/test_chart_pattern06.rb +105 -0
  419. data/test/regression/test_chart_pattern07.rb +105 -0
  420. data/test/regression/test_chart_pattern08.rb +105 -0
  421. data/test/regression/test_chart_pattern09.rb +57 -0
  422. data/test/regression/test_chart_pattern10.rb +57 -0
  423. data/test/regression/test_chart_pie01.rb +1 -1
  424. data/test/regression/test_chart_pie02.rb +1 -1
  425. data/test/regression/test_chart_pie03.rb +1 -1
  426. data/test/regression/test_chart_pie04.rb +1 -1
  427. data/test/regression/test_chart_pie05.rb +1 -1
  428. data/test/regression/test_chart_points01.rb +1 -1
  429. data/test/regression/test_chart_points02.rb +1 -1
  430. data/test/regression/test_chart_points03.rb +1 -1
  431. data/test/regression/test_chart_points04.rb +1 -1
  432. data/test/regression/test_chart_points05.rb +1 -1
  433. data/test/regression/test_chart_points06.rb +1 -1
  434. data/test/regression/test_chart_radar01.rb +1 -1
  435. data/test/regression/test_chart_radar02.rb +1 -1
  436. data/test/regression/test_chart_radar03.rb +1 -1
  437. data/test/regression/test_chart_scatter01.rb +1 -1
  438. data/test/regression/test_chart_scatter02.rb +1 -1
  439. data/test/regression/test_chart_scatter03.rb +1 -1
  440. data/test/regression/test_chart_scatter04.rb +1 -1
  441. data/test/regression/test_chart_scatter05.rb +1 -1
  442. data/test/regression/test_chart_scatter06.rb +1 -1
  443. data/test/regression/test_chart_scatter07.rb +1 -1
  444. data/test/regression/test_chart_scatter08.rb +1 -1
  445. data/test/regression/test_chart_scatter09.rb +1 -1
  446. data/test/regression/test_chart_scatter10.rb +1 -1
  447. data/test/regression/test_chart_scatter11.rb +1 -1
  448. data/test/regression/test_chart_scatter12.rb +1 -1
  449. data/test/regression/test_chart_scatter13.rb +1 -1
  450. data/test/regression/test_chart_scatter14.rb +1 -1
  451. data/test/regression/test_chart_scatter15.rb +1 -1
  452. data/test/regression/test_chart_size01.rb +1 -1
  453. data/test/regression/test_chart_size02.rb +1 -1
  454. data/test/regression/test_chart_size03.rb +1 -1
  455. data/test/regression/test_chart_size04.rb +1 -1
  456. data/test/regression/test_chart_size05.rb +1 -1
  457. data/test/regression/test_chart_sparse01.rb +1 -1
  458. data/test/regression/test_chart_stock01.rb +1 -1
  459. data/test/regression/test_chart_stock02.rb +1 -1
  460. data/test/regression/test_chart_str01.rb +1 -1
  461. data/test/regression/test_chart_str02.rb +1 -1
  462. data/test/regression/test_chart_table01.rb +1 -1
  463. data/test/regression/test_chart_table02.rb +1 -1
  464. data/test/regression/test_chart_table03.rb +56 -0
  465. data/test/regression/test_chart_title01.rb +1 -1
  466. data/test/regression/test_chart_title02.rb +1 -1
  467. data/test/regression/test_chartsheet01.rb +1 -1
  468. data/test/regression/test_chartsheet02.rb +1 -1
  469. data/test/regression/test_chartsheet03.rb +1 -1
  470. data/test/regression/test_chartsheet04.rb +1 -1
  471. data/test/regression/test_chartsheet05.rb +1 -1
  472. data/test/regression/test_chartsheet06.rb +1 -1
  473. data/test/regression/test_chartsheet07.rb +1 -1
  474. data/test/regression/test_chartsheet08.rb +1 -1
  475. data/test/regression/test_chartsheet09.rb +1 -1
  476. data/test/regression/test_comment01.rb +1 -1
  477. data/test/regression/test_comment02.rb +1 -1
  478. data/test/regression/test_comment03.rb +1 -1
  479. data/test/regression/test_comment04.rb +1 -1
  480. data/test/regression/test_comment06.rb +1 -1
  481. data/test/regression/test_comment07.rb +1 -1
  482. data/test/regression/test_comment08.rb +1 -1
  483. data/test/regression/test_comment09.rb +1 -1
  484. data/test/regression/test_comment10.rb +1 -1
  485. data/test/regression/test_comment11.rb +1 -1
  486. data/test/regression/test_comment12.rb +1 -1
  487. data/test/regression/test_cond_format01.rb +1 -1
  488. data/test/regression/test_cond_format02.rb +1 -1
  489. data/test/regression/test_cond_format03.rb +1 -1
  490. data/test/regression/test_cond_format04.rb +1 -1
  491. data/test/regression/test_cond_format05.rb +1 -1
  492. data/test/regression/test_cond_format06.rb +1 -1
  493. data/test/regression/test_cond_format07.rb +1 -1
  494. data/test/regression/test_cond_format08.rb +1 -1
  495. data/test/regression/test_cond_format10.rb +1 -1
  496. data/test/regression/test_cond_format11.rb +1 -1
  497. data/test/regression/test_cond_format12.rb +1 -1
  498. data/test/regression/test_cond_format13.rb +1 -1
  499. data/test/regression/test_cond_format14.rb +42 -0
  500. data/test/regression/test_cond_format15.rb +53 -0
  501. data/test/regression/test_cond_format16.rb +53 -0
  502. data/test/regression/test_cond_format17.rb +37 -0
  503. data/test/regression/test_cond_format18.rb +136 -0
  504. data/test/regression/test_custom_colors01.rb +1 -1
  505. data/test/regression/test_data_validation01.rb +1 -1
  506. data/test/regression/test_data_validation02.rb +1 -1
  507. data/test/regression/test_data_validation03.rb +1 -1
  508. data/test/regression/test_data_validation04.rb +2 -2
  509. data/test/regression/test_data_validation05.rb +2 -2
  510. data/test/regression/test_data_validation08.rb +2 -2
  511. data/test/regression/test_date_1904_01.rb +2 -2
  512. data/test/regression/test_date_1904_02.rb +1 -1
  513. data/test/regression/test_date_examples01.rb +1 -1
  514. data/test/regression/test_default_format01.rb +1 -1
  515. data/test/regression/test_default_row01.rb +1 -1
  516. data/test/regression/test_default_row02.rb +1 -1
  517. data/test/regression/test_default_row03.rb +1 -1
  518. data/test/regression/test_default_row04.rb +1 -1
  519. data/test/regression/test_default_row05.rb +32 -0
  520. data/test/regression/test_defined_name01.rb +1 -1
  521. data/test/regression/test_defined_name02.rb +1 -1
  522. data/test/regression/test_defined_name03.rb +1 -1
  523. data/test/regression/test_defined_name04.rb +15 -15
  524. data/test/regression/test_escapes01.rb +1 -1
  525. data/test/regression/test_escapes02.rb +1 -1
  526. data/test/regression/test_escapes03.rb +1 -1
  527. data/test/regression/test_escapes04.rb +4 -1
  528. data/test/regression/test_escapes05.rb +4 -1
  529. data/test/regression/test_escapes06.rb +1 -1
  530. data/test/regression/test_escapes07.rb +4 -1
  531. data/test/regression/test_escapes08.rb +4 -1
  532. data/test/regression/test_excel2003_style01.rb +1 -1
  533. data/test/regression/test_excel2003_style02.rb +1 -1
  534. data/test/regression/test_excel2003_style03.rb +1 -1
  535. data/test/regression/test_excel2003_style04.rb +1 -1
  536. data/test/regression/test_excel2003_style05.rb +1 -1
  537. data/test/regression/test_excel2003_style06.rb +1 -1
  538. data/test/regression/test_excel2003_style07.rb +1 -1
  539. data/test/regression/test_excel2003_style08.rb +1 -1
  540. data/test/regression/test_firstsheet01.rb +1 -1
  541. data/test/regression/test_fit_to_pages01.rb +1 -1
  542. data/test/regression/test_fit_to_pages02.rb +1 -1
  543. data/test/regression/test_fit_to_pages03.rb +1 -1
  544. data/test/regression/test_fit_to_pages04.rb +1 -1
  545. data/test/regression/test_fit_to_pages05.rb +1 -1
  546. data/test/regression/test_format01.rb +1 -1
  547. data/test/regression/test_format02.rb +1 -1
  548. data/test/regression/test_format03.rb +1 -1
  549. data/test/regression/test_format04.rb +1 -1
  550. data/test/regression/test_format05.rb +1 -1
  551. data/test/regression/test_format11.rb +1 -1
  552. data/test/regression/test_format12.rb +1 -1
  553. data/test/regression/test_format13.rb +31 -0
  554. data/test/regression/test_format14.rb +26 -0
  555. data/test/regression/test_formula_results01.rb +1 -1
  556. data/test/regression/test_gridlines01.rb +1 -1
  557. data/test/regression/test_header01.rb +1 -1
  558. data/test/regression/test_header02.rb +1 -1
  559. data/test/regression/test_header03.rb +1 -1
  560. data/test/regression/test_header_image01.rb +1 -1
  561. data/test/regression/test_header_image02.rb +1 -1
  562. data/test/regression/test_header_image03.rb +1 -1
  563. data/test/regression/test_header_image04.rb +1 -1
  564. data/test/regression/test_header_image05.rb +1 -1
  565. data/test/regression/test_header_image06.rb +1 -1
  566. data/test/regression/test_header_image07.rb +1 -1
  567. data/test/regression/test_header_image08.rb +1 -1
  568. data/test/regression/test_header_image09.rb +1 -1
  569. data/test/regression/test_header_image10.rb +1 -1
  570. data/test/regression/test_header_image11.rb +1 -1
  571. data/test/regression/test_header_image12.rb +1 -1
  572. data/test/regression/test_header_image13.rb +1 -1
  573. data/test/regression/test_header_image14.rb +1 -1
  574. data/test/regression/test_hide01.rb +1 -1
  575. data/test/regression/test_hyperlink01.rb +4 -1
  576. data/test/regression/test_hyperlink02.rb +4 -1
  577. data/test/regression/test_hyperlink03.rb +5 -1
  578. data/test/regression/test_hyperlink04.rb +4 -1
  579. data/test/regression/test_hyperlink05.rb +4 -1
  580. data/test/regression/test_hyperlink06.rb +4 -1
  581. data/test/regression/test_hyperlink07.rb +4 -1
  582. data/test/regression/test_hyperlink08.rb +4 -1
  583. data/test/regression/test_hyperlink09.rb +4 -1
  584. data/test/regression/test_hyperlink10.rb +4 -1
  585. data/test/regression/test_hyperlink11.rb +4 -1
  586. data/test/regression/test_hyperlink12.rb +4 -1
  587. data/test/regression/test_hyperlink13.rb +4 -1
  588. data/test/regression/test_hyperlink14.rb +4 -1
  589. data/test/regression/test_hyperlink15.rb +4 -1
  590. data/test/regression/test_hyperlink16.rb +4 -1
  591. data/test/regression/test_hyperlink17.rb +4 -1
  592. data/test/regression/test_hyperlink18.rb +4 -1
  593. data/test/regression/test_hyperlink20.rb +4 -1
  594. data/test/regression/test_hyperlink21.rb +4 -1
  595. data/test/regression/test_hyperlink22.rb +4 -1
  596. data/test/regression/test_hyperlink23.rb +4 -1
  597. data/test/regression/test_hyperlink24.rb +4 -1
  598. data/test/regression/test_hyperlink25.rb +30 -0
  599. data/test/regression/test_hyperlink26.rb +30 -0
  600. data/test/regression/test_hyperlink27.rb +27 -0
  601. data/test/regression/test_hyperlink28.rb +50 -0
  602. data/test/regression/test_hyperlink29.rb +27 -0
  603. data/test/regression/test_hyperlink30.rb +36 -0
  604. data/test/regression/test_image01.rb +1 -1
  605. data/test/regression/test_image02.rb +1 -1
  606. data/test/regression/test_image03.rb +1 -1
  607. data/test/regression/test_image04.rb +1 -1
  608. data/test/regression/test_image05.rb +1 -1
  609. data/test/regression/test_image06.rb +1 -1
  610. data/test/regression/test_image07.rb +1 -1
  611. data/test/regression/test_image08.rb +1 -1
  612. data/test/regression/test_image09.rb +1 -1
  613. data/test/regression/test_image10.rb +1 -1
  614. data/test/regression/test_image11.rb +1 -1
  615. data/test/regression/test_image12.rb +1 -1
  616. data/test/regression/test_image13.rb +1 -1
  617. data/test/regression/test_image14.rb +1 -1
  618. data/test/regression/test_image15.rb +1 -1
  619. data/test/regression/test_image16.rb +1 -1
  620. data/test/regression/test_image17.rb +1 -1
  621. data/test/regression/test_image18.rb +1 -1
  622. data/test/regression/test_image19.rb +1 -1
  623. data/test/regression/test_image22.rb +1 -1
  624. data/test/regression/test_image23.rb +1 -1
  625. data/test/regression/test_image24.rb +1 -1
  626. data/test/regression/test_image25.rb +1 -1
  627. data/test/regression/test_image26.rb +1 -1
  628. data/test/regression/test_image27.rb +1 -1
  629. data/test/regression/test_image28.rb +2 -2
  630. data/test/regression/test_image29.rb +2 -2
  631. data/test/regression/test_image30.rb +1 -1
  632. data/test/regression/test_image31.rb +1 -1
  633. data/test/regression/test_image32.rb +1 -1
  634. data/test/regression/test_image33.rb +2 -2
  635. data/test/regression/test_image35.rb +26 -0
  636. data/test/regression/test_landscape01.rb +1 -1
  637. data/test/regression/test_macro01.rb +1 -1
  638. data/test/regression/test_merge_cells01.rb +1 -1
  639. data/test/regression/test_merge_range01.rb +1 -1
  640. data/test/regression/test_merge_range02.rb +1 -1
  641. data/test/regression/test_merge_range03.rb +1 -1
  642. data/test/regression/test_merge_range04.rb +1 -1
  643. data/test/regression/test_merge_range05.rb +1 -1
  644. data/test/regression/test_outline01.rb +1 -1
  645. data/test/regression/test_outline02.rb +1 -1
  646. data/test/regression/test_outline03.rb +1 -1
  647. data/test/regression/test_outline04.rb +1 -1
  648. data/test/regression/test_outline05.rb +1 -1
  649. data/test/regression/test_outline06.rb +1 -1
  650. data/test/regression/test_page_breaks01.rb +1 -1
  651. data/test/regression/test_page_breaks02.rb +1 -1
  652. data/test/regression/test_page_breaks03.rb +1 -1
  653. data/test/regression/test_page_breaks04.rb +1 -1
  654. data/test/regression/test_page_breaks05.rb +1 -1
  655. data/test/regression/test_page_breaks06.rb +1 -1
  656. data/test/regression/test_page_view01.rb +1 -1
  657. data/test/regression/test_panes01.rb +1 -1
  658. data/test/regression/test_print_across01.rb +1 -1
  659. data/test/regression/test_print_area01.rb +1 -1
  660. data/test/regression/test_print_area02.rb +1 -1
  661. data/test/regression/test_print_area03.rb +1 -1
  662. data/test/regression/test_print_area04.rb +1 -1
  663. data/test/regression/test_print_area05.rb +1 -1
  664. data/test/regression/test_print_area06.rb +1 -1
  665. data/test/regression/test_print_area07.rb +1 -1
  666. data/test/regression/test_print_options01.rb +1 -1
  667. data/test/regression/test_print_options02.rb +1 -1
  668. data/test/regression/test_print_options03.rb +1 -1
  669. data/test/regression/test_print_options04.rb +1 -1
  670. data/test/regression/test_print_options05.rb +1 -1
  671. data/test/regression/test_print_options06.rb +1 -1
  672. data/test/regression/test_print_options07.rb +1 -1
  673. data/test/regression/test_print_scale01.rb +1 -1
  674. data/test/regression/test_print_scale02.rb +1 -1
  675. data/test/regression/test_properties01.rb +2 -5
  676. data/test/regression/test_properties02.rb +2 -5
  677. data/test/regression/test_properties03.rb +26 -0
  678. data/test/regression/test_properties04.rb +61 -0
  679. data/test/regression/test_properties05.rb +30 -0
  680. data/test/regression/test_protect01.rb +1 -1
  681. data/test/regression/test_protect02.rb +1 -1
  682. data/test/regression/test_protect03.rb +1 -1
  683. data/test/regression/test_quote_name01.rb +1 -1
  684. data/test/regression/test_quote_name03.rb +1 -1
  685. data/test/regression/test_quote_name04.rb +1 -1
  686. data/test/regression/test_repeat01.rb +1 -1
  687. data/test/regression/test_repeat02.rb +1 -1
  688. data/test/regression/test_repeat03.rb +1 -1
  689. data/test/regression/test_repeat04.rb +1 -1
  690. data/test/regression/test_repeat05.rb +1 -1
  691. data/test/regression/test_rich_string01.rb +1 -1
  692. data/test/regression/test_rich_string02.rb +1 -1
  693. data/test/regression/test_rich_string03.rb +1 -1
  694. data/test/regression/test_rich_string04.rb +1 -1
  695. data/test/regression/test_rich_string05.rb +1 -1
  696. data/test/regression/test_rich_string06.rb +1 -1
  697. data/test/regression/test_rich_string07.rb +1 -1
  698. data/test/regression/test_rich_string08.rb +1 -1
  699. data/test/regression/test_rich_string09.rb +1 -1
  700. data/test/regression/test_rich_string10.rb +1 -1
  701. data/test/regression/test_rich_string11.rb +1 -1
  702. data/test/regression/test_rich_string12.rb +1 -1
  703. data/test/regression/test_row_col_format01.rb +1 -1
  704. data/test/regression/test_row_col_format02.rb +1 -1
  705. data/test/regression/test_row_col_format03.rb +1 -1
  706. data/test/regression/test_row_col_format04.rb +1 -1
  707. data/test/regression/test_row_col_format05.rb +1 -1
  708. data/test/regression/test_row_col_format06.rb +1 -1
  709. data/test/regression/test_row_col_format07.rb +1 -1
  710. data/test/regression/test_row_col_format08.rb +1 -1
  711. data/test/regression/test_row_col_format09.rb +1 -1
  712. data/test/regression/test_row_col_format10.rb +1 -1
  713. data/test/regression/test_row_col_format11.rb +1 -1
  714. data/test/regression/test_row_col_format12.rb +1 -1
  715. data/test/regression/test_row_col_format13.rb +1 -1
  716. data/test/regression/test_row_col_format14.rb +1 -1
  717. data/test/regression/test_selection01.rb +1 -1
  718. data/test/regression/test_selection02.rb +1 -1
  719. data/test/regression/test_set_column01.rb +1 -1
  720. data/test/regression/test_set_column02.rb +1 -1
  721. data/test/regression/test_set_column03.rb +1 -1
  722. data/test/regression/test_set_column04.rb +1 -1
  723. data/test/regression/test_set_column05.rb +1 -1
  724. data/test/regression/test_set_column06.rb +1 -1
  725. data/test/regression/test_set_column07.rb +1 -1
  726. data/test/regression/test_set_column08.rb +1 -1
  727. data/test/regression/test_set_column09.rb +1 -1
  728. data/test/regression/test_set_print_scale01.rb +1 -1
  729. data/test/regression/test_set_start_page01.rb +1 -1
  730. data/test/regression/test_set_start_page02.rb +1 -1
  731. data/test/regression/test_set_start_page03.rb +1 -1
  732. data/test/regression/test_shape01.rb +1 -1
  733. data/test/regression/test_shape02.rb +1 -1
  734. data/test/regression/test_shape03.rb +1 -1
  735. data/test/regression/test_shape04.rb +1 -1
  736. data/test/regression/test_shape_connect01.rb +1 -1
  737. data/test/regression/test_shape_connect02.rb +1 -1
  738. data/test/regression/test_shape_connect03.rb +1 -1
  739. data/test/regression/test_shape_connect04.rb +1 -1
  740. data/test/regression/test_shape_scale01.rb +1 -1
  741. data/test/regression/test_shape_stencil01.rb +1 -1
  742. data/test/regression/test_shared_strings01.rb +1 -1
  743. data/test/regression/test_shared_strings02.rb +1 -1
  744. data/test/regression/test_simple01.rb +1 -1
  745. data/test/regression/test_simple02.rb +1 -1
  746. data/test/regression/test_simple03.rb +1 -1
  747. data/test/regression/test_simple04.rb +1 -1
  748. data/test/regression/test_simple05.rb +1 -1
  749. data/test/regression/test_tab_color01.rb +1 -1
  750. data/test/regression/test_table01.rb +1 -1
  751. data/test/regression/test_table02.rb +1 -1
  752. data/test/regression/test_table03.rb +4 -1
  753. data/test/regression/test_table04.rb +4 -1
  754. data/test/regression/test_table05.rb +4 -1
  755. data/test/regression/test_table06.rb +4 -1
  756. data/test/regression/test_table07.rb +1 -1
  757. data/test/regression/test_table08.rb +1 -1
  758. data/test/regression/test_table09.rb +1 -1
  759. data/test/regression/test_table10.rb +1 -1
  760. data/test/regression/test_table11.rb +1 -1
  761. data/test/regression/test_table12.rb +1 -1
  762. data/test/regression/test_table13.rb +1 -1
  763. data/test/regression/test_table14.rb +1 -1
  764. data/test/regression/test_table15.rb +1 -1
  765. data/test/regression/test_table16.rb +1 -1
  766. data/test/regression/test_table17.rb +1 -1
  767. data/test/regression/test_table20.rb +34 -0
  768. data/test/regression/test_table21.rb +36 -0
  769. data/test/regression/test_table22.rb +32 -0
  770. data/test/regression/test_tutorial01.rb +1 -1
  771. data/test/regression/test_tutorial02.rb +1 -1
  772. data/test/regression/test_tutorial03.rb +1 -1
  773. data/test/regression/test_types02.rb +25 -0
  774. data/test/regression/test_types08.rb +31 -0
  775. data/test/regression/test_update_range_format_with_params.rb +1 -1
  776. data/test/regression/test_urls_as_strings.rb +1 -1
  777. data/test/regression/test_utf8_01.rb +1 -1
  778. data/test/regression/test_utf8_03.rb +1 -1
  779. data/test/regression/test_utf8_04.rb +1 -1
  780. data/test/regression/test_utf8_05.rb +1 -1
  781. data/test/regression/test_utf8_06.rb +1 -1
  782. data/test/regression/test_utf8_07.rb +1 -1
  783. data/test/regression/test_utf8_08.rb +1 -1
  784. data/test/regression/test_utf8_09.rb +1 -1
  785. data/test/regression/test_utf8_10.rb +1 -1
  786. data/test/regression/test_utf8_11.rb +23 -0
  787. data/test/regression/test_vml01.rb +1 -1
  788. data/test/regression/test_vml02.rb +1 -1
  789. data/test/regression/test_vml03.rb +1 -1
  790. data/test/regression/xlsx_files/chart_axis40.xlsx +0 -0
  791. data/test/regression/xlsx_files/chart_axis41.xlsx +0 -0
  792. data/test/regression/xlsx_files/chart_chartarea05.xlsx +0 -0
  793. data/test/regression/xlsx_files/chart_chartarea06.xlsx +0 -0
  794. data/test/regression/xlsx_files/chart_combined09.xlsx +0 -0
  795. data/test/regression/xlsx_files/chart_data_labels25.xlsx +0 -0
  796. data/test/regression/xlsx_files/chart_format21.xlsx +0 -0
  797. data/test/regression/xlsx_files/chart_format22.xlsx +0 -0
  798. data/test/regression/xlsx_files/chart_format23.xlsx +0 -0
  799. data/test/regression/xlsx_files/chart_format24.xlsx +0 -0
  800. data/test/regression/xlsx_files/chart_format25.xlsx +0 -0
  801. data/test/regression/xlsx_files/chart_format26.xlsx +0 -0
  802. data/test/regression/xlsx_files/chart_format27.xlsx +0 -0
  803. data/test/regression/xlsx_files/chart_format28.xlsx +0 -0
  804. data/test/regression/xlsx_files/chart_format29.xlsx +0 -0
  805. data/test/regression/xlsx_files/chart_format30.xlsx +0 -0
  806. data/test/regression/xlsx_files/chart_format31.xlsx +0 -0
  807. data/test/regression/xlsx_files/chart_pattern01.xlsx +0 -0
  808. data/test/regression/xlsx_files/chart_pattern02.xlsx +0 -0
  809. data/test/regression/xlsx_files/chart_pattern03.xlsx +0 -0
  810. data/test/regression/xlsx_files/chart_pattern04.xlsx +0 -0
  811. data/test/regression/xlsx_files/chart_pattern05.xlsx +0 -0
  812. data/test/regression/xlsx_files/chart_pattern06.xlsx +0 -0
  813. data/test/regression/xlsx_files/chart_pattern07.xlsx +0 -0
  814. data/test/regression/xlsx_files/chart_pattern08.xlsx +0 -0
  815. data/test/regression/xlsx_files/chart_pattern09.xlsx +0 -0
  816. data/test/regression/xlsx_files/chart_pattern10.xlsx +0 -0
  817. data/test/regression/xlsx_files/chart_table03.xlsx +0 -0
  818. data/test/regression/xlsx_files/cond_format14.xlsx +0 -0
  819. data/test/regression/xlsx_files/cond_format15.xlsx +0 -0
  820. data/test/regression/xlsx_files/cond_format16.xlsx +0 -0
  821. data/test/regression/xlsx_files/cond_format17.xlsx +0 -0
  822. data/test/regression/xlsx_files/cond_format18.xlsx +0 -0
  823. data/test/regression/xlsx_files/date_1904_01.xlsx +0 -0
  824. data/test/regression/xlsx_files/default_row05.xlsx +0 -0
  825. data/test/regression/xlsx_files/format13.xlsx +0 -0
  826. data/test/regression/xlsx_files/format14.xlsx +0 -0
  827. data/test/regression/xlsx_files/hyperlink25.xlsx +0 -0
  828. data/test/regression/xlsx_files/hyperlink26.xlsx +0 -0
  829. data/test/regression/xlsx_files/hyperlink27.xlsx +0 -0
  830. data/test/regression/xlsx_files/hyperlink28.xlsx +0 -0
  831. data/test/regression/xlsx_files/hyperlink29.xlsx +0 -0
  832. data/test/regression/xlsx_files/hyperlink30.xlsx +0 -0
  833. data/test/regression/xlsx_files/hyperlink31.xlsx +0 -0
  834. data/test/regression/xlsx_files/image35.xlsx +0 -0
  835. data/test/regression/xlsx_files/properties03.xlsx +0 -0
  836. data/test/regression/xlsx_files/properties04.xlsx +0 -0
  837. data/test/regression/xlsx_files/properties05.xlsx +0 -0
  838. data/test/regression/xlsx_files/table21.xlsx +0 -0
  839. data/test/regression/xlsx_files/table22.xlsx +0 -0
  840. data/test/regression/xlsx_files/types02.xlsx +0 -0
  841. data/test/regression/xlsx_files/types08.xlsx +0 -0
  842. data/test/regression/xlsx_files/utf8_11.xlsx +0 -0
  843. data/test/test_delete_files.rb +3 -3
  844. data/test/test_example_match.rb +1 -1
  845. data/test/test_option_hash_for_workbook.rb +1 -1
  846. data/test/test_xml_writer_simple.rb +1 -1
  847. data/test/workbook/test_define_name.rb +1 -1
  848. data/test/workbook/test_get_chart_range.rb +3 -5
  849. data/test/workbook/test_sort_defined_names.rb +1 -1
  850. data/test/workbook/test_workbook_01.rb +1 -1
  851. data/test/workbook/test_workbook_02.rb +1 -1
  852. data/test/workbook/test_workbook_03.rb +1 -1
  853. data/test/workbook/test_worksheet_by_name.rb +35 -0
  854. data/test/workbook/test_write_calc_pr.rb +1 -1
  855. data/test/workbook/test_write_defined_name.rb +1 -1
  856. data/test/workbook/test_write_defined_names.rb +1 -1
  857. data/test/workbook/test_write_workbook_view.rb +81 -0
  858. data/test/worksheet/test_calculate_spans.rb +1 -1
  859. data/test/worksheet/test_cond_format_01.rb +1 -1
  860. data/test/worksheet/test_cond_format_02.rb +1 -1
  861. data/test/worksheet/test_cond_format_03.rb +1 -1
  862. data/test/worksheet/test_cond_format_04.rb +1 -1
  863. data/test/worksheet/test_cond_format_05.rb +1 -1
  864. data/test/worksheet/test_cond_format_06.rb +1 -1
  865. data/test/worksheet/test_cond_format_07.rb +1 -1
  866. data/test/worksheet/test_cond_format_08.rb +1 -1
  867. data/test/worksheet/test_cond_format_09.rb +1 -1
  868. data/test/worksheet/test_cond_format_10.rb +1 -1
  869. data/test/worksheet/test_cond_format_11.rb +1 -1
  870. data/test/worksheet/test_cond_format_12.rb +1 -1
  871. data/test/worksheet/test_cond_format_13.rb +1 -1
  872. data/test/worksheet/test_cond_format_14.rb +1 -1
  873. data/test/worksheet/test_cond_format_15.rb +1 -1
  874. data/test/worksheet/test_cond_format_16.rb +1 -1
  875. data/test/worksheet/test_cond_format_17.rb +1 -1
  876. data/test/worksheet/test_cond_format_18.rb +1 -1
  877. data/test/worksheet/test_cond_format_19.rb +1 -1
  878. data/test/worksheet/test_cond_format_20.rb +1 -1
  879. data/test/worksheet/test_cond_format_21.rb +2 -2
  880. data/test/worksheet/test_cond_format_22.rb +266 -0
  881. data/test/worksheet/test_cond_format_23.rb +242 -0
  882. data/test/worksheet/test_cond_format_24.rb +303 -0
  883. data/test/worksheet/test_convert_date_time_01.rb +1 -1
  884. data/test/worksheet/test_convert_date_time_02.rb +1 -1
  885. data/test/worksheet/test_convert_date_time_03.rb +1 -1
  886. data/test/worksheet/test_convert_date_time_04.rb +1 -1
  887. data/test/worksheet/test_data_bar_01.rb +53 -0
  888. data/test/worksheet/test_data_bar_02.rb +79 -0
  889. data/test/worksheet/test_data_bar_03.rb +147 -0
  890. data/test/worksheet/test_data_bar_04.rb +145 -0
  891. data/test/worksheet/test_data_bar_05.rb +147 -0
  892. data/test/worksheet/test_data_bar_06.rb +145 -0
  893. data/test/worksheet/test_data_bar_07.rb +146 -0
  894. data/test/worksheet/test_data_bar_08.rb +54 -0
  895. data/test/worksheet/test_data_bar_09.rb +80 -0
  896. data/test/worksheet/test_data_bar_10.rb +165 -0
  897. data/test/worksheet/test_data_bar_11.rb +167 -0
  898. data/test/worksheet/test_data_bar_12.rb +104 -0
  899. data/test/worksheet/test_extract_filter_tokens.rb +1 -1
  900. data/test/worksheet/test_parse_filter_expression.rb +1 -1
  901. data/test/worksheet/test_position_object.rb +1 -1
  902. data/test/worksheet/test_repeat_formula.rb +1 -1
  903. data/test/worksheet/test_sparkline_01.rb +1 -1
  904. data/test/worksheet/test_sparkline_02.rb +1 -1
  905. data/test/worksheet/test_sparkline_03.rb +1 -1
  906. data/test/worksheet/test_sparkline_04.rb +1 -1
  907. data/test/worksheet/test_sparkline_05.rb +1 -1
  908. data/test/worksheet/test_sparkline_06.rb +1 -1
  909. data/test/worksheet/test_sparkline_07.rb +1 -1
  910. data/test/worksheet/test_sparkline_08.rb +1 -1
  911. data/test/worksheet/test_sparkline_09.rb +1 -1
  912. data/test/worksheet/test_sparkline_10.rb +1 -1
  913. data/test/worksheet/test_sparkline_11.rb +1 -1
  914. data/test/worksheet/test_sparkline_12.rb +1 -1
  915. data/test/worksheet/test_update_format_methods.rb +9 -29
  916. data/test/worksheet/test_worksheet_01.rb +1 -1
  917. data/test/worksheet/test_worksheet_02.rb +1 -1
  918. data/test/worksheet/test_worksheet_03.rb +1 -1
  919. data/test/worksheet/test_worksheet_04.rb +1 -1
  920. data/test/worksheet/test_write_array_formula_01.rb +1 -8
  921. data/test/worksheet/test_write_autofilter.rb +1 -1
  922. data/test/worksheet/test_write_brk.rb +1 -1
  923. data/test/worksheet/test_write_cell.rb +1 -1
  924. data/test/worksheet/test_write_cell_value.rb +1 -1
  925. data/test/worksheet/test_write_col_breaks.rb +1 -1
  926. data/test/worksheet/test_write_col_info.rb +1 -1
  927. data/test/worksheet/test_write_conditional_formatting.rb +1 -1
  928. data/test/worksheet/test_write_custom_filter.rb +1 -1
  929. data/test/worksheet/test_write_custom_filters.rb +1 -1
  930. data/test/worksheet/test_write_data_validation_01.rb +1 -1
  931. data/test/worksheet/test_write_data_validation_02.rb +28 -1
  932. data/test/worksheet/test_write_dimension.rb +1 -1
  933. data/test/worksheet/test_write_filter.rb +1 -1
  934. data/test/worksheet/test_write_filter_column.rb +1 -1
  935. data/test/worksheet/test_write_filters.rb +1 -1
  936. data/test/worksheet/test_write_formula_does_not_change_formula_string.rb +1 -1
  937. data/test/worksheet/test_write_header_footer.rb +1 -1
  938. data/test/worksheet/test_write_hyperlink.rb +1 -8
  939. data/test/worksheet/test_write_legacy_drawing.rb +1 -1
  940. data/test/worksheet/test_write_merge_cell.rb +1 -1
  941. data/test/worksheet/test_write_merge_cells.rb +1 -1
  942. data/test/worksheet/test_write_methods.rb +68 -177
  943. data/test/worksheet/test_write_page_margins.rb +1 -1
  944. data/test/worksheet/test_write_page_set_up_pr.rb +1 -1
  945. data/test/worksheet/test_write_page_setup.rb +1 -1
  946. data/test/worksheet/test_write_pane.rb +1 -1
  947. data/test/worksheet/test_write_phonetic_pr.rb +1 -1
  948. data/test/worksheet/test_write_print_options.rb +1 -1
  949. data/test/worksheet/test_write_row_breaks.rb +1 -1
  950. data/test/worksheet/test_write_row_element.rb +1 -1
  951. data/test/worksheet/test_write_selection.rb +1 -1
  952. data/test/worksheet/test_write_sheet_calc_pr.rb +1 -1
  953. data/test/worksheet/test_write_sheet_data.rb +1 -1
  954. data/test/worksheet/test_write_sheet_format_pr.rb +1 -1
  955. data/test/worksheet/test_write_sheet_pr.rb +1 -1
  956. data/test/worksheet/test_write_sheet_protection.rb +1 -1
  957. data/test/worksheet/test_write_sheet_view.rb +1 -1
  958. data/test/worksheet/test_write_sheet_view1.rb +1 -1
  959. data/test/worksheet/test_write_sheet_view2.rb +1 -1
  960. data/test/worksheet/test_write_sheet_view3.rb +1 -1
  961. data/test/worksheet/test_write_sheet_view4.rb +1 -1
  962. data/test/worksheet/test_write_sheet_view5.rb +1 -1
  963. data/test/worksheet/test_write_sheet_view6.rb +1 -1
  964. data/test/worksheet/test_write_sheet_view7.rb +1 -1
  965. data/test/worksheet/test_write_sheet_view8.rb +1 -1
  966. data/test/worksheet/test_write_sheet_view9.rb +1 -1
  967. data/test/worksheet/test_write_tab_color.rb +1 -1
  968. data/test/worksheet/test_write_worksheet_attributes.rb +1 -1
  969. data/write_xlsx.gemspec +2 -2
  970. metadata +248 -15
  971. data/test/test_col_name.rb +0 -13
  972. data/test/workbook/test_workbook_new.rb +0 -18
  973. data/test/worksheet/test_format.rb +0 -17
  974. data/test/worksheet/test_write_multiline_string_with_url.rb +0 -30
  975. data/test/worksheet/test_write_url.rb +0 -19
@@ -9,12 +9,13 @@ class Axis < Caption
9
9
  include Writexlsx::Utility
10
10
 
11
11
  attr_accessor :defaults
12
- attr_accessor :min, :max, :num_format, :position, :major_tick_mark
12
+ attr_accessor :min, :max, :num_format, :position
13
+ attr_accessor :major_tick_mark, :minor_tick_mark
13
14
  attr_reader :minor_unit, :major_unit, :minor_unit_type, :major_unit_type
14
15
  attr_reader :display_units_visible, :display_units
15
16
  attr_reader :log_base, :crossing, :position_axis, :label_position, :visible
16
17
  attr_reader :num_format_linked, :num_font, :layout, :interval_unit
17
- attr_reader :major_gridlines, :minor_gridlines, :reverse
18
+ attr_reader :interval_tick, :major_gridlines, :minor_gridlines, :reverse
18
19
  attr_reader :line, :fill, :text_axis
19
20
  #
20
21
  # Convert user defined axis values into axis instance.
@@ -27,11 +28,11 @@ def merge_with_hash(params) # :nodoc:
27
28
  :reverse, :min, :max, :minor_unit, :major_unit, :minor_unit_type,
28
29
  :major_unit_type, :log_base, :crossing, :position_axis,
29
30
  :label_position, :num_format, :num_format_linked, :interval_unit,
30
- :major_tick_mark, :line, :fill
31
+ :interval_tick, :line, :fill
31
32
  ].each { |val| instance_variable_set("@#{val}", args[val]) }
32
- @visible = args[:visible] || 1
33
-
34
33
  set_major_minor_gridlines(args)
34
+
35
+ @visible = args[:visible] || 1
35
36
  set_display_units(args)
36
37
  set_display_units_visible(args)
37
38
  set_position(args)
@@ -44,6 +45,10 @@ def merge_with_hash(params) # :nodoc:
44
45
  @chart.date_category = false
45
46
  @text_axis = true
46
47
  end
48
+
49
+ # Set the tick marker types.
50
+ @major_tick_mark = get_tick_type(params[:major_tick_mark])
51
+ @minor_tick_mark = get_tick_type(params[:minor_tick_mark])
47
52
  end
48
53
 
49
54
  #
@@ -126,6 +131,26 @@ def get_display_units(display_units)
126
131
  end
127
132
  end
128
133
 
134
+ #
135
+ # Convert user tick types to internal units.
136
+ #
137
+ def get_tick_type(tick_type)
138
+ return if !ptrue?(tick_type)
139
+
140
+ types = {
141
+ 'outside' => 'out',
142
+ 'inside' => 'in',
143
+ 'none' => 'none',
144
+ 'cross' => 'cross'
145
+ }
146
+
147
+ if(types[tick_type])
148
+ return types[tick_type]
149
+ else
150
+ raise "Unknown tick_type type '#{tick_type}'\n"
151
+ end
152
+ end
153
+
129
154
  def set_display_units(args)
130
155
  @display_units = get_display_units(args[:display_units])
131
156
  end
@@ -134,7 +159,7 @@ def set_display_units_visible(args)
134
159
  if args[:display_units_visible]
135
160
  @display_units_visible = args[:display_units_visible]
136
161
  else
137
- @display_units_visible = 1;
162
+ @display_units_visible = 1
138
163
  end
139
164
  end
140
165
 
@@ -159,8 +184,8 @@ def set_position_axis
159
184
  end
160
185
 
161
186
  def set_font_properties(args)
162
- @num_font = @chart.convert_font_args(args[:num_font])
163
- @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])
164
189
  end
165
190
 
166
191
  def set_axis_name_layout(args)
@@ -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.
@@ -96,6 +96,8 @@ def write_plot_area
96
96
  write_layout(@plotarea.layout, 'plot')
97
97
  # Write the subclass chart type element.
98
98
  write_chart_type
99
+ # Write the c:spPr eleent for the plotarea formatting.
100
+ write_sp_pr(@plotarea)
99
101
  end
100
102
  end
101
103
 
@@ -8,22 +8,30 @@ class Chartline
8
8
  include Writexlsx::Utility
9
9
  include Writexlsx::Gradient
10
10
 
11
- attr_reader :line, :fill, :type
11
+ attr_reader :line, :fill, :type, :gradient, :pattern
12
12
 
13
13
  def initialize(params)
14
14
  @line = params[:line]
15
15
  @fill = params[:fill]
16
+ @pattern = params[:pattern]
17
+ @gradient = params[:gradient]
16
18
  # Set the line properties for the marker..
17
19
  @line = line_properties(@line)
18
20
  # Allow 'border' as a synonym for 'line'.
19
21
  @line = line_properties(params[:border]) if params[:border]
20
-
21
- # Set the gradient fill properties for the series.
22
- @gradient = gradient_properties(params[:gradient])
23
-
24
22
  # Set the fill properties for the marker.
25
23
  @fill = fill_properties(@fill)
24
+ # Set the pattern properties for the series.
25
+ @pattern = pattern_properties(@pattern)
26
+ # Set the gradient fill properties for the series.
27
+ @gradient = gradient_properties(@gradient)
28
+ # Pattern fill overrides solid fill.
26
29
  @fill = nil if ptrue?(@gradient)
30
+ # Gradient fill overrides solid and pattern fills.
31
+ if ptrue?(@gradient)
32
+ @pattern = nil
33
+ @fill = nil
34
+ end
27
35
  end
28
36
 
29
37
  def line_defined?
@@ -49,16 +57,20 @@ def initialize(params)
49
57
 
50
58
  class Trendline < Chartline
51
59
  attr_reader :name, :forward, :backward, :order, :period
60
+ attr_reader :intercept, :display_equation, :display_r_squared
52
61
 
53
62
  def initialize(params)
54
63
  super(params)
55
64
 
56
- @name = params[:name]
57
- @forward = params[:forward]
58
- @backward = params[:backward]
59
- @order = params[:order]
60
- @period = params[:period]
61
- @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')
62
74
  end
63
75
 
64
76
  private
@@ -170,7 +182,7 @@ class Series
170
182
  include Writexlsx::Gradient
171
183
 
172
184
  attr_reader :values, :categories, :name, :name_formula, :name_id
173
- attr_reader :cat_data_id, :val_data_id, :fill, :gradient
185
+ attr_reader :cat_data_id, :val_data_id, :fill, :pattern, :gradient
174
186
  attr_reader :trendline, :smooth, :labels, :invert_if_negative
175
187
  attr_reader :x2_axis, :y2_axis, :error_bars, :points
176
188
  attr_accessor :line, :marker
@@ -184,13 +196,21 @@ def initialize(chart, params = {})
184
196
 
185
197
  set_data_ids(params)
186
198
 
187
- @line = line_properties(params[:border] || params[:line])
188
- @fill = fill_properties(params[:fill])
189
-
199
+ @line = line_properties(params[:border] || params[:line])
200
+ @fill = fill_properties(params[:fill])
201
+ @pattern = pattern_properties(params[:pattern])
190
202
  @gradient = gradient_properties(params[:gradient])
191
- @fill = nil if ptrue?(@gradient)
203
+ # Pattern fill overrides solid fill.
204
+ @fill = nil if ptrue?(@pattern)
205
+ # Gradient fill overrides solid and patter fills.
206
+ if ptrue?(@gradient)
207
+ @pattern = nil
208
+ @fill = nil
209
+ end
192
210
 
211
+ # Set the marker properties for the series.
193
212
  @marker = Marker.new(params[:marker]) if params[:marker]
213
+ # Set the trendline properties for the series.
194
214
  @trendline = Trendline.new(params[:trendline]) if params[:trendline]
195
215
  @error_bars = errorbars(params[:x_error_bars], params[:y_error_bars])
196
216
  @points = params[:points].collect { |p| p ? Point.new(p) : p } if params[:points]
@@ -277,7 +297,7 @@ def labels_properties(labels) # :nodoc:
277
297
  end
278
298
 
279
299
  if labels[:font]
280
- labels[:font] = @chart.convert_font_args(labels[:font])
300
+ labels[:font] = convert_font_args(labels[:font])
281
301
  end
282
302
 
283
303
  labels
@@ -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:
@@ -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
 
@@ -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
@@ -844,6 +848,10 @@ def write_font_family_scheme(writer)
844
848
  writer.empty_tag('family', [ ['val', @font_family] ])
845
849
  end
846
850
 
851
+ if ptrue?(@font_charset)
852
+ writer.empty_tag('charset', [ ['val', @font_charset] ])
853
+ end
854
+
847
855
  if @font == 'Calibri' && !ptrue?(@hyperlink)
848
856
  writer.empty_tag('scheme', [ ['val', @font_scheme] ])
849
857
  end
@@ -7,8 +7,8 @@ class ConditionalFormat
7
7
 
8
8
  def self.factory(worksheet, *args)
9
9
  range, param =
10
- Package::ConditionalFormat.new(worksheet, nil, nil).
11
- range_param_for_conditional_formatting(*args)
10
+ Package::ConditionalFormat.new(worksheet, nil, nil).
11
+ range_param_for_conditional_formatting(*args)
12
12
 
13
13
  case param[:type]
14
14
  when 'cellIs'
@@ -29,6 +29,8 @@ def self.factory(worksheet, *args)
29
29
  DataBarFormat.new(worksheet, range, param)
30
30
  when 'expression'
31
31
  ExpressionFormat.new(worksheet, range, param)
32
+ when 'iconSet'
33
+ IconSetFormat.new(worksheet, range, param)
32
34
  else # when 'duplicateValues', 'uniqueValues'
33
35
  ConditionalFormat.new(worksheet, range, param)
34
36
  end
@@ -59,11 +61,13 @@ def write_formula_tag(data) #:nodoc:
59
61
  #
60
62
  # Write the <cfvo> element.
61
63
  #
62
- def write_cfvo(type, val)
63
- @writer.empty_tag('cfvo', [
64
- ['type', type],
65
- ['val', val]
66
- ])
64
+ def write_cfvo(type, value, criteria = nil)
65
+ attributes = [ ['type', type] ]
66
+ attributes << [ 'val', value] if value
67
+
68
+ attributes << ['gte', 0] if ptrue?(criteria)
69
+
70
+ @writer.empty_tag('cfvo', attributes)
67
71
  end
68
72
 
69
73
  def attributes
@@ -154,6 +158,54 @@ def bar_color
154
158
  @param[:bar_color]
155
159
  end
156
160
 
161
+ def bar_border_color
162
+ @param[:bar_border_color]
163
+ end
164
+
165
+ def bar_negative_color
166
+ @param[:bar_negative_color]
167
+ end
168
+
169
+ def bar_negative_color_same
170
+ @param[:bar_negative_color_same]
171
+ end
172
+
173
+ def bar_no_border
174
+ @param[:bar_no_border]
175
+ end
176
+
177
+ def bar_axis_position
178
+ @param[:bar_axis_position]
179
+ end
180
+
181
+ def bar_axis_color
182
+ @param[:bar_axis_color]
183
+ end
184
+
185
+ def icon_style
186
+ @param[:icon_style]
187
+ end
188
+
189
+ def total_icons
190
+ @param[:total_icons]
191
+ end
192
+
193
+ def icons
194
+ @param[:icons]
195
+ end
196
+
197
+ def icons_only
198
+ @param[:icons_only]
199
+ end
200
+
201
+ def reverse_icons
202
+ @param[:reverse_icons]
203
+ end
204
+
205
+ def bar_only
206
+ @param[:bar_only]
207
+ end
208
+
157
209
  def range_param_for_conditional_formatting(*args) # :nodoc:
158
210
  range_start_cell_for_conditional_formatting(*args)
159
211
  param_for_conditional_formatting(*args)
@@ -274,17 +326,68 @@ def handling_of_blanks_error_types
274
326
  @param[:mid_color] = palette_color(@param[:mid_color])
275
327
  @param[:min_color] = palette_color(@param[:min_color])
276
328
  when 'dataBar'
277
- # Color scales don't use any additional formatting.
329
+ # Excel 2007 data bars don't use any additional formatting.
278
330
  @param[:format] = nil
279
331
 
280
- @param[:min_type] ||= 'min'
281
- @param[:max_type] ||= 'max'
282
- @param[:min_value] ||= 0
283
- @param[:max_value] ||= 0
284
- @param[:bar_color] ||= '#638EC6'
332
+ if !@param[:min_type]
333
+ @param[:min_type] = 'min'
334
+ @param[:x14_min_type] = 'autoMin'
335
+ else
336
+ @param[:x14_min_type] = @param[:min_type]
337
+ end
338
+ if !@param[:max_type]
339
+ @param[:max_type] = 'max'
340
+ @param[:x14_max_type] = 'autoMax'
341
+ else
342
+ @param[:x14_max_type] = @param[:max_type]
343
+ end
344
+
345
+ @param[:min_value] ||= 0
346
+ @param[:max_value] ||= 0
347
+ @param[:bar_color] ||= '#638EC6'
348
+ @param[:bar_border_color] ||= @param[:bar_color]
349
+ @param[:bar_only] ||= 0
350
+ @param[:bar_no_border] ||= 0
351
+ @param[:bar_solid] ||= 0
352
+ @param[:bar_direction] ||= ''
353
+ @param[:bar_negative_color] ||= '#FF0000'
354
+ @param[:bar_negative_border_color] ||= '#FF0000'
355
+ @param[:bar_negative_color_same] ||= 0
356
+ @param[:bar_negative_border_color_same] ||= 0
357
+ @param[:bar_axis_position] ||= ''
358
+ @param[:bar_axis_color] ||= '#000000'
359
+
360
+ @param[:bar_color] =
361
+ palette_color(@param[:bar_color])
362
+ @param[:bar_border_color] =
363
+ palette_color(@param[:bar_border_color])
364
+ @param[:bar_negative_color] =
365
+ palette_color(@param[:bar_negative_color])
366
+ @param[:bar_negative_border_color] =
367
+ palette_color(@param[:bar_negative_border_color])
368
+ @param[:bar_axis_color] =
369
+ palette_color(@param[:bar_axis_color])
370
+ end
371
+
372
+ # Adjust for 2010 style data_bar parameters.
373
+ if ptrue?(@param[:is_data_bar_2010])
374
+ @worksheet.excel_version = 2010
285
375
 
286
- @param[:bar_color] = palette_color(@param[:bar_color])
376
+ if @param[:min_type] == 'min' && @param[:min_value] == 0
377
+ @param[:min_value] = nil
378
+ end
379
+ if @param[:max_type] == 'max' && @param[:max_value] == 0
380
+ @param[:max_value] = nil
381
+ end
382
+
383
+ # Store range for Excel 2010 data bars.
384
+ @param[:range] = range
287
385
  end
386
+
387
+ # Strip the leading = from formulas.
388
+ @param[:min_value] = @param[:min_value].to_s.sub(/^=/, '') if @param[:min_value]
389
+ @param[:mid_value] = @param[:mid_value].to_s.sub(/^=/, '') if @param[:mid_value]
390
+ @param[:max_value] = @param[:max_value].to_s.sub(/^=/, '') if @param[:max_value]
288
391
  end
289
392
 
290
393
  def palette_color(index)
@@ -293,7 +396,7 @@ def palette_color(index)
293
396
 
294
397
  def range_start_cell_for_conditional_formatting(*args) # :nodoc:
295
398
  row1, row2, col1, col2, user_range, param =
296
- row_col_param_for_conditional_formatting(*args)
399
+ row_col_param_for_conditional_formatting(*args)
297
400
  # If the first and last cell are the same write a single cell.
298
401
  if row1 == row2 && col1 == col2
299
402
  range = xl_rowcol_to_cell(row1, col1)
@@ -336,19 +439,32 @@ def row_col_param_for_conditional_formatting(*args)
336
439
 
337
440
  def param_for_conditional_formatting(*args) # :nodoc:
338
441
  dummy, dummy, dummy, dummy, dummy, @param =
339
- row_col_param_for_conditional_formatting(*args)
442
+ row_col_param_for_conditional_formatting(*args)
340
443
  check_conditional_formatting_parameters(@param)
341
444
 
342
445
  @param[:format] = @param[:format].get_dxf_index if @param[:format]
343
446
  @param[:priority] = @worksheet.dxf_priority
447
+
448
+ # Check for 2010 style data_bar parameters.
449
+ %i(data_bar_2010 bar_solid bar_border_color bar_negative_color
450
+ bar_negative_color_same bar_negative_border_color
451
+ bar_negative_border_color_same bar_no_border
452
+ bar_axis_position bar_axis_color bar_direction
453
+ ).each do |key|
454
+ if @param[key]
455
+ @param[:is_data_bar_2010] = 1
456
+ break
457
+ end
458
+ end
459
+
344
460
  @worksheet.dxf_priority += 1
345
461
  end
346
462
 
347
463
  def check_conditional_formatting_parameters(param) # :nodoc:
348
464
  # Check for valid input parameters.
349
- unless (param.keys.uniq - valid_parameter_for_conditional_formatting).empty? &&
350
- param.has_key?(:type) &&
351
- valid_type_for_conditional_formatting.has_key?(param[:type].downcase)
465
+ if !(param.keys.uniq - valid_parameter_for_conditional_formatting).empty? ||
466
+ !param.has_key?(:type) ||
467
+ !valid_type_for_conditional_formatting.has_key?(param[:type].downcase)
352
468
  raise WriteXLSXOptionParameterError, "Invalid type : #{param[:type]}"
353
469
  end
354
470
 
@@ -369,6 +485,32 @@ def check_conditional_formatting_parameters(param) # :nodoc:
369
485
  param[:maximum] = convert_date_time_if_required(param[:maximum])
370
486
  end
371
487
 
488
+ # Set properties for icon sets.
489
+ if param[:type] == 'iconSet'
490
+ if !param[:icon_style]
491
+ raise "The 'icon_style' parameter must be specified when " +
492
+ "'type' == 'icon_set' in conditional_formatting()"
493
+ end
494
+
495
+ # Check for valid icon styles.
496
+ if !icon_set_styles[param[:icon_style]]
497
+ raise "Unknown icon style '$param->{icon_style}' for parameter " +
498
+ "'icon_style' in conditional_formatting()"
499
+ else
500
+ param[:icon_style] = icon_set_styles[param[:icon_style]]
501
+ end
502
+
503
+ # Set the number of icons for the icon style.
504
+ param[:total_icons] = 3
505
+ if param[:icon_style] =~ /^4/
506
+ param[:total_icons] = 4
507
+ elsif param[:icon_style] =~ /^5/
508
+ param[:total_icons] = 5
509
+ end
510
+
511
+ param[:icons] = set_icon_properties(param[:total_icons], param[:icons])
512
+ end
513
+
372
514
  # 'Between' and 'Not between' criteria require 2 values.
373
515
  if param[:criteria] == 'between' || param[:criteria] == 'notBetween'
374
516
  unless param.has_key?(:minimum) || param.has_key?(:maximum)
@@ -400,23 +542,39 @@ def convert_date_time_if_required(val)
400
542
  # List of valid input parameters for conditional_formatting.
401
543
  def valid_parameter_for_conditional_formatting
402
544
  [
403
- :type,
404
- :format,
405
- :criteria,
406
- :value,
407
- :minimum,
408
- :maximum,
409
- :stop_if_true,
410
- :min_type,
411
- :mid_type,
412
- :max_type,
413
- :min_value,
414
- :mid_value,
415
- :max_value,
416
- :min_color,
417
- :mid_color,
418
- :max_color,
419
- :bar_color
545
+ :type,
546
+ :format,
547
+ :criteria,
548
+ :value,
549
+ :minimum,
550
+ :maximum,
551
+ :stop_if_true,
552
+ :min_type,
553
+ :mid_type,
554
+ :max_type,
555
+ :min_value,
556
+ :mid_value,
557
+ :max_value,
558
+ :min_color,
559
+ :mid_color,
560
+ :max_color,
561
+ :bar_color,
562
+ :bar_negative_color,
563
+ :bar_negative_color_same,
564
+ :bar_solid,
565
+ :bar_border_color,
566
+ :bar_negative_border_color,
567
+ :bar_negative_border_color_same,
568
+ :bar_no_border,
569
+ :bar_direction,
570
+ :bar_axis_position,
571
+ :bar_axis_color,
572
+ :bar_only,
573
+ :icon_style,
574
+ :reverse_icons,
575
+ :icons_only,
576
+ :icons,
577
+ :data_bar_2010
420
578
  ]
421
579
  end
422
580
 
@@ -440,7 +598,8 @@ def valid_type_for_conditional_formatting
440
598
  '2_color_scale' => '2_color_scale',
441
599
  '3_color_scale' => '3_color_scale',
442
600
  'data_bar' => 'dataBar',
443
- 'formula' => 'expression'
601
+ 'formula' => 'expression',
602
+ 'icon_set' => 'iconSet'
444
603
  }
445
604
  end
446
605
 
@@ -479,6 +638,100 @@ def valid_criteria_type_for_conditional_formatting
479
638
  }
480
639
  end
481
640
 
641
+ # List of valid icon styles.
642
+ def icon_set_styles
643
+ {
644
+ "3_arrows" => "3Arrows", # 1
645
+ "3_flags" => "3Flags", # 2
646
+ "3_traffic_lights_rimmed" => "3TrafficLights2", # 3
647
+ "3_symbols_circled" => "3Symbols", # 4
648
+ "4_arrows" => "4Arrows", # 5
649
+ "4_red_to_black" => "4RedToBlack", # 6
650
+ "4_traffic_lights" => "4TrafficLights", # 7
651
+ "5_arrows_gray" => "5ArrowsGray", # 8
652
+ "5_quarters" => "5Quarters", # 9
653
+ "3_arrows_gray" => "3ArrowsGray", # 10
654
+ "3_traffic_lights" => "3TrafficLights", # 11
655
+ "3_signs" => "3Signs", # 12
656
+ "3_symbols" => "3Symbols2", # 13
657
+ "4_arrows_gray" => "4ArrowsGray", # 14
658
+ "4_ratings" => "4Rating", # 15
659
+ "5_arrows" => "5Arrows", # 16
660
+ "5_ratings" => "5Rating", # 17
661
+ }
662
+ end
663
+
664
+ #
665
+ # Set the sub-properites for icons.
666
+ #
667
+ def set_icon_properties(total_icons, user_props)
668
+ props = []
669
+
670
+ # Set the default icon properties.
671
+ total_icons.times do
672
+ props << {
673
+ :criteria => 0,
674
+ :value => 0,
675
+ :type => 'percent'
676
+ }
677
+ end
678
+
679
+ # Set the default icon values based on the number of icons.
680
+ if total_icons == 3
681
+ props[0][:value] = 67
682
+ props[1][:value] = 33
683
+ elsif total_icons == 4
684
+ props[0][:value] = 75
685
+ props[1][:value] = 50
686
+ props[2][:value] = 25
687
+ elsif total_icons == 5
688
+ props[0][:value] = 80
689
+ props[1][:value] = 60
690
+ props[2][:value] = 40
691
+ props[3][:value] = 20
692
+ end
693
+
694
+ # Overwrite default properties with user defined properties.
695
+ if user_props
696
+
697
+ # Ensure we don't set user properties for lowest icon.
698
+ max_data = user_props.size
699
+ max_data = total_icons -1 if max_data >= total_icons
700
+
701
+ (0..max_data - 1).each do |i|
702
+ # Set the user defined 'value' property.
703
+ if user_props[i][:value]
704
+ props[i][:value] = user_props[i][:value].to_s.sub(/^=/, '')
705
+ end
706
+
707
+ # Set the user defined 'type' property.
708
+ if user_props[i][:type]
709
+
710
+ type = user_props[i][:type]
711
+
712
+ if type != 'percent' && type != 'percentile' &&
713
+ type != 'number' && type != 'formula'
714
+ raise "Unknown icon property type '$props->{type}' for sub-" +
715
+ "property 'type' in conditional_formatting()"
716
+ else
717
+ props[i][:type] = type
718
+
719
+ if props[i][:type] == 'number'
720
+ props[i][:type] = 'num'
721
+ end
722
+ end
723
+ end
724
+
725
+ # Set the user defined 'criteria' property.
726
+ if user_props[i][:criteria] && user_props[i][:criteria] == '>'
727
+ props[i][:criteria] = 1
728
+ end
729
+
730
+ end
731
+ end
732
+ props
733
+ end
734
+
482
735
  def date_1904?
483
736
  @worksheet.date_1904?
484
737
  end
@@ -578,6 +831,9 @@ class DataBarFormat < ConditionalFormat
578
831
  def write_cf_rule
579
832
  @writer.tag_elements('cfRule', attributes) do
580
833
  write_data_bar
834
+ if ptrue?(@param[:is_data_bar_2010])
835
+ write_data_bar_ext(@param)
836
+ end
581
837
  end
582
838
  end
583
839
 
@@ -585,13 +841,42 @@ def write_cf_rule
585
841
  # Write the <dataBar> element.
586
842
  #
587
843
  def write_data_bar
588
- @writer.tag_elements('dataBar') do
844
+ attributes = []
845
+
846
+ if ptrue?(bar_only)
847
+ attributes << ['showValue', 0]
848
+ end
849
+ @writer.tag_elements('dataBar',attributes) do
589
850
  write_cfvo(min_type, min_value)
590
851
  write_cfvo(max_type, max_value)
591
852
 
592
853
  write_color(@writer, 'rgb', bar_color)
593
854
  end
594
855
  end
856
+
857
+ #
858
+ # Write the <extLst> dataBar extension element.
859
+ #
860
+ def write_data_bar_ext(param)
861
+ # Create a pseudo GUID for each unique Excel 2010 data bar.
862
+ worksheet_count = @worksheet.index + 1
863
+ data_bar_count = @worksheet.data_bars_2010.size + 1
864
+
865
+ guid = sprintf(
866
+ "{DA7ABA51-AAAA-BBBB-%04X-%012X}",
867
+ worksheet_count, data_bar_count
868
+ )
869
+
870
+ # Store the 2010 data bar parameters to write the extLst elements.
871
+ param[:guid] = guid
872
+ @worksheet.data_bars_2010 << param
873
+
874
+ @writer.tag_elements('extLst') do
875
+ @worksheet.write_ext('{B025F937-C7B1-47D3-B67F-A62EFF666E3E}') do
876
+ @writer.data_element('x14:id', guid)
877
+ end
878
+ end
879
+ end
595
880
  end
596
881
 
597
882
  class ExpressionFormat < ConditionalFormat
@@ -599,5 +884,33 @@ def write_cf_rule
599
884
  write_cf_rule_formula_tag(criteria)
600
885
  end
601
886
  end
887
+
888
+ class IconSetFormat < ConditionalFormat
889
+ def write_cf_rule
890
+ @writer.tag_elements('cfRule', attributes) do
891
+ write_icon_set
892
+ end
893
+ end
894
+
895
+ #
896
+ # Write the <iconSet> element.
897
+ #
898
+ def write_icon_set
899
+ attributes = []
900
+ # Don't set attribute for default style.
901
+ attributes = [ ['iconSet', icon_style] ] if icon_style != '3TrafficLights'
902
+ attributes << ['showValue', 0] if icons_only
903
+ attributes << ['reverse', 1] if reverse_icons
904
+
905
+ @writer.tag_elements('iconSet', attributes) do
906
+ # Write the properties for different icon styles.
907
+ if icons
908
+ icons.reverse.each do |icon|
909
+ write_cfvo(icon[:type], icon[:value], icon[:criteria])
910
+ end
911
+ end
912
+ end
913
+ end
914
+ end
602
915
  end
603
916
  end