write_xlsx 0.85.8 → 0.87.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 (894) hide show
  1. checksums.yaml +4 -4
  2. data/Changes +39 -0
  3. data/README.md +5 -5
  4. data/examples/chart_combined.rb +3 -1
  5. data/examples/colors.rb +47 -0
  6. data/examples/comments2.rb +1 -1
  7. data/examples/conditional_format.rb +60 -9
  8. data/examples/data_validate.rb +7 -7
  9. data/examples/panes.rb +1 -1
  10. data/examples/tab_colors.rb +1 -1
  11. data/examples/update_range_format_with_params.rb +33 -0
  12. data/lib/write_xlsx/chart.rb +51 -4
  13. data/lib/write_xlsx/chart/axis.rb +2 -2
  14. data/lib/write_xlsx/chart/series.rb +26 -10
  15. data/lib/write_xlsx/format.rb +6 -2
  16. data/lib/write_xlsx/package/app.rb +12 -0
  17. data/lib/write_xlsx/package/comments.rb +4 -2
  18. data/lib/write_xlsx/package/conditional_format.rb +8 -2
  19. data/lib/write_xlsx/package/shared_strings.rb +12 -10
  20. data/lib/write_xlsx/package/styles.rb +1 -1
  21. data/lib/write_xlsx/package/table.rb +31 -5
  22. data/lib/write_xlsx/package/xml_writer_simple.rb +4 -3
  23. data/lib/write_xlsx/utility.rb +86 -1
  24. data/lib/write_xlsx/version.rb +1 -1
  25. data/lib/write_xlsx/workbook.rb +19 -17
  26. data/lib/write_xlsx/worksheet.rb +118 -11
  27. data/lib/write_xlsx/worksheet/data_validation.rb +23 -11
  28. data/lib/write_xlsx/worksheet/hyperlink.rb +12 -8
  29. data/test/chart/test_add_series.rb +11 -1
  30. data/test/chart/test_process_names.rb +1 -1
  31. data/test/chart/test_write_a_latin.rb +1 -1
  32. data/test/chart/test_write_auto.rb +1 -1
  33. data/test/chart/test_write_ax_id.rb +1 -1
  34. data/test/chart/test_write_ax_pos.rb +1 -1
  35. data/test/chart/test_write_cross_ax.rb +1 -1
  36. data/test/chart/test_write_crosses.rb +1 -1
  37. data/test/chart/test_write_d_lbls.rb +1 -1
  38. data/test/chart/test_write_format_code.rb +1 -1
  39. data/test/chart/test_write_idx.rb +1 -1
  40. data/test/chart/test_write_label_align.rb +1 -1
  41. data/test/chart/test_write_label_offset.rb +1 -1
  42. data/test/chart/test_write_lang.rb +1 -1
  43. data/test/chart/test_write_layout.rb +1 -1
  44. data/test/chart/test_write_legend.rb +1 -1
  45. data/test/chart/test_write_legend_pos.rb +1 -1
  46. data/test/chart/test_write_major_gridlines.rb +1 -1
  47. data/test/chart/test_write_marker.rb +1 -1
  48. data/test/chart/test_write_marker_size.rb +1 -1
  49. data/test/chart/test_write_marker_value.rb +1 -1
  50. data/test/chart/test_write_num_cache.rb +1 -1
  51. data/test/chart/test_write_number_format.rb +2 -3
  52. data/test/chart/test_write_order.rb +1 -1
  53. data/test/chart/test_write_orientation.rb +1 -1
  54. data/test/chart/test_write_page_margins.rb +1 -1
  55. data/test/chart/test_write_page_setup.rb +1 -1
  56. data/test/chart/test_write_plot_vis_only.rb +1 -1
  57. data/test/chart/test_write_pt.rb +1 -1
  58. data/test/chart/test_write_pt_count.rb +1 -1
  59. data/test/chart/test_write_series_formula.rb +1 -1
  60. data/test/chart/test_write_style.rb +1 -1
  61. data/test/chart/test_write_symbol.rb +1 -1
  62. data/test/chart/test_write_tick_lbl_pos.rb +1 -1
  63. data/test/chart/test_write_v.rb +1 -1
  64. data/test/chartsheet/test_chartsheet01.rb +1 -1
  65. data/test/drawing/test_drawing_chart_01.rb +1 -1
  66. data/test/drawing/test_drawing_image_01.rb +1 -1
  67. data/test/drawing/test_drawing_shape_01.rb +1 -1
  68. data/test/drawing/test_drawing_shape_02.rb +1 -1
  69. data/test/drawing/test_drawing_shape_03.rb +1 -1
  70. data/test/drawing/test_drawing_shape_04.rb +1 -1
  71. data/test/drawing/test_drawing_shape_05.rb +1 -1
  72. data/test/drawing/test_drawing_shape_06.rb +1 -1
  73. data/test/drawing/test_drawing_shape_07.rb +1 -1
  74. data/test/drawing/test_write_a_graphic_frame_locks.rb +1 -1
  75. data/test/drawing/test_write_c_chart.rb +1 -1
  76. data/test/drawing/test_write_c_nv_graphic_frame_pr.rb +1 -1
  77. data/test/drawing/test_write_c_nv_pr.rb +1 -1
  78. data/test/drawing/test_write_col.rb +1 -1
  79. data/test/drawing/test_write_col_off.rb +1 -1
  80. data/test/drawing/test_write_ext.rb +1 -1
  81. data/test/drawing/test_write_pos.rb +1 -1
  82. data/test/drawing/test_write_row.rb +1 -1
  83. data/test/drawing/test_write_row_off.rb +1 -1
  84. data/test/drawing/test_write_xfrm_extension.rb +1 -1
  85. data/test/drawing/test_write_xfrm_offset.rb +1 -1
  86. data/test/helper.rb +2 -2
  87. data/test/package/app/test_app01.rb +1 -1
  88. data/test/package/app/test_app02.rb +1 -1
  89. data/test/package/app/test_app03.rb +1 -1
  90. data/test/package/comments/test_write_text_t.rb +1 -1
  91. data/test/package/content_types/test_content_types.rb +1 -1
  92. data/test/package/content_types/test_write_default.rb +1 -1
  93. data/test/package/content_types/test_write_override.rb +1 -1
  94. data/test/package/core/test_core01.rb +1 -1
  95. data/test/package/core/test_core02.rb +1 -1
  96. data/test/package/relationships/test_relationships.rb +1 -1
  97. data/test/package/relationships/test_sheet_rels.rb +1 -1
  98. data/test/package/shared_strings/test_shared_strings01.rb +1 -1
  99. data/test/package/shared_strings/test_shared_strings02.rb +1 -1
  100. data/test/package/shared_strings/test_write_si.rb +1 -7
  101. data/test/package/styles/test_styles_01.rb +1 -1
  102. data/test/package/styles/test_styles_02.rb +1 -1
  103. data/test/package/styles/test_styles_03.rb +1 -1
  104. data/test/package/styles/test_styles_04.rb +1 -1
  105. data/test/package/styles/test_styles_05.rb +1 -1
  106. data/test/package/styles/test_styles_06.rb +1 -1
  107. data/test/package/styles/test_styles_07.rb +1 -1
  108. data/test/package/styles/test_styles_08.rb +1 -1
  109. data/test/package/styles/test_styles_09.rb +1 -1
  110. data/test/package/table/test_table01.rb +3 -3
  111. data/test/package/table/test_table02.rb +2 -2
  112. data/test/package/table/test_table03.rb +2 -2
  113. data/test/package/table/test_table04.rb +2 -2
  114. data/test/package/table/test_table05.rb +2 -2
  115. data/test/package/table/test_table06.rb +2 -2
  116. data/test/package/table/test_table07.rb +2 -2
  117. data/test/package/table/test_table08.rb +2 -2
  118. data/test/package/table/test_table09.rb +2 -2
  119. data/test/package/table/test_table10.rb +2 -2
  120. data/test/package/table/test_table11.rb +2 -2
  121. data/test/package/table/test_table12.rb +2 -2
  122. data/test/package/table/test_table13.rb +1 -1
  123. data/test/package/table/test_write_auto_filter.rb +1 -1
  124. data/test/package/table/test_write_table_column.rb +1 -1
  125. data/test/package/table/test_write_table_style_info.rb +1 -1
  126. data/test/package/vml/test_write_auto_fill.rb +1 -1
  127. data/test/package/vml/test_write_div.rb +1 -1
  128. data/test/package/vml/test_write_idmap.rb +1 -1
  129. data/test/package/vml/test_write_path.rb +1 -1
  130. data/test/package/vml/test_write_shapelayout.rb +1 -1
  131. data/test/package/vml/test_write_shapetype.rb +1 -1
  132. data/test/package/vml/test_write_stroke.rb +1 -1
  133. data/test/regression/disabled_test_vml04.rb +1 -1
  134. data/test/regression/images/red_208.png +0 -0
  135. data/test/regression/test_array_formula01.rb +1 -1
  136. data/test/regression/test_array_formula02.rb +1 -1
  137. data/test/regression/test_autofilter00.rb +1 -1
  138. data/test/regression/test_autofilter01.rb +1 -1
  139. data/test/regression/test_autofilter02.rb +1 -1
  140. data/test/regression/test_autofilter03.rb +1 -1
  141. data/test/regression/test_autofilter04.rb +1 -1
  142. data/test/regression/test_autofilter05.rb +1 -1
  143. data/test/regression/test_autofilter06.rb +1 -1
  144. data/test/regression/test_autofilter07.rb +1 -1
  145. data/test/regression/test_button01.rb +1 -1
  146. data/test/regression/test_button02.rb +1 -1
  147. data/test/regression/test_button03.rb +1 -1
  148. data/test/regression/test_button04.rb +1 -1
  149. data/test/regression/test_button05.rb +1 -1
  150. data/test/regression/test_button06.rb +1 -1
  151. data/test/regression/test_button07.rb +1 -1
  152. data/test/regression/test_button08.rb +1 -1
  153. data/test/regression/test_button13.rb +1 -1
  154. data/test/regression/test_button14.rb +1 -1
  155. data/test/regression/test_chart_area01.rb +1 -1
  156. data/test/regression/test_chart_area02.rb +1 -1
  157. data/test/regression/test_chart_area03.rb +1 -1
  158. data/test/regression/test_chart_area04.rb +1 -1
  159. data/test/regression/test_chart_axis01.rb +1 -1
  160. data/test/regression/test_chart_axis02.rb +1 -1
  161. data/test/regression/test_chart_axis03.rb +1 -1
  162. data/test/regression/test_chart_axis04.rb +1 -1
  163. data/test/regression/test_chart_axis05.rb +1 -1
  164. data/test/regression/test_chart_axis06.rb +1 -1
  165. data/test/regression/test_chart_axis07.rb +1 -1
  166. data/test/regression/test_chart_axis08.rb +1 -1
  167. data/test/regression/test_chart_axis09.rb +1 -1
  168. data/test/regression/test_chart_axis10.rb +1 -1
  169. data/test/regression/test_chart_axis11.rb +1 -1
  170. data/test/regression/test_chart_axis12.rb +1 -1
  171. data/test/regression/test_chart_axis13.rb +1 -1
  172. data/test/regression/test_chart_axis14.rb +1 -1
  173. data/test/regression/test_chart_axis15.rb +1 -1
  174. data/test/regression/test_chart_axis16.rb +1 -1
  175. data/test/regression/test_chart_axis17.rb +1 -1
  176. data/test/regression/test_chart_axis18.rb +1 -1
  177. data/test/regression/test_chart_axis19.rb +1 -1
  178. data/test/regression/test_chart_axis20.rb +1 -1
  179. data/test/regression/test_chart_axis21.rb +1 -1
  180. data/test/regression/test_chart_axis22.rb +1 -1
  181. data/test/regression/test_chart_axis23.rb +1 -1
  182. data/test/regression/test_chart_axis24.rb +1 -1
  183. data/test/regression/test_chart_axis25.rb +1 -1
  184. data/test/regression/test_chart_axis26.rb +1 -1
  185. data/test/regression/test_chart_axis27.rb +1 -1
  186. data/test/regression/test_chart_axis28.rb +1 -1
  187. data/test/regression/test_chart_axis29.rb +1 -1
  188. data/test/regression/test_chart_axis30.rb +1 -1
  189. data/test/regression/test_chart_axis31.rb +1 -1
  190. data/test/regression/test_chart_axis32.rb +1 -1
  191. data/test/regression/test_chart_axis33.rb +1 -1
  192. data/test/regression/test_chart_axis34.rb +1 -1
  193. data/test/regression/test_chart_axis35.rb +1 -1
  194. data/test/regression/test_chart_axis36.rb +1 -1
  195. data/test/regression/test_chart_axis37.rb +1 -1
  196. data/test/regression/test_chart_axis38.rb +1 -1
  197. data/test/regression/test_chart_axis39.rb +1 -1
  198. data/test/regression/test_chart_axis40.rb +44 -0
  199. data/test/regression/test_chart_bar01.rb +1 -1
  200. data/test/regression/test_chart_bar02.rb +1 -1
  201. data/test/regression/test_chart_bar03.rb +1 -1
  202. data/test/regression/test_chart_bar04.rb +1 -1
  203. data/test/regression/test_chart_bar05.rb +1 -1
  204. data/test/regression/test_chart_bar06.rb +1 -1
  205. data/test/regression/test_chart_bar07.rb +1 -1
  206. data/test/regression/test_chart_bar08.rb +1 -1
  207. data/test/regression/test_chart_bar09.rb +1 -1
  208. data/test/regression/test_chart_bar10.rb +1 -1
  209. data/test/regression/test_chart_bar11.rb +1 -1
  210. data/test/regression/test_chart_bar12.rb +1 -1
  211. data/test/regression/test_chart_bar13.rb +1 -1
  212. data/test/regression/test_chart_bar14.rb +1 -1
  213. data/test/regression/test_chart_bar15.rb +1 -1
  214. data/test/regression/test_chart_bar16.rb +1 -1
  215. data/test/regression/test_chart_bar17.rb +1 -1
  216. data/test/regression/test_chart_bar18.rb +1 -1
  217. data/test/regression/test_chart_bar19.rb +1 -1
  218. data/test/regression/test_chart_bar20.rb +1 -1
  219. data/test/regression/test_chart_bar21.rb +1 -1
  220. data/test/regression/test_chart_bar22.rb +1 -1
  221. data/test/regression/test_chart_bar23.rb +1 -1
  222. data/test/regression/test_chart_bar24.rb +1 -1
  223. data/test/regression/test_chart_blank01.rb +1 -1
  224. data/test/regression/test_chart_blank02.rb +1 -1
  225. data/test/regression/test_chart_blank03.rb +1 -1
  226. data/test/regression/test_chart_blank04.rb +1 -1
  227. data/test/regression/test_chart_blank05.rb +1 -1
  228. data/test/regression/test_chart_blank06.rb +1 -1
  229. data/test/regression/test_chart_chartarea01.rb +1 -1
  230. data/test/regression/test_chart_chartarea02.rb +1 -1
  231. data/test/regression/test_chart_chartarea03.rb +1 -1
  232. data/test/regression/test_chart_chartarea04.rb +1 -1
  233. data/test/regression/test_chart_chartarea05.rb +1 -1
  234. data/test/regression/test_chart_clustered01.rb +1 -1
  235. data/test/regression/test_chart_column01.rb +1 -1
  236. data/test/regression/test_chart_column02.rb +1 -1
  237. data/test/regression/test_chart_column03.rb +1 -1
  238. data/test/regression/test_chart_column04.rb +1 -1
  239. data/test/regression/test_chart_column05.rb +1 -1
  240. data/test/regression/test_chart_column06.rb +1 -1
  241. data/test/regression/test_chart_column07.rb +1 -1
  242. data/test/regression/test_chart_column08.rb +1 -1
  243. data/test/regression/test_chart_column09.rb +1 -1
  244. data/test/regression/test_chart_column10.rb +1 -1
  245. data/test/regression/test_chart_column11.rb +1 -1
  246. data/test/regression/test_chart_column12.rb +1 -1
  247. data/test/regression/test_chart_combined01.rb +1 -1
  248. data/test/regression/test_chart_combined02.rb +1 -1
  249. data/test/regression/test_chart_combined03.rb +1 -1
  250. data/test/regression/test_chart_combined04.rb +1 -1
  251. data/test/regression/test_chart_combined05.rb +1 -1
  252. data/test/regression/test_chart_combined06.rb +1 -1
  253. data/test/regression/test_chart_combined07.rb +1 -1
  254. data/test/regression/test_chart_combined08.rb +1 -1
  255. data/test/regression/test_chart_combined09.rb +50 -0
  256. data/test/regression/test_chart_crossing01.rb +1 -1
  257. data/test/regression/test_chart_crossing02.rb +1 -1
  258. data/test/regression/test_chart_crossing03.rb +1 -1
  259. data/test/regression/test_chart_crossing04.rb +1 -1
  260. data/test/regression/test_chart_data_labels01.rb +1 -1
  261. data/test/regression/test_chart_data_labels02.rb +1 -1
  262. data/test/regression/test_chart_data_labels03.rb +1 -1
  263. data/test/regression/test_chart_data_labels04.rb +1 -1
  264. data/test/regression/test_chart_data_labels05.rb +1 -1
  265. data/test/regression/test_chart_data_labels06.rb +1 -1
  266. data/test/regression/test_chart_data_labels07.rb +1 -1
  267. data/test/regression/test_chart_data_labels08.rb +1 -1
  268. data/test/regression/test_chart_data_labels09.rb +1 -1
  269. data/test/regression/test_chart_data_labels10.rb +1 -1
  270. data/test/regression/test_chart_data_labels11.rb +1 -1
  271. data/test/regression/test_chart_data_labels12.rb +1 -1
  272. data/test/regression/test_chart_data_labels13.rb +1 -1
  273. data/test/regression/test_chart_data_labels14.rb +1 -1
  274. data/test/regression/test_chart_data_labels15.rb +1 -1
  275. data/test/regression/test_chart_data_labels16.rb +1 -1
  276. data/test/regression/test_chart_data_labels17.rb +1 -1
  277. data/test/regression/test_chart_data_labels18.rb +1 -1
  278. data/test/regression/test_chart_data_labels19.rb +1 -1
  279. data/test/regression/test_chart_data_labels20.rb +1 -1
  280. data/test/regression/test_chart_data_labels21.rb +1 -1
  281. data/test/regression/test_chart_data_labels22.rb +1 -1
  282. data/test/regression/test_chart_data_labels23.rb +1 -1
  283. data/test/regression/test_chart_data_labels24.rb +1 -1
  284. data/test/regression/test_chart_date01.rb +1 -1
  285. data/test/regression/test_chart_date02.rb +1 -1
  286. data/test/regression/test_chart_date03.rb +1 -1
  287. data/test/regression/test_chart_date04.rb +1 -1
  288. data/test/regression/test_chart_date05.rb +1 -1
  289. data/test/regression/test_chart_display_units01.rb +1 -1
  290. data/test/regression/test_chart_display_units02.rb +1 -1
  291. data/test/regression/test_chart_display_units03.rb +1 -1
  292. data/test/regression/test_chart_display_units04.rb +1 -1
  293. data/test/regression/test_chart_display_units05.rb +1 -1
  294. data/test/regression/test_chart_display_units06.rb +1 -1
  295. data/test/regression/test_chart_display_units07.rb +1 -1
  296. data/test/regression/test_chart_display_units08.rb +1 -1
  297. data/test/regression/test_chart_display_units09.rb +1 -1
  298. data/test/regression/test_chart_display_units10.rb +1 -1
  299. data/test/regression/test_chart_display_units11.rb +1 -1
  300. data/test/regression/test_chart_display_units12.rb +1 -1
  301. data/test/regression/test_chart_doughnut01.rb +1 -1
  302. data/test/regression/test_chart_doughnut02.rb +1 -1
  303. data/test/regression/test_chart_doughnut03.rb +1 -1
  304. data/test/regression/test_chart_doughnut04.rb +1 -1
  305. data/test/regression/test_chart_doughnut05.rb +1 -1
  306. data/test/regression/test_chart_doughnut06.rb +1 -1
  307. data/test/regression/test_chart_drop_lines01.rb +1 -1
  308. data/test/regression/test_chart_drop_lines02.rb +1 -1
  309. data/test/regression/test_chart_drop_lines03.rb +1 -1
  310. data/test/regression/test_chart_drop_lines04.rb +1 -1
  311. data/test/regression/test_chart_errorbars01.rb +1 -1
  312. data/test/regression/test_chart_errorbars02.rb +1 -1
  313. data/test/regression/test_chart_errorbars03.rb +1 -1
  314. data/test/regression/test_chart_errorbars04.rb +1 -1
  315. data/test/regression/test_chart_errorbars05.rb +1 -1
  316. data/test/regression/test_chart_errorbars06.rb +1 -1
  317. data/test/regression/test_chart_errorbars07.rb +1 -1
  318. data/test/regression/test_chart_errorbars08.rb +1 -1
  319. data/test/regression/test_chart_errorbars09.rb +1 -1
  320. data/test/regression/test_chart_errorbars10.rb +1 -1
  321. data/test/regression/test_chart_font01.rb +1 -1
  322. data/test/regression/test_chart_font02.rb +1 -1
  323. data/test/regression/test_chart_font03.rb +1 -1
  324. data/test/regression/test_chart_font04.rb +1 -1
  325. data/test/regression/test_chart_font05.rb +1 -1
  326. data/test/regression/test_chart_font06.rb +1 -1
  327. data/test/regression/test_chart_font07.rb +1 -1
  328. data/test/regression/test_chart_font08.rb +1 -1
  329. data/test/regression/test_chart_font09.rb +1 -1
  330. data/test/regression/test_chart_format01.rb +1 -1
  331. data/test/regression/test_chart_format02.rb +1 -1
  332. data/test/regression/test_chart_format03.rb +1 -1
  333. data/test/regression/test_chart_format04.rb +1 -1
  334. data/test/regression/test_chart_format05.rb +1 -1
  335. data/test/regression/test_chart_format06.rb +1 -1
  336. data/test/regression/test_chart_format07.rb +1 -1
  337. data/test/regression/test_chart_format08.rb +1 -1
  338. data/test/regression/test_chart_format09.rb +1 -1
  339. data/test/regression/test_chart_format10.rb +1 -1
  340. data/test/regression/test_chart_format11.rb +1 -1
  341. data/test/regression/test_chart_format12.rb +1 -1
  342. data/test/regression/test_chart_format13.rb +1 -1
  343. data/test/regression/test_chart_format14.rb +1 -1
  344. data/test/regression/test_chart_format15.rb +1 -1
  345. data/test/regression/test_chart_format16.rb +1 -1
  346. data/test/regression/test_chart_format17.rb +1 -1
  347. data/test/regression/test_chart_format18.rb +1 -1
  348. data/test/regression/test_chart_format19.rb +1 -1
  349. data/test/regression/test_chart_format20.rb +1 -1
  350. data/test/regression/test_chart_gap01.rb +1 -1
  351. data/test/regression/test_chart_gap02.rb +1 -1
  352. data/test/regression/test_chart_gap03.rb +1 -1
  353. data/test/regression/test_chart_gap04.rb +1 -1
  354. data/test/regression/test_chart_gap05.rb +1 -1
  355. data/test/regression/test_chart_gradient01.rb +1 -1
  356. data/test/regression/test_chart_gradient02.rb +1 -1
  357. data/test/regression/test_chart_gradient03.rb +1 -1
  358. data/test/regression/test_chart_gradient04.rb +1 -1
  359. data/test/regression/test_chart_gradient05.rb +1 -1
  360. data/test/regression/test_chart_gradient06.rb +1 -1
  361. data/test/regression/test_chart_gradient07.rb +1 -1
  362. data/test/regression/test_chart_gradient08.rb +1 -1
  363. data/test/regression/test_chart_gradient09.rb +1 -1
  364. data/test/regression/test_chart_gradient10.rb +1 -1
  365. data/test/regression/test_chart_gradient11.rb +1 -1
  366. data/test/regression/test_chart_gradient12.rb +1 -1
  367. data/test/regression/test_chart_gradient13.rb +1 -1
  368. data/test/regression/test_chart_gridlines01.rb +1 -1
  369. data/test/regression/test_chart_gridlines02.rb +1 -1
  370. data/test/regression/test_chart_gridlines03.rb +1 -1
  371. data/test/regression/test_chart_gridlines04.rb +1 -1
  372. data/test/regression/test_chart_gridlines05.rb +1 -1
  373. data/test/regression/test_chart_gridlines06.rb +1 -1
  374. data/test/regression/test_chart_gridlines07.rb +1 -1
  375. data/test/regression/test_chart_gridlines08.rb +1 -1
  376. data/test/regression/test_chart_gridlines09.rb +1 -1
  377. data/test/regression/test_chart_layout01.rb +1 -1
  378. data/test/regression/test_chart_layout02.rb +1 -1
  379. data/test/regression/test_chart_layout03.rb +1 -1
  380. data/test/regression/test_chart_layout04.rb +1 -1
  381. data/test/regression/test_chart_layout05.rb +1 -1
  382. data/test/regression/test_chart_layout06.rb +1 -1
  383. data/test/regression/test_chart_layout07.rb +1 -1
  384. data/test/regression/test_chart_layout08.rb +1 -1
  385. data/test/regression/test_chart_legend01.rb +1 -1
  386. data/test/regression/test_chart_legend02.rb +1 -1
  387. data/test/regression/test_chart_line01.rb +1 -1
  388. data/test/regression/test_chart_line02.rb +1 -1
  389. data/test/regression/test_chart_line03.rb +1 -1
  390. data/test/regression/test_chart_line04.rb +1 -1
  391. data/test/regression/test_chart_name01.rb +1 -1
  392. data/test/regression/test_chart_name02.rb +1 -1
  393. data/test/regression/test_chart_name03.rb +1 -1
  394. data/test/regression/test_chart_order01.rb +1 -1
  395. data/test/regression/test_chart_order02.rb +1 -1
  396. data/test/regression/test_chart_order03.rb +1 -1
  397. data/test/regression/test_chart_pattern01.rb +49 -0
  398. data/test/regression/test_chart_pattern02.rb +106 -0
  399. data/test/regression/test_chart_pattern03.rb +105 -0
  400. data/test/regression/test_chart_pattern04.rb +105 -0
  401. data/test/regression/test_chart_pattern05.rb +105 -0
  402. data/test/regression/test_chart_pattern06.rb +105 -0
  403. data/test/regression/test_chart_pattern07.rb +105 -0
  404. data/test/regression/test_chart_pattern08.rb +105 -0
  405. data/test/regression/test_chart_pattern09.rb +57 -0
  406. data/test/regression/test_chart_pattern10.rb +57 -0
  407. data/test/regression/test_chart_pie01.rb +1 -1
  408. data/test/regression/test_chart_pie02.rb +1 -1
  409. data/test/regression/test_chart_pie03.rb +1 -1
  410. data/test/regression/test_chart_pie04.rb +1 -1
  411. data/test/regression/test_chart_pie05.rb +1 -1
  412. data/test/regression/test_chart_points01.rb +1 -1
  413. data/test/regression/test_chart_points02.rb +1 -1
  414. data/test/regression/test_chart_points03.rb +1 -1
  415. data/test/regression/test_chart_points04.rb +1 -1
  416. data/test/regression/test_chart_points05.rb +1 -1
  417. data/test/regression/test_chart_points06.rb +1 -1
  418. data/test/regression/test_chart_radar01.rb +1 -1
  419. data/test/regression/test_chart_radar02.rb +1 -1
  420. data/test/regression/test_chart_radar03.rb +1 -1
  421. data/test/regression/test_chart_scatter01.rb +1 -1
  422. data/test/regression/test_chart_scatter02.rb +1 -1
  423. data/test/regression/test_chart_scatter03.rb +1 -1
  424. data/test/regression/test_chart_scatter04.rb +1 -1
  425. data/test/regression/test_chart_scatter05.rb +1 -1
  426. data/test/regression/test_chart_scatter06.rb +1 -1
  427. data/test/regression/test_chart_scatter07.rb +1 -1
  428. data/test/regression/test_chart_scatter08.rb +1 -1
  429. data/test/regression/test_chart_scatter09.rb +1 -1
  430. data/test/regression/test_chart_scatter10.rb +1 -1
  431. data/test/regression/test_chart_scatter11.rb +1 -1
  432. data/test/regression/test_chart_scatter12.rb +1 -1
  433. data/test/regression/test_chart_scatter13.rb +1 -1
  434. data/test/regression/test_chart_scatter14.rb +1 -1
  435. data/test/regression/test_chart_scatter15.rb +1 -1
  436. data/test/regression/test_chart_size01.rb +1 -1
  437. data/test/regression/test_chart_size02.rb +1 -1
  438. data/test/regression/test_chart_size03.rb +1 -1
  439. data/test/regression/test_chart_size04.rb +1 -1
  440. data/test/regression/test_chart_size05.rb +1 -1
  441. data/test/regression/test_chart_sparse01.rb +1 -1
  442. data/test/regression/test_chart_stock01.rb +1 -1
  443. data/test/regression/test_chart_stock02.rb +1 -1
  444. data/test/regression/test_chart_str01.rb +1 -1
  445. data/test/regression/test_chart_str02.rb +1 -1
  446. data/test/regression/test_chart_table01.rb +1 -1
  447. data/test/regression/test_chart_table02.rb +1 -1
  448. data/test/regression/test_chart_title01.rb +1 -1
  449. data/test/regression/test_chart_title02.rb +1 -1
  450. data/test/regression/test_chartsheet01.rb +1 -1
  451. data/test/regression/test_chartsheet02.rb +1 -1
  452. data/test/regression/test_chartsheet03.rb +1 -1
  453. data/test/regression/test_chartsheet04.rb +1 -1
  454. data/test/regression/test_chartsheet05.rb +1 -1
  455. data/test/regression/test_chartsheet06.rb +1 -1
  456. data/test/regression/test_chartsheet07.rb +1 -1
  457. data/test/regression/test_chartsheet08.rb +1 -1
  458. data/test/regression/test_chartsheet09.rb +1 -1
  459. data/test/regression/test_comment01.rb +1 -1
  460. data/test/regression/test_comment02.rb +1 -1
  461. data/test/regression/test_comment03.rb +1 -1
  462. data/test/regression/test_comment04.rb +1 -1
  463. data/test/regression/test_comment06.rb +1 -1
  464. data/test/regression/test_comment07.rb +1 -1
  465. data/test/regression/test_comment08.rb +1 -1
  466. data/test/regression/test_comment09.rb +1 -1
  467. data/test/regression/test_comment10.rb +1 -1
  468. data/test/regression/test_comment11.rb +1 -1
  469. data/test/regression/test_comment12.rb +1 -1
  470. data/test/regression/test_cond_format01.rb +1 -1
  471. data/test/regression/test_cond_format02.rb +1 -1
  472. data/test/regression/test_cond_format03.rb +1 -1
  473. data/test/regression/test_cond_format04.rb +1 -1
  474. data/test/regression/test_cond_format05.rb +1 -1
  475. data/test/regression/test_cond_format06.rb +1 -1
  476. data/test/regression/test_cond_format07.rb +1 -1
  477. data/test/regression/test_cond_format08.rb +1 -1
  478. data/test/regression/test_cond_format10.rb +1 -1
  479. data/test/regression/test_cond_format11.rb +1 -1
  480. data/test/regression/test_cond_format12.rb +1 -1
  481. data/test/regression/test_cond_format13.rb +1 -1
  482. data/test/regression/test_custom_colors01.rb +1 -1
  483. data/test/regression/test_data_validation01.rb +1 -1
  484. data/test/regression/test_data_validation02.rb +1 -1
  485. data/test/regression/test_data_validation03.rb +1 -1
  486. data/test/regression/test_data_validation04.rb +2 -2
  487. data/test/regression/test_data_validation05.rb +2 -2
  488. data/test/regression/test_data_validation08.rb +24 -0
  489. data/test/regression/test_date_1904_01.rb +1 -1
  490. data/test/regression/test_date_1904_02.rb +1 -1
  491. data/test/regression/test_date_examples01.rb +1 -1
  492. data/test/regression/test_default_format01.rb +1 -1
  493. data/test/regression/test_default_row01.rb +1 -1
  494. data/test/regression/test_default_row02.rb +1 -1
  495. data/test/regression/test_default_row03.rb +1 -1
  496. data/test/regression/test_default_row04.rb +1 -1
  497. data/test/regression/test_default_row05.rb +32 -0
  498. data/test/regression/test_defined_name01.rb +1 -1
  499. data/test/regression/test_defined_name02.rb +1 -1
  500. data/test/regression/test_defined_name03.rb +1 -1
  501. data/test/regression/test_defined_name04.rb +15 -15
  502. data/test/regression/test_escapes01.rb +1 -1
  503. data/test/regression/test_escapes02.rb +1 -1
  504. data/test/regression/test_escapes03.rb +1 -1
  505. data/test/regression/test_escapes04.rb +1 -1
  506. data/test/regression/test_escapes05.rb +1 -1
  507. data/test/regression/test_escapes06.rb +1 -1
  508. data/test/regression/test_escapes07.rb +1 -1
  509. data/test/regression/test_escapes08.rb +1 -1
  510. data/test/regression/test_excel2003_style01.rb +1 -1
  511. data/test/regression/test_excel2003_style02.rb +1 -1
  512. data/test/regression/test_excel2003_style03.rb +1 -1
  513. data/test/regression/test_excel2003_style04.rb +1 -1
  514. data/test/regression/test_excel2003_style05.rb +1 -1
  515. data/test/regression/test_excel2003_style06.rb +1 -1
  516. data/test/regression/test_excel2003_style07.rb +1 -1
  517. data/test/regression/test_excel2003_style08.rb +1 -1
  518. data/test/regression/test_firstsheet01.rb +1 -1
  519. data/test/regression/test_fit_to_pages01.rb +1 -1
  520. data/test/regression/test_fit_to_pages02.rb +1 -1
  521. data/test/regression/test_fit_to_pages03.rb +1 -1
  522. data/test/regression/test_fit_to_pages04.rb +1 -1
  523. data/test/regression/test_fit_to_pages05.rb +1 -1
  524. data/test/regression/test_format01.rb +1 -1
  525. data/test/regression/test_format02.rb +1 -1
  526. data/test/regression/test_format03.rb +1 -1
  527. data/test/regression/test_format04.rb +1 -1
  528. data/test/regression/test_format05.rb +1 -1
  529. data/test/regression/test_format11.rb +1 -1
  530. data/test/regression/test_format12.rb +1 -1
  531. data/test/regression/test_format13.rb +31 -0
  532. data/test/regression/test_formula_results01.rb +1 -1
  533. data/test/regression/test_gridlines01.rb +1 -1
  534. data/test/regression/test_header01.rb +1 -1
  535. data/test/regression/test_header02.rb +1 -1
  536. data/test/regression/test_header03.rb +1 -1
  537. data/test/regression/test_header_image01.rb +1 -1
  538. data/test/regression/test_header_image02.rb +1 -1
  539. data/test/regression/test_header_image03.rb +1 -1
  540. data/test/regression/test_header_image04.rb +1 -1
  541. data/test/regression/test_header_image05.rb +1 -1
  542. data/test/regression/test_header_image06.rb +1 -1
  543. data/test/regression/test_header_image07.rb +1 -1
  544. data/test/regression/test_header_image08.rb +1 -1
  545. data/test/regression/test_header_image09.rb +1 -1
  546. data/test/regression/test_header_image10.rb +1 -1
  547. data/test/regression/test_header_image11.rb +1 -1
  548. data/test/regression/test_header_image12.rb +1 -1
  549. data/test/regression/test_header_image13.rb +1 -1
  550. data/test/regression/test_header_image14.rb +1 -1
  551. data/test/regression/test_hide01.rb +1 -1
  552. data/test/regression/test_hyperlink01.rb +1 -1
  553. data/test/regression/test_hyperlink02.rb +1 -1
  554. data/test/regression/test_hyperlink03.rb +1 -1
  555. data/test/regression/test_hyperlink04.rb +1 -1
  556. data/test/regression/test_hyperlink05.rb +1 -1
  557. data/test/regression/test_hyperlink06.rb +1 -1
  558. data/test/regression/test_hyperlink07.rb +1 -1
  559. data/test/regression/test_hyperlink08.rb +1 -1
  560. data/test/regression/test_hyperlink09.rb +1 -1
  561. data/test/regression/test_hyperlink10.rb +1 -1
  562. data/test/regression/test_hyperlink11.rb +1 -1
  563. data/test/regression/test_hyperlink12.rb +1 -1
  564. data/test/regression/test_hyperlink13.rb +1 -1
  565. data/test/regression/test_hyperlink14.rb +1 -1
  566. data/test/regression/test_hyperlink15.rb +1 -1
  567. data/test/regression/test_hyperlink16.rb +1 -1
  568. data/test/regression/test_hyperlink17.rb +1 -1
  569. data/test/regression/test_hyperlink18.rb +1 -1
  570. data/test/regression/test_hyperlink20.rb +1 -1
  571. data/test/regression/test_hyperlink21.rb +1 -1
  572. data/test/regression/test_hyperlink22.rb +24 -0
  573. data/test/regression/test_hyperlink23.rb +24 -0
  574. data/test/regression/test_hyperlink24.rb +24 -0
  575. data/test/regression/test_image01.rb +1 -1
  576. data/test/regression/test_image02.rb +1 -1
  577. data/test/regression/test_image03.rb +1 -1
  578. data/test/regression/test_image04.rb +1 -1
  579. data/test/regression/test_image05.rb +1 -1
  580. data/test/regression/test_image06.rb +1 -1
  581. data/test/regression/test_image07.rb +1 -1
  582. data/test/regression/test_image08.rb +1 -1
  583. data/test/regression/test_image09.rb +1 -1
  584. data/test/regression/test_image10.rb +1 -1
  585. data/test/regression/test_image11.rb +1 -1
  586. data/test/regression/test_image12.rb +1 -1
  587. data/test/regression/test_image13.rb +1 -1
  588. data/test/regression/test_image14.rb +1 -1
  589. data/test/regression/test_image15.rb +1 -1
  590. data/test/regression/test_image16.rb +1 -1
  591. data/test/regression/test_image17.rb +1 -1
  592. data/test/regression/test_image18.rb +1 -1
  593. data/test/regression/test_image19.rb +1 -1
  594. data/test/regression/test_image22.rb +1 -1
  595. data/test/regression/test_image23.rb +1 -1
  596. data/test/regression/test_image24.rb +1 -1
  597. data/test/regression/test_image25.rb +1 -1
  598. data/test/regression/test_image26.rb +1 -1
  599. data/test/regression/test_image27.rb +1 -1
  600. data/test/regression/test_image28.rb +27 -0
  601. data/test/regression/test_image29.rb +27 -0
  602. data/test/regression/test_image30.rb +27 -0
  603. data/test/regression/test_image31.rb +30 -0
  604. data/test/regression/test_image32.rb +28 -0
  605. data/test/regression/test_image33.rb +32 -0
  606. data/test/regression/test_landscape01.rb +1 -1
  607. data/test/regression/test_macro01.rb +1 -1
  608. data/test/regression/test_merge_cells01.rb +1 -1
  609. data/test/regression/test_merge_range01.rb +1 -1
  610. data/test/regression/test_merge_range02.rb +1 -1
  611. data/test/regression/test_merge_range03.rb +1 -1
  612. data/test/regression/test_merge_range04.rb +1 -1
  613. data/test/regression/test_merge_range05.rb +1 -1
  614. data/test/regression/test_outline01.rb +1 -1
  615. data/test/regression/test_outline02.rb +1 -1
  616. data/test/regression/test_outline03.rb +1 -1
  617. data/test/regression/test_outline04.rb +1 -1
  618. data/test/regression/test_outline05.rb +1 -1
  619. data/test/regression/test_outline06.rb +1 -1
  620. data/test/regression/test_page_breaks01.rb +1 -1
  621. data/test/regression/test_page_breaks02.rb +1 -1
  622. data/test/regression/test_page_breaks03.rb +1 -1
  623. data/test/regression/test_page_breaks04.rb +1 -1
  624. data/test/regression/test_page_breaks05.rb +1 -1
  625. data/test/regression/test_page_breaks06.rb +1 -1
  626. data/test/regression/test_page_view01.rb +1 -1
  627. data/test/regression/test_panes01.rb +1 -1
  628. data/test/regression/test_print_across01.rb +1 -1
  629. data/test/regression/test_print_area01.rb +1 -1
  630. data/test/regression/test_print_area02.rb +1 -1
  631. data/test/regression/test_print_area03.rb +1 -1
  632. data/test/regression/test_print_area04.rb +1 -1
  633. data/test/regression/test_print_area05.rb +1 -1
  634. data/test/regression/test_print_area06.rb +1 -1
  635. data/test/regression/test_print_area07.rb +1 -1
  636. data/test/regression/test_print_options01.rb +1 -1
  637. data/test/regression/test_print_options02.rb +1 -1
  638. data/test/regression/test_print_options03.rb +1 -1
  639. data/test/regression/test_print_options04.rb +1 -1
  640. data/test/regression/test_print_options05.rb +1 -1
  641. data/test/regression/test_print_options06.rb +1 -1
  642. data/test/regression/test_print_options07.rb +1 -1
  643. data/test/regression/test_print_scale01.rb +1 -1
  644. data/test/regression/test_print_scale02.rb +1 -1
  645. data/test/regression/test_properties01.rb +1 -1
  646. data/test/regression/test_properties02.rb +28 -0
  647. data/test/regression/test_protect01.rb +1 -1
  648. data/test/regression/test_protect02.rb +1 -1
  649. data/test/regression/test_protect03.rb +1 -1
  650. data/test/regression/test_quote_name01.rb +1 -1
  651. data/test/regression/test_quote_name03.rb +1 -1
  652. data/test/regression/test_quote_name04.rb +1 -1
  653. data/test/regression/test_repeat01.rb +1 -1
  654. data/test/regression/test_repeat02.rb +1 -1
  655. data/test/regression/test_repeat03.rb +1 -1
  656. data/test/regression/test_repeat04.rb +1 -1
  657. data/test/regression/test_repeat05.rb +1 -1
  658. data/test/regression/test_rich_string01.rb +1 -1
  659. data/test/regression/test_rich_string02.rb +1 -1
  660. data/test/regression/test_rich_string03.rb +1 -1
  661. data/test/regression/test_rich_string04.rb +1 -1
  662. data/test/regression/test_rich_string05.rb +1 -1
  663. data/test/regression/test_rich_string06.rb +1 -1
  664. data/test/regression/test_rich_string07.rb +1 -1
  665. data/test/regression/test_rich_string08.rb +1 -1
  666. data/test/regression/test_rich_string09.rb +1 -1
  667. data/test/regression/test_rich_string10.rb +1 -1
  668. data/test/regression/test_rich_string11.rb +1 -1
  669. data/test/regression/test_rich_string12.rb +1 -1
  670. data/test/regression/test_row_col_format01.rb +1 -1
  671. data/test/regression/test_row_col_format02.rb +1 -1
  672. data/test/regression/test_row_col_format03.rb +1 -1
  673. data/test/regression/test_row_col_format04.rb +1 -1
  674. data/test/regression/test_row_col_format05.rb +1 -1
  675. data/test/regression/test_row_col_format06.rb +1 -1
  676. data/test/regression/test_row_col_format07.rb +1 -1
  677. data/test/regression/test_row_col_format08.rb +1 -1
  678. data/test/regression/test_row_col_format09.rb +1 -1
  679. data/test/regression/test_row_col_format10.rb +1 -1
  680. data/test/regression/test_row_col_format11.rb +1 -1
  681. data/test/regression/test_row_col_format12.rb +1 -1
  682. data/test/regression/test_row_col_format13.rb +1 -1
  683. data/test/regression/test_row_col_format14.rb +1 -1
  684. data/test/regression/test_selection01.rb +1 -1
  685. data/test/regression/test_selection02.rb +1 -1
  686. data/test/regression/test_set_column01.rb +1 -1
  687. data/test/regression/test_set_column02.rb +1 -1
  688. data/test/regression/test_set_column03.rb +1 -1
  689. data/test/regression/test_set_column04.rb +1 -1
  690. data/test/regression/test_set_column05.rb +1 -1
  691. data/test/regression/test_set_column06.rb +1 -1
  692. data/test/regression/test_set_column07.rb +1 -1
  693. data/test/regression/test_set_column08.rb +1 -1
  694. data/test/regression/test_set_column09.rb +1 -1
  695. data/test/regression/test_set_print_scale01.rb +1 -1
  696. data/test/regression/test_set_start_page01.rb +1 -1
  697. data/test/regression/test_set_start_page02.rb +1 -1
  698. data/test/regression/test_set_start_page03.rb +1 -1
  699. data/test/regression/test_shape01.rb +1 -1
  700. data/test/regression/test_shape02.rb +1 -1
  701. data/test/regression/test_shape03.rb +1 -1
  702. data/test/regression/test_shape04.rb +1 -1
  703. data/test/regression/test_shape_connect01.rb +1 -1
  704. data/test/regression/test_shape_connect02.rb +1 -1
  705. data/test/regression/test_shape_connect03.rb +1 -1
  706. data/test/regression/test_shape_connect04.rb +1 -1
  707. data/test/regression/test_shape_scale01.rb +1 -1
  708. data/test/regression/test_shape_stencil01.rb +1 -1
  709. data/test/regression/test_shared_strings01.rb +1 -1
  710. data/test/regression/test_shared_strings02.rb +1 -1
  711. data/test/regression/test_simple01.rb +1 -1
  712. data/test/regression/test_simple02.rb +1 -1
  713. data/test/regression/test_simple03.rb +1 -1
  714. data/test/regression/test_simple04.rb +1 -1
  715. data/test/regression/test_simple05.rb +1 -1
  716. data/test/regression/test_tab_color01.rb +1 -1
  717. data/test/regression/test_table01.rb +1 -1
  718. data/test/regression/test_table02.rb +1 -1
  719. data/test/regression/test_table03.rb +1 -1
  720. data/test/regression/test_table04.rb +1 -1
  721. data/test/regression/test_table05.rb +1 -1
  722. data/test/regression/test_table06.rb +1 -1
  723. data/test/regression/test_table07.rb +1 -1
  724. data/test/regression/test_table08.rb +1 -1
  725. data/test/regression/test_table09.rb +1 -1
  726. data/test/regression/test_table10.rb +1 -1
  727. data/test/regression/test_table11.rb +1 -1
  728. data/test/regression/test_table12.rb +1 -1
  729. data/test/regression/test_table13.rb +1 -1
  730. data/test/regression/test_table14.rb +1 -1
  731. data/test/regression/test_table15.rb +1 -1
  732. data/test/regression/test_table16.rb +1 -1
  733. data/test/regression/test_table17.rb +1 -1
  734. data/test/regression/test_tutorial01.rb +1 -1
  735. data/test/regression/test_tutorial02.rb +1 -1
  736. data/test/regression/test_tutorial03.rb +1 -1
  737. data/test/regression/test_update_range_format_with_params.rb +42 -0
  738. data/test/regression/test_urls_as_strings.rb +1 -1
  739. data/test/regression/test_utf8_01.rb +1 -1
  740. data/test/regression/test_utf8_03.rb +1 -1
  741. data/test/regression/test_utf8_04.rb +1 -1
  742. data/test/regression/test_utf8_05.rb +1 -1
  743. data/test/regression/test_utf8_06.rb +1 -1
  744. data/test/regression/test_utf8_07.rb +1 -1
  745. data/test/regression/test_utf8_08.rb +1 -1
  746. data/test/regression/test_utf8_09.rb +1 -1
  747. data/test/regression/test_utf8_10.rb +1 -1
  748. data/test/regression/test_vml01.rb +1 -1
  749. data/test/regression/test_vml02.rb +1 -1
  750. data/test/regression/test_vml03.rb +1 -1
  751. data/test/regression/xlsx_files/chart_axis40.xlsx +0 -0
  752. data/test/regression/xlsx_files/chart_combined09.xlsx +0 -0
  753. data/test/regression/xlsx_files/chart_pattern01.xlsx +0 -0
  754. data/test/regression/xlsx_files/chart_pattern02.xlsx +0 -0
  755. data/test/regression/xlsx_files/chart_pattern03.xlsx +0 -0
  756. data/test/regression/xlsx_files/chart_pattern04.xlsx +0 -0
  757. data/test/regression/xlsx_files/chart_pattern05.xlsx +0 -0
  758. data/test/regression/xlsx_files/chart_pattern06.xlsx +0 -0
  759. data/test/regression/xlsx_files/chart_pattern07.xlsx +0 -0
  760. data/test/regression/xlsx_files/chart_pattern08.xlsx +0 -0
  761. data/test/regression/xlsx_files/chart_pattern09.xlsx +0 -0
  762. data/test/regression/xlsx_files/chart_pattern10.xlsx +0 -0
  763. data/test/regression/xlsx_files/data_validation08.xlsx +0 -0
  764. data/test/regression/xlsx_files/default_row05.xlsx +0 -0
  765. data/test/regression/xlsx_files/format13.xlsx +0 -0
  766. data/test/regression/xlsx_files/hyperlink22.xlsx +0 -0
  767. data/test/regression/xlsx_files/hyperlink23.xlsx +0 -0
  768. data/test/regression/xlsx_files/hyperlink24.xlsx +0 -0
  769. data/test/regression/xlsx_files/image28.xlsx +0 -0
  770. data/test/regression/xlsx_files/image29.xlsx +0 -0
  771. data/test/regression/xlsx_files/image30.xlsx +0 -0
  772. data/test/regression/xlsx_files/image31.xlsx +0 -0
  773. data/test/regression/xlsx_files/image32.xlsx +0 -0
  774. data/test/regression/xlsx_files/image33.xlsx +0 -0
  775. data/test/regression/xlsx_files/properties02.xlsx +0 -0
  776. data/test/regression/xlsx_files/table18.xlsx +0 -0
  777. data/test/regression/xlsx_files/table19.xlsx +0 -0
  778. data/test/regression/xlsx_files/update_range_format_with_params.xlsx +0 -0
  779. data/test/run_test.rb +9 -0
  780. data/test/test_delete_files.rb +3 -3
  781. data/test/test_example_match.rb +1 -1
  782. data/test/test_option_hash_for_workbook.rb +1 -1
  783. data/test/test_xml_writer_simple.rb +1 -1
  784. data/test/workbook/test_define_name.rb +1 -1
  785. data/test/workbook/test_get_chart_range.rb +3 -5
  786. data/test/workbook/test_sort_defined_names.rb +1 -1
  787. data/test/workbook/test_workbook_01.rb +1 -1
  788. data/test/workbook/test_workbook_02.rb +1 -1
  789. data/test/workbook/test_workbook_03.rb +1 -1
  790. data/test/workbook/test_write_calc_pr.rb +1 -1
  791. data/test/workbook/test_write_defined_name.rb +1 -1
  792. data/test/workbook/test_write_defined_names.rb +1 -1
  793. data/test/worksheet/test_calculate_spans.rb +1 -1
  794. data/test/worksheet/test_cond_format_01.rb +1 -1
  795. data/test/worksheet/test_cond_format_02.rb +1 -1
  796. data/test/worksheet/test_cond_format_03.rb +1 -1
  797. data/test/worksheet/test_cond_format_04.rb +1 -1
  798. data/test/worksheet/test_cond_format_05.rb +1 -1
  799. data/test/worksheet/test_cond_format_06.rb +1 -1
  800. data/test/worksheet/test_cond_format_07.rb +1 -1
  801. data/test/worksheet/test_cond_format_08.rb +1 -1
  802. data/test/worksheet/test_cond_format_09.rb +1 -1
  803. data/test/worksheet/test_cond_format_10.rb +1 -1
  804. data/test/worksheet/test_cond_format_11.rb +1 -1
  805. data/test/worksheet/test_cond_format_12.rb +1 -1
  806. data/test/worksheet/test_cond_format_13.rb +1 -1
  807. data/test/worksheet/test_cond_format_14.rb +1 -1
  808. data/test/worksheet/test_cond_format_15.rb +1 -1
  809. data/test/worksheet/test_cond_format_16.rb +1 -1
  810. data/test/worksheet/test_cond_format_17.rb +1 -1
  811. data/test/worksheet/test_cond_format_18.rb +1 -1
  812. data/test/worksheet/test_cond_format_19.rb +1 -1
  813. data/test/worksheet/test_cond_format_20.rb +1 -1
  814. data/test/worksheet/test_cond_format_21.rb +90 -0
  815. data/test/worksheet/test_convert_date_time_01.rb +1 -1
  816. data/test/worksheet/test_convert_date_time_02.rb +1 -1
  817. data/test/worksheet/test_convert_date_time_03.rb +1 -1
  818. data/test/worksheet/test_convert_date_time_04.rb +1 -1
  819. data/test/worksheet/test_extract_filter_tokens.rb +1 -1
  820. data/test/worksheet/test_parse_filter_expression.rb +1 -1
  821. data/test/worksheet/test_position_object.rb +1 -1
  822. data/test/worksheet/test_repeat_formula.rb +1 -1
  823. data/test/worksheet/test_sparkline_01.rb +1 -1
  824. data/test/worksheet/test_sparkline_02.rb +1 -1
  825. data/test/worksheet/test_sparkline_03.rb +1 -1
  826. data/test/worksheet/test_sparkline_04.rb +1 -1
  827. data/test/worksheet/test_sparkline_05.rb +1 -1
  828. data/test/worksheet/test_sparkline_06.rb +1 -1
  829. data/test/worksheet/test_sparkline_07.rb +1 -1
  830. data/test/worksheet/test_sparkline_08.rb +1 -1
  831. data/test/worksheet/test_sparkline_09.rb +1 -1
  832. data/test/worksheet/test_sparkline_10.rb +1 -1
  833. data/test/worksheet/test_sparkline_11.rb +1 -1
  834. data/test/worksheet/test_sparkline_12.rb +94 -0
  835. data/test/worksheet/test_update_format_methods.rb +91 -0
  836. data/test/worksheet/test_worksheet_01.rb +1 -1
  837. data/test/worksheet/test_worksheet_02.rb +1 -1
  838. data/test/worksheet/test_worksheet_03.rb +1 -1
  839. data/test/worksheet/test_worksheet_04.rb +1 -1
  840. data/test/worksheet/test_write_array_formula_01.rb +1 -8
  841. data/test/worksheet/test_write_autofilter.rb +1 -1
  842. data/test/worksheet/test_write_brk.rb +1 -1
  843. data/test/worksheet/test_write_cell.rb +1 -1
  844. data/test/worksheet/test_write_cell_value.rb +1 -1
  845. data/test/worksheet/test_write_col_breaks.rb +1 -1
  846. data/test/worksheet/test_write_col_info.rb +1 -1
  847. data/test/worksheet/test_write_conditional_formatting.rb +1 -1
  848. data/test/worksheet/test_write_custom_filter.rb +1 -1
  849. data/test/worksheet/test_write_custom_filters.rb +1 -1
  850. data/test/worksheet/test_write_data_validation_01.rb +1 -1
  851. data/test/worksheet/test_write_data_validation_02.rb +15 -2
  852. data/test/worksheet/test_write_dimension.rb +1 -1
  853. data/test/worksheet/test_write_filter.rb +1 -1
  854. data/test/worksheet/test_write_filter_column.rb +1 -1
  855. data/test/worksheet/test_write_filters.rb +1 -1
  856. data/test/worksheet/test_write_formula_does_not_change_formula_string.rb +1 -1
  857. data/test/worksheet/test_write_header_footer.rb +1 -1
  858. data/test/worksheet/test_write_hyperlink.rb +1 -1
  859. data/test/worksheet/test_write_legacy_drawing.rb +1 -1
  860. data/test/worksheet/test_write_merge_cell.rb +1 -1
  861. data/test/worksheet/test_write_merge_cells.rb +1 -1
  862. data/test/worksheet/test_write_methods.rb +68 -177
  863. data/test/worksheet/test_write_page_margins.rb +1 -1
  864. data/test/worksheet/test_write_page_set_up_pr.rb +1 -1
  865. data/test/worksheet/test_write_page_setup.rb +1 -1
  866. data/test/worksheet/test_write_pane.rb +1 -1
  867. data/test/worksheet/test_write_phonetic_pr.rb +1 -1
  868. data/test/worksheet/test_write_print_options.rb +1 -1
  869. data/test/worksheet/test_write_row_breaks.rb +1 -1
  870. data/test/worksheet/test_write_row_element.rb +1 -1
  871. data/test/worksheet/test_write_selection.rb +1 -1
  872. data/test/worksheet/test_write_sheet_calc_pr.rb +1 -1
  873. data/test/worksheet/test_write_sheet_data.rb +1 -1
  874. data/test/worksheet/test_write_sheet_format_pr.rb +1 -1
  875. data/test/worksheet/test_write_sheet_pr.rb +1 -1
  876. data/test/worksheet/test_write_sheet_protection.rb +1 -1
  877. data/test/worksheet/test_write_sheet_view.rb +1 -1
  878. data/test/worksheet/test_write_sheet_view1.rb +1 -1
  879. data/test/worksheet/test_write_sheet_view2.rb +1 -1
  880. data/test/worksheet/test_write_sheet_view3.rb +1 -1
  881. data/test/worksheet/test_write_sheet_view4.rb +1 -1
  882. data/test/worksheet/test_write_sheet_view5.rb +1 -1
  883. data/test/worksheet/test_write_sheet_view6.rb +1 -1
  884. data/test/worksheet/test_write_sheet_view7.rb +1 -1
  885. data/test/worksheet/test_write_sheet_view8.rb +1 -1
  886. data/test/worksheet/test_write_sheet_view9.rb +1 -1
  887. data/test/worksheet/test_write_tab_color.rb +1 -1
  888. data/test/worksheet/test_write_worksheet_attributes.rb +1 -1
  889. data/write_xlsx.gemspec +3 -3
  890. metadata +124 -13
  891. data/test/test_col_name.rb +0 -13
  892. data/test/workbook/test_workbook_new.rb +0 -18
  893. data/test/worksheet/test_write_multiline_string_with_url.rb +0 -30
  894. data/test/worksheet/test_write_url.rb +0 -19
@@ -1 +1 @@
1
- WriteXLSX_VERSION = "0.85.8"
1
+ WriteXLSX_VERSION = "0.87.0"
@@ -726,7 +726,7 @@ def define_name(name, formula)
726
726
 
727
727
  # Raise if the sheet index wasn't found.
728
728
  if !sheet_index
729
- raise "Unknown sheet name #{sheetname} in defined_name()\n"
729
+ raise "Unknown sheet name #{sheetname} in defined_name()"
730
730
  end
731
731
 
732
732
  # Raise if the name contains invalid chars as defined by Excel help.
@@ -734,17 +734,17 @@ def define_name(name, formula)
734
734
  # http://office.microsoft.com/en-001/excel-help/define-and-use-names-in-formulas-HA010147120.aspx#BMsyntax_rules_for_names
735
735
  #
736
736
  if name =~ /\A[-0-9 !"#\$%&'\(\)\*\+,\.:;<=>\?@\[\]\^`\{\}~]/ || name =~ /.+[- !"#\$%&'\(\)\*\+,\\:;<=>\?@\[\]\^`\{\}~]/
737
- raise "Invalid characters in name '#{name}' used in defined_name()\n"
737
+ raise "Invalid characters in name '#{name}' used in defined_name()"
738
738
  end
739
739
 
740
740
  # Raise if the name looks like a cell name.
741
741
  if name =~ %r(^[a-zA-Z][a-zA-Z]?[a-dA-D]?[0-9]+$)
742
- raise "Invalid name '#{name}' looks like a cell name in defined_name()\n"
742
+ raise "Invalid name '#{name}' looks like a cell name in defined_name()"
743
743
  end
744
744
 
745
745
  # Raise if the name looks like a R1C1
746
746
  if name =~ /\A[rcRC]\Z/ || name =~ /\A[rcRC]\d+[rcRC]\d+\Z/
747
- raise "Invalid name '#{name}' like a RC cell ref in defined_name()\n"
747
+ raise "Invalid name '#{name}' like a RC cell ref in defined_name()"
748
748
  end
749
749
 
750
750
  @defined_names.push([ name, sheet_index, formula.sub(/^=/, '') ])
@@ -786,17 +786,18 @@ def set_properties(params)
786
786
 
787
787
  # List of valid input parameters.
788
788
  valid = {
789
- :title => 1,
790
- :subject => 1,
791
- :author => 1,
792
- :keywords => 1,
793
- :comments => 1,
794
- :last_author => 1,
795
- :created => 1,
796
- :category => 1,
797
- :manager => 1,
798
- :company => 1,
799
- :status => 1
789
+ :title => 1,
790
+ :subject => 1,
791
+ :author => 1,
792
+ :keywords => 1,
793
+ :comments => 1,
794
+ :last_author => 1,
795
+ :created => 1,
796
+ :category => 1,
797
+ :manager => 1,
798
+ :company => 1,
799
+ :status => 1,
800
+ :hyperlink_base => 1
800
801
  }
801
802
 
802
803
  # Check for valid input parameters.
@@ -927,7 +928,7 @@ def set_calc_mode(mode, calc_id = nil)
927
928
  #
928
929
  def set_custom_color(index, red = 0, green = 0, blue = 0)
929
930
  # Match a HTML #xxyyzz style parameter
930
- if red =~ /^#(\w\w)(\w\w)(\w\w)/
931
+ if red.to_s =~ /^#(\w\w)(\w\w)(\w\w)/
931
932
  red = $1.hex
932
933
  green = $2.hex
933
934
  blue = $3.hex
@@ -1632,9 +1633,10 @@ def prepare_vml_objects #:nodoc:
1632
1633
  #
1633
1634
  def prepare_tables
1634
1635
  table_id = 0
1636
+ seen = {}
1635
1637
 
1636
1638
  sheets.each do |sheet|
1637
- table_id += sheet.prepare_tables(table_id + 1)
1639
+ table_id += sheet.prepare_tables(table_id + 1, seen)
1638
1640
  end
1639
1641
  end
1640
1642
 
@@ -296,6 +296,7 @@ class Worksheet
296
296
  attr_reader :comments, :comments_author # :nodoc:
297
297
  attr_accessor :dxf_priority # :nodoc:
298
298
  attr_reader :vba_codename # :nodoc:
299
+ attr_writer :excel_version
299
300
 
300
301
  def initialize(workbook, index, name) #:nodoc:
301
302
  @writer = Package::XMLWriterSimple.new
@@ -721,7 +722,7 @@ def protect_default_settings # :nodoc:
721
722
  #
722
723
  def set_column(*args)
723
724
  # Check for a cell reference in A1 notation and substitute row and column
724
- if args[0] =~ /^\D/
725
+ if args[0].to_s =~ /^\D/
725
726
  row1, firstcol, row2, lastcol, *data = substitute_cellref(*args)
726
727
  else
727
728
  firstcol, lastcol, *data = args
@@ -2528,6 +2529,91 @@ def write_array_formula(*args)
2528
2529
  end
2529
2530
  end
2530
2531
 
2532
+ #
2533
+ # :call-seq:
2534
+ # update_format_with_params(row, col, format_params)
2535
+ #
2536
+ # Update formatting of the cell to the specified row and column (zero indexed).
2537
+ #
2538
+ # worksheet.update_format_with_params(0, 0, color: 'red')
2539
+ #
2540
+ # This method is used to update formatting of the cell keeping cell contents
2541
+ # and formatting.
2542
+ #
2543
+ # If the cell doesn't have CellData object, this method create a CellData
2544
+ # using write_blank method.
2545
+ # If the cell has CellData, this method fetch contents and format of cell from
2546
+ # the CellData object and recreate CellData using write method.
2547
+ #
2548
+ def update_format_with_params(*args)
2549
+ row, col, params = row_col_notation(args)
2550
+ raise WriteXLSXInsufficientArgumentError if row.nil? || col.nil? || params.nil?
2551
+
2552
+ # Check that row and col are valid and store max and min values
2553
+ check_dimensions(row, col)
2554
+ store_row_col_max_min_values(row, col)
2555
+
2556
+ format = nil
2557
+ cell_data = nil
2558
+ if @cell_data_table[row].nil? || @cell_data_table[row][col].nil?
2559
+ format = @workbook.add_format(params)
2560
+ write_blank(row, col, format)
2561
+ else
2562
+ if @cell_data_table[row][col].xf.nil?
2563
+ format = @workbook.add_format(params)
2564
+ cell_data = @cell_data_table[row][col]
2565
+ else
2566
+ format = @workbook.add_format
2567
+ cell_data = @cell_data_table[row][col]
2568
+ format.copy(cell_data.xf)
2569
+ format.set_format_properties(params)
2570
+ end
2571
+ # keep original value of cell
2572
+ if cell_data.is_a? FormulaCellData
2573
+ value = "=#{cell_data.token}"
2574
+ elsif cell_data.is_a? FormulaArrayCellData
2575
+ value = "{=#{cell_data.token}}"
2576
+ elsif cell_data.is_a? StringCellData
2577
+ value = @workbook.shared_strings.string(cell_data.data[:sst_id])
2578
+ else
2579
+ value = cell_data.data
2580
+ end
2581
+ write(row, col, value, format)
2582
+ end
2583
+ end
2584
+
2585
+ #
2586
+ # :call-seq:
2587
+ # update_range_format_with_params(row_first, col_first, row_last, col_last, format_params)
2588
+ #
2589
+ # Update formatting of cells in range to the specified row and column (zero indexed).
2590
+ #
2591
+ # worksheet.update_range_format_with_params(0, 0, 3, 3, color: 'red')
2592
+ #
2593
+ # This method is used to update formatting of multiple cells keeping cells' contents
2594
+ # and formatting.
2595
+ #
2596
+ #
2597
+ def update_range_format_with_params(*args)
2598
+ row_first, col_first, row_last, col_last, params = row_col_notation(args)
2599
+
2600
+ raise WriteXLSXInsufficientArgumentError if [row_first, col_first, row_last, col_last, params].include?(nil)
2601
+
2602
+ # Swap last row/col with first row/col as necessary
2603
+ row_first, row_last = row_last, row_first if row_first > row_last
2604
+ col_first, col_last = col_last, col_first if col_first > col_last
2605
+
2606
+ # Check that column number is valid and store the max value
2607
+ check_dimensions(row_last, col_last)
2608
+ store_row_col_max_min_values(row_last, col_last)
2609
+
2610
+ (row_first..row_last).each do |row|
2611
+ (col_first..col_last).each do |col|
2612
+ update_format_with_params(row, col, params)
2613
+ end
2614
+ end
2615
+ end
2616
+
2531
2617
  #
2532
2618
  # The outline_settings() method is used to control the appearance of
2533
2619
  # outlines in Excel. Outlines are described in
@@ -4203,7 +4289,7 @@ def conditional_formatting(*args)
4203
4289
  # :header
4204
4290
  # :formula
4205
4291
  # :total_string
4206
- # :total_function
4292
+ # :
4207
4293
  # :format
4208
4294
  #
4209
4295
  # The column data must be specified as an array of hash. For example to
@@ -4831,9 +4917,8 @@ def insert_button(*args)
4831
4917
  # :custom
4832
4918
  #
4833
4919
  # +:any+ is used to specify that the type of data is unrestricted.
4834
- # This is the same as not applying a data validation. It is only
4835
- # provided for completeness and isn't used very often in the
4836
- # context of WriteXLSX.
4920
+ # This is usefl to display an input message without restricting the data
4921
+ # that can be entered.
4837
4922
  #
4838
4923
  # +:integer+ restricts the cell to integer values. Excel refers to this
4839
4924
  # as 'whole number'.
@@ -5717,6 +5802,22 @@ def get_range_data(row_start, col_start, row_end, col_end) # :nodoc:
5717
5802
  # width # Width of object frame.
5718
5803
  # height # Height of object frame.
5719
5804
  def position_object_pixels(col_start, row_start, x1, y1, width, height) #:nodoc:
5805
+ # Adjust start column for negative offsets.
5806
+ while x1 < 0 && col_start > 0
5807
+ x1 += size_col(col_start - 1)
5808
+ col_start -= 1
5809
+ end
5810
+
5811
+ # Adjust start row for negative offsets.
5812
+ while y1 < 0 && row_start > 0
5813
+ y1 += size_row(row_start - 1)
5814
+ row_start -= 1
5815
+ end
5816
+
5817
+ # Ensure that the image isn't shifted off the page at top left.
5818
+ x1 = 0 if x1 < 0
5819
+ y1 = 0 if y1 < 0
5820
+
5720
5821
  # Calculate the absolute x offset of the top-left vertex.
5721
5822
  if @col_size_changed
5722
5823
  x_abs = (0 .. col_start-1).inject(0) {|sum, col| sum += size_col(col)}
@@ -5811,7 +5912,7 @@ def excel2003_style? # :nodoc:
5811
5912
  # based on the default or user defined values in the Workbook palette.
5812
5913
  #
5813
5914
  def palette_color(index) #:nodoc:
5814
- if index =~ /^#([0-9A-F]{6})$/i
5915
+ if index.to_s =~ /^#([0-9A-F]{6})$/i
5815
5916
  "FF#{$1.upcase}"
5816
5917
  else
5817
5918
  "FF#{super(index)}"
@@ -5869,12 +5970,18 @@ def prepare_header_vml_objects(vml_header_id, vml_drawing_id)
5869
5970
  #
5870
5971
  # Set the table ids for the worksheet tables.
5871
5972
  #
5872
- def prepare_tables(table_id)
5973
+ def prepare_tables(table_id, seen)
5873
5974
  if tables_count > 0
5874
5975
  id = table_id
5875
5976
  tables.each do |table|
5876
5977
  table.prepare(id)
5877
5978
 
5979
+ if seen[table.name]
5980
+ raise "error: invalid duplicate table name '#{table.name}' found."
5981
+ else
5982
+ seen[table.name] = 1
5983
+ end
5984
+
5878
5985
  # Store the link used for the rels file.
5879
5986
  @external_table_links << ['/table', "../tables/table#{id}.xml"]
5880
5987
  id += 1
@@ -6100,7 +6207,7 @@ def parse_filter_tokens(expression, tokens) #:nodoc:
6100
6207
  # Special handling of "Top" filter expressions.
6101
6208
  if tokens[0] =~ /^top|bottom$/i
6102
6209
  value = tokens[1]
6103
- if (value =~ /\D/ or value.to_i < 1 or value.to_i > 500)
6210
+ if (value.to_s =~ /\D/ or value.to_i < 1 or value.to_i > 500)
6104
6211
  raise "The value '#{value}' in expression '#{expression}' " +
6105
6212
  "must be in the range 1 to 500"
6106
6213
  end
@@ -6129,7 +6236,7 @@ def parse_filter_tokens(expression, tokens) #:nodoc:
6129
6236
  end
6130
6237
 
6131
6238
  # Special handling for Blanks/NonBlanks.
6132
- if (token =~ /^blanks|nonblanks$/i)
6239
+ if (token.to_s =~ /^blanks|nonblanks$/i)
6133
6240
  # Only allow Equals or NotEqual in this context.
6134
6241
  if (operator != 2 and operator != 5)
6135
6242
  raise "The operator '#{tokens[1]}' in expression '#{expression}' " +
@@ -6157,7 +6264,7 @@ def parse_filter_tokens(expression, tokens) #:nodoc:
6157
6264
 
6158
6265
  # if the string token contains an Excel match character then change the
6159
6266
  # operator type to indicate a non "simple" equality.
6160
- if (operator == 2 and token =~ /[*?]/)
6267
+ if (operator == 2 and token.to_s =~ /[*?]/)
6161
6268
  operator = 22
6162
6269
  end
6163
6270
 
@@ -7635,7 +7742,7 @@ def set_active_pane_and_cell_selections(row, col, top_row, left_col, active_cell
7635
7742
 
7636
7743
  def prepare_filter_column(col) # :nodoc:
7637
7744
  # Check for a column reference in A1 notation and substitute.
7638
- if col =~ /^\D/
7745
+ if col.to_s =~ /^\D/
7639
7746
  col_letter = col
7640
7747
 
7641
7748
  # Convert col ref to a cell ref and then to a col number.
@@ -32,11 +32,17 @@ def initialize(*args)
32
32
  @value = @minimum if @minimum
33
33
 
34
34
  @validate = valid_validation_type[@validate.downcase]
35
- if @validate == 'none'
35
+
36
+ # No action is required for validate type 'any'
37
+ # unless there are input messages.
38
+ if @validate == 'none' && !@input_message && !@input_title
36
39
  @validate_none = true
37
40
  return
38
41
  end
39
- if ['list', 'custom'].include?(@validate)
42
+
43
+ # The any, list and custom validations don't have a criteria
44
+ # so we use a default of 'between'
45
+ if ['none', 'list', 'custom'].include?(@validate)
40
46
  @criteria = 'between'
41
47
  @maximum = nil
42
48
  end
@@ -59,7 +65,7 @@ def initialize(*args)
59
65
  end
60
66
  set_some_defaults
61
67
 
62
- # A (for now) undocumented parameter to pass additional cell ranges.
68
+ # A (for now) undocumented parameter to pass additional cell ranges.
63
69
  @other_cells.each { |cells| @cells << cells } if has_key?(:other_cells)
64
70
  end
65
71
 
@@ -82,11 +88,15 @@ def validate_none?
82
88
  #
83
89
  def write_data_validation(writer) #:nodoc:
84
90
  @writer = writer
85
- @writer.tag_elements('dataValidation', attributes) do
86
- # Write the formula1 element.
87
- write_formula_1(@value)
88
- # Write the formula2 element.
89
- write_formula_2(@maximum) if @maximum
91
+ if @validate == 'none'
92
+ @writer.empty_tag('dataValidation', attributes)
93
+ else
94
+ @writer.tag_elements('dataValidation', attributes) do
95
+ # Write the formula1 element.
96
+ write_formula_1(@value)
97
+ # Write the formula2 element.
98
+ write_formula_2(@maximum) if @maximum
99
+ end
90
100
  end
91
101
  end
92
102
 
@@ -136,8 +146,10 @@ def attributes
136
146
  end
137
147
  end
138
148
 
139
- attributes << ['type', @validate]
140
- attributes << ['operator', @criteria] if @criteria != 'between'
149
+ if @validate != 'none'
150
+ attributes << ['type', @validate]
151
+ attributes << ['operator', @criteria] if @criteria != 'between'
152
+ end
141
153
 
142
154
  if @error_type
143
155
  attributes << ['errorStyle', 'warning'] if @error_type == 1
@@ -282,7 +294,7 @@ def valid_criteria_type # :nodoc:
282
294
 
283
295
  def convert_date_time_value(key) # :nodoc:
284
296
  value = instance_variable_get("@#{key}")
285
- if value && value =~ /T/
297
+ if value && value.to_s =~ /T/
286
298
  date_time = convert_date_time(value)
287
299
  instance_variable_set("@#{key}", date_time) if date_time
288
300
  date_time
@@ -26,17 +26,20 @@ def initialize(url, str, tip)
26
26
  # Strip the mailto header.
27
27
  normalized_str = str.sub(/^mailto:/, '')
28
28
 
29
+ # Split url into the link and optional anchor/location.
30
+ url, @url_str = url.split(/#/)
31
+ url ||= ''
32
+
29
33
  # Escape URL unless it looks already escaped.
30
34
  url = escape_url(url)
31
35
 
32
- # Excel limits escaped URL to 255 characters.
33
- if url.bytesize > 255
34
- raise "URL '#{url}' > 255 characters, it exceeds Excel's limit for URLS."
36
+ # Excel limits the escaped URL and location/anchor to 255 characters.
37
+ if url.bytesize > 255 || (!@url_str.nil? && @url_str.bytesize > 255)
38
+ raise "Ignoring URL '#{url}' where link or anchor > 255 characters since it exceeds Excel's limit for URLS. See LIMITATIONS section of the Excel::Writer::XLSX documentation."
35
39
  end
36
40
 
37
41
  @url = url
38
42
  @str = normalized_str
39
- @url_str = nil
40
43
  @tip = tip
41
44
  end
42
45
 
@@ -144,14 +147,15 @@ def initialize(url, str, tip)
144
147
 
145
148
  # Convert a ./dir/file.xlsx link to dir/file.xlsx.
146
149
  url = url.sub(%r!^.\\!, '')
150
+ @url_str = url_str
147
151
 
148
- # Excel limits escaped URL to 255 characters.
149
- if url.bytesize > 255
150
- raise "URL '#{url}' > 255 characters, it exceeds Excel's limit for URLS."
152
+ # Excel limits the escaped URL and location/anchor to 255 characters.
153
+ if url.bytesize > 255 || (!@url_str.nil? && @url_str.bytesize > 255)
154
+ raise "Ignoring URL '#{url}' where link or anchor > 255 characters since it exceeds Excel's limit for URLS. See LIMITATIONS section of the Excel::Writer::XLSX documentation."
151
155
  end
156
+
152
157
  @url = url
153
158
  @str = str
154
- @url_str = url_str
155
159
  @tip = tip
156
160
  end
157
161
  end
@@ -2,7 +2,7 @@
2
2
  require 'helper'
3
3
  require 'write_xlsx/chart'
4
4
 
5
- class TestAddSeries < Test::Unit::TestCase
5
+ class TestAddSeries < Minitest::Test
6
6
  def setup
7
7
  @chart = Writexlsx::Chart.new('Bar')
8
8
  end
@@ -18,6 +18,8 @@ def test_add_series_only_values
18
18
  series.instance_variable_set(:@val_data_id, 0)
19
19
  series.instance_variable_set(:@line, { :_defined => 0 })
20
20
  series.instance_variable_set(:@fill, { :_defined => 0 })
21
+ series.instance_variable_set(:@pattern, nil)
22
+ series.instance_variable_set(:@gradient, nil)
21
23
  series.instance_variable_set(:@marker, nil)
22
24
  series.instance_variable_set(:@trendline, nil)
23
25
  series.instance_variable_set(:@smooth, nil)
@@ -50,6 +52,8 @@ def test_add_series_with_categories_and_values
50
52
  series.instance_variable_set(:@val_data_id, 1)
51
53
  series.instance_variable_set(:@line , { :_defined => 0 })
52
54
  series.instance_variable_set(:@fill , { :_defined => 0 })
55
+ series.instance_variable_set(:@pattern, nil)
56
+ series.instance_variable_set(:@gradient, nil)
53
57
  series.instance_variable_set(:@marker, nil)
54
58
  series.instance_variable_set(:@trendline, nil)
55
59
  series.instance_variable_set(:@smooth, nil)
@@ -85,6 +89,8 @@ def test_add_series_only_values_checked_by_array
85
89
  series.instance_variable_set(:@val_data_id, 0)
86
90
  series.instance_variable_set(:@line , { :_defined => 0 })
87
91
  series.instance_variable_set(:@fill , { :_defined => 0 })
92
+ series.instance_variable_set(:@pattern, nil)
93
+ series.instance_variable_set(:@gradient, nil)
88
94
  series.instance_variable_set(:@marker, nil)
89
95
  series.instance_variable_set(:@trendline, nil)
90
96
  series.instance_variable_set(:@smooth, nil)
@@ -116,6 +122,8 @@ def test_add_series_both_checked_by_array
116
122
  series.instance_variable_set(:@val_data_id, 1)
117
123
  series.instance_variable_set(:@line , { :_defined => 0 })
118
124
  series.instance_variable_set(:@fill , { :_defined => 0 })
125
+ series.instance_variable_set(:@pattern, nil)
126
+ series.instance_variable_set(:@gradient, nil)
119
127
  series.instance_variable_set(:@marker, nil)
120
128
  series.instance_variable_set(:@trendline, nil)
121
129
  series.instance_variable_set(:@smooth, nil)
@@ -151,6 +159,8 @@ def test_add_series_secondary_axis
151
159
  series.instance_variable_set(:@val_data_id, 1)
152
160
  series.instance_variable_set(:@line , { :_defined => 0 })
153
161
  series.instance_variable_set(:@fill , { :_defined => 0 })
162
+ series.instance_variable_set(:@pattern, nil)
163
+ series.instance_variable_set(:@gradient, nil)
154
164
  series.instance_variable_set(:@marker, nil)
155
165
  series.instance_variable_set(:@trendline, nil)
156
166
  series.instance_variable_set(:@smooth, nil)