write_xlsx 1.09.4 → 1.10.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 (2058) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +109 -0
  3. data/.rubocop_todo.yml +445 -0
  4. data/Changes +8 -0
  5. data/Gemfile +2 -0
  6. data/LICENSE.txt +1 -1
  7. data/Rakefile +14 -8
  8. data/examples/array_formula.rb +2 -2
  9. data/examples/autofilter.rb +50 -26
  10. data/examples/chart_area.rb +10 -10
  11. data/examples/chart_bar.rb +10 -10
  12. data/examples/chart_column.rb +10 -10
  13. data/examples/chart_combined.rb +2 -3
  14. data/examples/chart_data_labels.rb +23 -35
  15. data/examples/chart_data_table.rb +16 -16
  16. data/examples/chart_data_tools.rb +36 -42
  17. data/examples/chart_doughnut.rb +21 -25
  18. data/examples/chart_gauge.rb +17 -17
  19. data/examples/chart_line.rb +25 -26
  20. data/examples/chart_pareto.rb +3 -3
  21. data/examples/chart_pie.rb +15 -15
  22. data/examples/chart_radar.rb +30 -30
  23. data/examples/chart_scatter.rb +10 -10
  24. data/examples/chart_secondary_axis.rb +9 -9
  25. data/examples/chart_stock.rb +10 -11
  26. data/examples/chart_styles.rb +6 -7
  27. data/examples/colors.rb +26 -29
  28. data/examples/comments1.rb +1 -0
  29. data/examples/comments2.rb +85 -114
  30. data/examples/conditional_format.rb +159 -150
  31. data/examples/data_validate.rb +135 -122
  32. data/examples/date_time.rb +29 -29
  33. data/examples/defined_name.rb +5 -5
  34. data/examples/demo.rb +10 -12
  35. data/examples/diag_border.rb +4 -5
  36. data/examples/dynamic_arrays.rb +247 -0
  37. data/examples/formats.rb +93 -105
  38. data/examples/headers.rb +2 -7
  39. data/examples/hyperlink1.rb +5 -6
  40. data/examples/ignore_errors.rb +1 -1
  41. data/examples/lambda.rb +43 -0
  42. data/examples/macros.rb +6 -6
  43. data/examples/merge1.rb +0 -3
  44. data/examples/merge2.rb +9 -12
  45. data/examples/merge3.rb +6 -7
  46. data/examples/merge4.rb +2 -4
  47. data/examples/merge5.rb +6 -6
  48. data/examples/merge6.rb +1 -1
  49. data/examples/outline.rb +8 -16
  50. data/examples/outline_collapsed.rb +6 -6
  51. data/examples/panes.rb +15 -15
  52. data/examples/properties.rb +9 -9
  53. data/examples/rich_strings.rb +19 -11
  54. data/examples/shape1.rb +9 -9
  55. data/examples/shape2.rb +19 -19
  56. data/examples/shape3.rb +6 -6
  57. data/examples/shape4.rb +9 -9
  58. data/examples/shape5.rb +8 -8
  59. data/examples/shape6.rb +8 -8
  60. data/examples/shape7.rb +14 -14
  61. data/examples/shape8.rb +14 -14
  62. data/examples/shape_all.rb +6 -6
  63. data/examples/sparklines1.rb +23 -24
  64. data/examples/sparklines2.rb +151 -151
  65. data/examples/tables.rb +86 -94
  66. data/examples/update_range_format_with_params.rb +4 -4
  67. data/examples/watermark.png +0 -0
  68. data/examples/watermark.rb +26 -0
  69. data/lib/write_xlsx/chart/area.rb +8 -9
  70. data/lib/write_xlsx/chart/axis.rb +12 -24
  71. data/lib/write_xlsx/chart/bar.rb +4 -8
  72. data/lib/write_xlsx/chart/column.rb +3 -4
  73. data/lib/write_xlsx/chart/doughnut.rb +3 -2
  74. data/lib/write_xlsx/chart/line.rb +16 -17
  75. data/lib/write_xlsx/chart/pie.rb +13 -13
  76. data/lib/write_xlsx/chart/radar.rb +8 -9
  77. data/lib/write_xlsx/chart/scatter.rb +20 -23
  78. data/lib/write_xlsx/chart/series.rb +32 -45
  79. data/lib/write_xlsx/chart/stock.rb +29 -24
  80. data/lib/write_xlsx/chart.rb +184 -217
  81. data/lib/write_xlsx/chartsheet.rb +23 -31
  82. data/lib/write_xlsx/col_name.rb +3 -1
  83. data/lib/write_xlsx/colors.rb +2 -1
  84. data/lib/write_xlsx/compatibility.rb +15 -15
  85. data/lib/write_xlsx/drawing.rb +72 -63
  86. data/lib/write_xlsx/format.rb +57 -59
  87. data/lib/write_xlsx/formats.rb +2 -0
  88. data/lib/write_xlsx/gradient.rb +7 -9
  89. data/lib/write_xlsx/package/app.rb +13 -16
  90. data/lib/write_xlsx/package/button.rb +9 -5
  91. data/lib/write_xlsx/package/comments.rb +34 -37
  92. data/lib/write_xlsx/package/conditional_format.rb +91 -110
  93. data/lib/write_xlsx/package/content_types.rb +21 -21
  94. data/lib/write_xlsx/package/core.rb +6 -4
  95. data/lib/write_xlsx/package/custom.rb +8 -7
  96. data/lib/write_xlsx/package/metadata.rb +7 -5
  97. data/lib/write_xlsx/package/packager.rb +37 -22
  98. data/lib/write_xlsx/package/relationships.rb +2 -1
  99. data/lib/write_xlsx/package/shared_strings.rb +12 -12
  100. data/lib/write_xlsx/package/styles.rb +55 -68
  101. data/lib/write_xlsx/package/table.rb +78 -95
  102. data/lib/write_xlsx/package/theme.rb +4 -3
  103. data/lib/write_xlsx/package/vml.rb +25 -31
  104. data/lib/write_xlsx/package/xml_writer_simple.rb +40 -22
  105. data/lib/write_xlsx/shape.rb +21 -31
  106. data/lib/write_xlsx/sheets.rb +38 -46
  107. data/lib/write_xlsx/sparkline.rb +12 -20
  108. data/lib/write_xlsx/utility.rb +131 -145
  109. data/lib/write_xlsx/version.rb +3 -1
  110. data/lib/write_xlsx/workbook.rb +248 -299
  111. data/lib/write_xlsx/worksheet/cell_data.rb +78 -64
  112. data/lib/write_xlsx/worksheet/data_validation.rb +66 -73
  113. data/lib/write_xlsx/worksheet/hyperlink.rb +12 -17
  114. data/lib/write_xlsx/worksheet/page_setup.rb +10 -11
  115. data/lib/write_xlsx/worksheet.rb +688 -580
  116. data/lib/write_xlsx/zip_file_utils.rb +31 -32
  117. data/lib/write_xlsx.rb +2 -3
  118. data/write_xlsx.gemspec +24 -18
  119. metadata +56 -3883
  120. data/.gitattributes +0 -1
  121. data/.gitignore +0 -45
  122. data/.travis.yml +0 -75
  123. data/bin/extract_vba.rb +0 -34
  124. data/test/chart/test_add_series.rb +0 -190
  125. data/test/chart/test_process_names.rb +0 -27
  126. data/test/chart/test_write_a_latin.rb +0 -22
  127. data/test/chart/test_write_auto.rb +0 -15
  128. data/test/chart/test_write_ax_id.rb +0 -15
  129. data/test/chart/test_write_ax_pos.rb +0 -15
  130. data/test/chart/test_write_cross_ax.rb +0 -15
  131. data/test/chart/test_write_crosses.rb +0 -15
  132. data/test/chart/test_write_d_lbls.rb +0 -292
  133. data/test/chart/test_write_format_code.rb +0 -16
  134. data/test/chart/test_write_idx.rb +0 -15
  135. data/test/chart/test_write_label_align.rb +0 -15
  136. data/test/chart/test_write_label_offset.rb +0 -15
  137. data/test/chart/test_write_lang.rb +0 -15
  138. data/test/chart/test_write_layout.rb +0 -15
  139. data/test/chart/test_write_legend.rb +0 -16
  140. data/test/chart/test_write_legend_pos.rb +0 -23
  141. data/test/chart/test_write_major_gridlines.rb +0 -15
  142. data/test/chart/test_write_marker.rb +0 -17
  143. data/test/chart/test_write_marker_size.rb +0 -15
  144. data/test/chart/test_write_marker_value.rb +0 -16
  145. data/test/chart/test_write_num_cache.rb +0 -16
  146. data/test/chart/test_write_number_format.rb +0 -48
  147. data/test/chart/test_write_order.rb +0 -15
  148. data/test/chart/test_write_orientation.rb +0 -15
  149. data/test/chart/test_write_page_margins.rb +0 -15
  150. data/test/chart/test_write_page_setup.rb +0 -15
  151. data/test/chart/test_write_plot_vis_only.rb +0 -15
  152. data/test/chart/test_write_pt.rb +0 -16
  153. data/test/chart/test_write_pt_count.rb +0 -16
  154. data/test/chart/test_write_series_formula.rb +0 -16
  155. data/test/chart/test_write_style.rb +0 -41
  156. data/test/chart/test_write_symbol.rb +0 -16
  157. data/test/chart/test_write_tick_lbl_pos.rb +0 -16
  158. data/test/chart/test_write_v.rb +0 -16
  159. data/test/chartsheet/test_chartsheet01.rb +0 -31
  160. data/test/chartsheet/test_write_sheet_protection.rb +0 -91
  161. data/test/drawing/test_drawing_chart_01.rb +0 -54
  162. data/test/drawing/test_drawing_image_01.rb +0 -68
  163. data/test/drawing/test_drawing_shape_01.rb +0 -71
  164. data/test/drawing/test_drawing_shape_02.rb +0 -80
  165. data/test/drawing/test_drawing_shape_03.rb +0 -41
  166. data/test/drawing/test_drawing_shape_04.rb +0 -105
  167. data/test/drawing/test_drawing_shape_05.rb +0 -48
  168. data/test/drawing/test_drawing_shape_06.rb +0 -47
  169. data/test/drawing/test_drawing_shape_07.rb +0 -52
  170. data/test/drawing/test_write_a_graphic_frame_locks.rb +0 -18
  171. data/test/drawing/test_write_c_chart.rb +0 -18
  172. data/test/drawing/test_write_c_nv_graphic_frame_pr.rb +0 -28
  173. data/test/drawing/test_write_c_nv_pr.rb +0 -18
  174. data/test/drawing/test_write_col.rb +0 -18
  175. data/test/drawing/test_write_col_off.rb +0 -18
  176. data/test/drawing/test_write_pos.rb +0 -18
  177. data/test/drawing/test_write_row.rb +0 -18
  178. data/test/drawing/test_write_row_off.rb +0 -18
  179. data/test/drawing/test_write_xdr_ext.rb +0 -18
  180. data/test/drawing/test_write_xfrm_extension.rb +0 -18
  181. data/test/drawing/test_write_xfrm_offset.rb +0 -18
  182. data/test/helper.rb +0 -206
  183. data/test/package/app/test_app01.rb +0 -44
  184. data/test/package/app/test_app02.rb +0 -46
  185. data/test/package/app/test_app03.rb +0 -53
  186. data/test/package/comments/test_comments_01.rb +0 -54
  187. data/test/package/comments/test_comments_02.rb +0 -54
  188. data/test/package/content_types/test_content_types.rb +0 -35
  189. data/test/package/content_types/test_write_default.rb +0 -13
  190. data/test/package/content_types/test_write_override.rb +0 -13
  191. data/test/package/core/test_core01.rb +0 -28
  192. data/test/package/core/test_core02.rb +0 -42
  193. data/test/package/relationships/test_relationships.rb +0 -28
  194. data/test/package/relationships/test_sheet_rels.rb +0 -22
  195. data/test/package/shared_strings/test_shared_strings01.rb +0 -30
  196. data/test/package/shared_strings/test_shared_strings02.rb +0 -30
  197. data/test/package/shared_strings/test_write_si.rb +0 -16
  198. data/test/package/styles/test_styles_01.rb +0 -60
  199. data/test/package/styles/test_styles_02.rb +0 -95
  200. data/test/package/styles/test_styles_03.rb +0 -81
  201. data/test/package/styles/test_styles_04.rb +0 -207
  202. data/test/package/styles/test_styles_05.rb +0 -141
  203. data/test/package/styles/test_styles_06.rb +0 -95
  204. data/test/package/styles/test_styles_07.rb +0 -95
  205. data/test/package/styles/test_styles_08.rb +0 -100
  206. data/test/package/styles/test_styles_09.rb +0 -86
  207. data/test/package/table/test_table01.rb +0 -42
  208. data/test/package/table/test_table02.rb +0 -44
  209. data/test/package/table/test_table03.rb +0 -48
  210. data/test/package/table/test_table04.rb +0 -46
  211. data/test/package/table/test_table05.rb +0 -46
  212. data/test/package/table/test_table06.rb +0 -52
  213. data/test/package/table/test_table07.rb +0 -47
  214. data/test/package/table/test_table08.rb +0 -53
  215. data/test/package/table/test_table09.rb +0 -65
  216. data/test/package/table/test_table10.rb +0 -45
  217. data/test/package/table/test_table11.rb +0 -60
  218. data/test/package/table/test_table12.rb +0 -60
  219. data/test/package/table/test_table13.rb +0 -69
  220. data/test/package/table/test_write_auto_filter.rb +0 -23
  221. data/test/package/table/test_write_table_column.rb +0 -22
  222. data/test/package/table/test_write_table_style_info.rb +0 -26
  223. data/test/package/vml/test_write_auto_fill.rb +0 -14
  224. data/test/package/vml/test_write_div.rb +0 -14
  225. data/test/package/vml/test_write_idmap.rb +0 -14
  226. data/test/package/vml/test_write_path.rb +0 -30
  227. data/test/package/vml/test_write_shapelayout.rb +0 -14
  228. data/test/package/vml/test_write_shapetype.rb +0 -22
  229. data/test/package/vml/test_write_stroke.rb +0 -14
  230. data/test/perl_output/a_simple.xlsx +0 -0
  231. data/test/perl_output/add_vba_project.xlsm +0 -0
  232. data/test/perl_output/array_formula.xlsx +0 -0
  233. data/test/perl_output/autofilter.xlsx +0 -0
  234. data/test/perl_output/background.xlsx +0 -0
  235. data/test/perl_output/chart_area.xlsx +0 -0
  236. data/test/perl_output/chart_bar.xlsx +0 -0
  237. data/test/perl_output/chart_column.xlsx +0 -0
  238. data/test/perl_output/chart_combined.xlsx +0 -0
  239. data/test/perl_output/chart_data_labels.xlsx +0 -0
  240. data/test/perl_output/chart_data_table.xlsx +0 -0
  241. data/test/perl_output/chart_data_tools.xlsx +0 -0
  242. data/test/perl_output/chart_doughnut.xlsx +0 -0
  243. data/test/perl_output/chart_gauge.xlsx +0 -0
  244. data/test/perl_output/chart_line.xlsx +0 -0
  245. data/test/perl_output/chart_pareto.xlsx +0 -0
  246. data/test/perl_output/chart_pie.xlsx +0 -0
  247. data/test/perl_output/chart_radar.xlsx +0 -0
  248. data/test/perl_output/chart_scatter.xlsx +0 -0
  249. data/test/perl_output/chart_scatter06.xlsx +0 -0
  250. data/test/perl_output/chart_secondary_axis.xlsx +0 -0
  251. data/test/perl_output/chart_stock.xlsx +0 -0
  252. data/test/perl_output/comments1.xlsx +0 -0
  253. data/test/perl_output/comments2.xlsx +0 -0
  254. data/test/perl_output/conditional_format.xlsx +0 -0
  255. data/test/perl_output/data_validate.xlsx +0 -0
  256. data/test/perl_output/date_time.xlsx +0 -0
  257. data/test/perl_output/defined_name.xlsx +0 -0
  258. data/test/perl_output/demo.xlsx +0 -0
  259. data/test/perl_output/diag_border.xlsx +0 -0
  260. data/test/perl_output/fit_to_pages.xlsx +0 -0
  261. data/test/perl_output/formats.xlsx +0 -0
  262. data/test/perl_output/headers.xlsx +0 -0
  263. data/test/perl_output/hide_first_sheet.xlsx +0 -0
  264. data/test/perl_output/hide_row_col.xlsx +0 -0
  265. data/test/perl_output/hide_sheet.xlsx +0 -0
  266. data/test/perl_output/hyperlink.xlsx +0 -0
  267. data/test/perl_output/ignore_errors.xlsx +0 -0
  268. data/test/perl_output/indent.xlsx +0 -0
  269. data/test/perl_output/keep_leading_zeros.xlsx +0 -0
  270. data/test/perl_output/merge1.xlsx +0 -0
  271. data/test/perl_output/merge2.xlsx +0 -0
  272. data/test/perl_output/merge3.xlsx +0 -0
  273. data/test/perl_output/merge4.xlsx +0 -0
  274. data/test/perl_output/merge5.xlsx +0 -0
  275. data/test/perl_output/merge6.xlsx +0 -0
  276. data/test/perl_output/multi_line.xlsx +0 -0
  277. data/test/perl_output/outline.xlsx +0 -0
  278. data/test/perl_output/outline_collapsed.xlsx +0 -0
  279. data/test/perl_output/panes.xlsx +0 -0
  280. data/test/perl_output/print_scale.xlsx +0 -0
  281. data/test/perl_output/properties.xlsx +0 -0
  282. data/test/perl_output/protection.xlsx +0 -0
  283. data/test/perl_output/regions.xlsx +0 -0
  284. data/test/perl_output/rich_strings.xlsx +0 -0
  285. data/test/perl_output/right_to_left.xlsx +0 -0
  286. data/test/perl_output/shape1.xlsx +0 -0
  287. data/test/perl_output/shape2.xlsx +0 -0
  288. data/test/perl_output/shape3.xlsx +0 -0
  289. data/test/perl_output/shape4.xlsx +0 -0
  290. data/test/perl_output/shape5.xlsx +0 -0
  291. data/test/perl_output/shape6.xlsx +0 -0
  292. data/test/perl_output/shape7.xlsx +0 -0
  293. data/test/perl_output/shape8.xlsx +0 -0
  294. data/test/perl_output/shape_all.xlsx +0 -0
  295. data/test/perl_output/sparklines1.xlsx +0 -0
  296. data/test/perl_output/sparklines2.xlsx +0 -0
  297. data/test/perl_output/stats.xlsx +0 -0
  298. data/test/perl_output/stats_ext.xlsx +0 -0
  299. data/test/perl_output/stocks.xlsx +0 -0
  300. data/test/perl_output/tab_colors.xlsx +0 -0
  301. data/test/perl_output/tables.xlsx +0 -0
  302. data/test/regression/_test_hyperlink31.rb +0 -26
  303. data/test/regression/disabled_test_vml04.rb +0 -41
  304. data/test/regression/images/black_150.jpg +0 -0
  305. data/test/regression/images/black_150.png +0 -0
  306. data/test/regression/images/black_150e.png +0 -0
  307. data/test/regression/images/black_300.jpg +0 -0
  308. data/test/regression/images/black_300.png +0 -0
  309. data/test/regression/images/black_300e.png +0 -0
  310. data/test/regression/images/black_72.jpg +0 -0
  311. data/test/regression/images/black_72.png +0 -0
  312. data/test/regression/images/black_72e.png +0 -0
  313. data/test/regression/images/black_96.jpg +0 -0
  314. data/test/regression/images/black_96.png +0 -0
  315. data/test/regression/images/blue.jpg +0 -0
  316. data/test/regression/images/blue.png +0 -0
  317. data/test/regression/images/grey.jpg +0 -0
  318. data/test/regression/images/grey.png +0 -0
  319. data/test/regression/images/happy.jpg +0 -0
  320. data/test/regression/images/issue32.png +0 -0
  321. data/test/regression/images/logo.gif +0 -0
  322. data/test/regression/images/logo.jpg +0 -0
  323. data/test/regression/images/logo.png +0 -0
  324. data/test/regression/images/mylogo.png +0 -0
  325. data/test/regression/images/red.bmp +0 -0
  326. data/test/regression/images/red.gif +0 -0
  327. data/test/regression/images/red.jpg +0 -0
  328. data/test/regression/images/red.png +0 -0
  329. data/test/regression/images/red2.png +0 -0
  330. data/test/regression/images/red_208.png +0 -0
  331. data/test/regression/images/red_64x20.png +0 -0
  332. data/test/regression/images/train.jpg +0 -0
  333. data/test/regression/images/yellow.jpg +0 -0
  334. data/test/regression/images/yellow.png +0 -0
  335. data/test/regression/images/zero_dpi.jpg +0 -0
  336. data/test/regression/klt.csv +0 -4
  337. data/test/regression/test_array_formula01.rb +0 -31
  338. data/test/regression/test_array_formula02.rb +0 -32
  339. data/test/regression/test_array_formula03.rb +0 -36
  340. data/test/regression/test_array_formula04.rb +0 -31
  341. data/test/regression/test_autofilter00.rb +0 -84
  342. data/test/regression/test_autofilter01.rb +0 -86
  343. data/test/regression/test_autofilter02.rb +0 -104
  344. data/test/regression/test_autofilter03.rb +0 -104
  345. data/test/regression/test_autofilter04.rb +0 -107
  346. data/test/regression/test_autofilter05.rb +0 -108
  347. data/test/regression/test_autofilter06.rb +0 -108
  348. data/test/regression/test_autofilter07.rb +0 -107
  349. data/test/regression/test_autofilter08.rb +0 -110
  350. data/test/regression/test_autofilter09.rb +0 -110
  351. data/test/regression/test_autofilter10.rb +0 -110
  352. data/test/regression/test_background01.rb +0 -23
  353. data/test/regression/test_background02.rb +0 -23
  354. data/test/regression/test_background03.rb +0 -24
  355. data/test/regression/test_background04.rb +0 -25
  356. data/test/regression/test_background05.rb +0 -25
  357. data/test/regression/test_background06.rb +0 -31
  358. data/test/regression/test_background07.rb +0 -37
  359. data/test/regression/test_button01.rb +0 -23
  360. data/test/regression/test_button02.rb +0 -29
  361. data/test/regression/test_button03.rb +0 -24
  362. data/test/regression/test_button04.rb +0 -25
  363. data/test/regression/test_button05.rb +0 -28
  364. data/test/regression/test_button06.rb +0 -28
  365. data/test/regression/test_button07.rb +0 -35
  366. data/test/regression/test_button08.rb +0 -28
  367. data/test/regression/test_button13.rb +0 -30
  368. data/test/regression/test_button14.rb +0 -31
  369. data/test/regression/test_chart_area01.rb +0 -45
  370. data/test/regression/test_chart_area02.rb +0 -45
  371. data/test/regression/test_chart_area03.rb +0 -45
  372. data/test/regression/test_chart_area04.rb +0 -44
  373. data/test/regression/test_chart_axis01.rb +0 -45
  374. data/test/regression/test_chart_axis02.rb +0 -45
  375. data/test/regression/test_chart_axis03.rb +0 -67
  376. data/test/regression/test_chart_axis04.rb +0 -52
  377. data/test/regression/test_chart_axis05.rb +0 -47
  378. data/test/regression/test_chart_axis06.rb +0 -49
  379. data/test/regression/test_chart_axis07.rb +0 -53
  380. data/test/regression/test_chart_axis08.rb +0 -52
  381. data/test/regression/test_chart_axis09.rb +0 -46
  382. data/test/regression/test_chart_axis10.rb +0 -52
  383. data/test/regression/test_chart_axis11.rb +0 -46
  384. data/test/regression/test_chart_axis12.rb +0 -46
  385. data/test/regression/test_chart_axis13.rb +0 -52
  386. data/test/regression/test_chart_axis14.rb +0 -66
  387. data/test/regression/test_chart_axis15.rb +0 -47
  388. data/test/regression/test_chart_axis16.rb +0 -69
  389. data/test/regression/test_chart_axis17.rb +0 -45
  390. data/test/regression/test_chart_axis18.rb +0 -43
  391. data/test/regression/test_chart_axis19.rb +0 -45
  392. data/test/regression/test_chart_axis20.rb +0 -45
  393. data/test/regression/test_chart_axis21.rb +0 -49
  394. data/test/regression/test_chart_axis22.rb +0 -44
  395. data/test/regression/test_chart_axis23.rb +0 -45
  396. data/test/regression/test_chart_axis24.rb +0 -45
  397. data/test/regression/test_chart_axis25.rb +0 -44
  398. data/test/regression/test_chart_axis26.rb +0 -46
  399. data/test/regression/test_chart_axis27.rb +0 -44
  400. data/test/regression/test_chart_axis28.rb +0 -44
  401. data/test/regression/test_chart_axis29.rb +0 -43
  402. data/test/regression/test_chart_axis30.rb +0 -40
  403. data/test/regression/test_chart_axis31.rb +0 -40
  404. data/test/regression/test_chart_axis32.rb +0 -40
  405. data/test/regression/test_chart_axis33.rb +0 -44
  406. data/test/regression/test_chart_axis34.rb +0 -43
  407. data/test/regression/test_chart_axis35.rb +0 -43
  408. data/test/regression/test_chart_axis36.rb +0 -43
  409. data/test/regression/test_chart_axis37.rb +0 -45
  410. data/test/regression/test_chart_axis38.rb +0 -43
  411. data/test/regression/test_chart_axis39.rb +0 -50
  412. data/test/regression/test_chart_axis40.rb +0 -44
  413. data/test/regression/test_chart_axis41.rb +0 -48
  414. data/test/regression/test_chart_axis42.rb +0 -44
  415. data/test/regression/test_chart_axis43.rb +0 -44
  416. data/test/regression/test_chart_axis44.rb +0 -54
  417. data/test/regression/test_chart_axis45.rb +0 -54
  418. data/test/regression/test_chart_axis46.rb +0 -54
  419. data/test/regression/test_chart_axis47.rb +0 -52
  420. data/test/regression/test_chart_axis48.rb +0 -53
  421. data/test/regression/test_chart_bar01.rb +0 -44
  422. data/test/regression/test_chart_bar02.rb +0 -54
  423. data/test/regression/test_chart_bar03.rb +0 -66
  424. data/test/regression/test_chart_bar04.rb +0 -69
  425. data/test/regression/test_chart_bar05.rb +0 -39
  426. data/test/regression/test_chart_bar06.rb +0 -49
  427. data/test/regression/test_chart_bar07.rb +0 -53
  428. data/test/regression/test_chart_bar08.rb +0 -43
  429. data/test/regression/test_chart_bar09.rb +0 -42
  430. data/test/regression/test_chart_bar10.rb +0 -46
  431. data/test/regression/test_chart_bar11.rb +0 -72
  432. data/test/regression/test_chart_bar12.rb +0 -38
  433. data/test/regression/test_chart_bar13.rb +0 -48
  434. data/test/regression/test_chart_bar14.rb +0 -64
  435. data/test/regression/test_chart_bar15.rb +0 -51
  436. data/test/regression/test_chart_bar16.rb +0 -49
  437. data/test/regression/test_chart_bar17.rb +0 -45
  438. data/test/regression/test_chart_bar18.rb +0 -56
  439. data/test/regression/test_chart_bar19.rb +0 -48
  440. data/test/regression/test_chart_bar20.rb +0 -45
  441. data/test/regression/test_chart_bar21.rb +0 -49
  442. data/test/regression/test_chart_bar22.rb +0 -66
  443. data/test/regression/test_chart_bar23.rb +0 -60
  444. data/test/regression/test_chart_bar24.rb +0 -44
  445. data/test/regression/test_chart_blank01.rb +0 -41
  446. data/test/regression/test_chart_blank02.rb +0 -41
  447. data/test/regression/test_chart_blank03.rb +0 -41
  448. data/test/regression/test_chart_blank04.rb +0 -41
  449. data/test/regression/test_chart_blank05.rb +0 -44
  450. data/test/regression/test_chart_blank06.rb +0 -41
  451. data/test/regression/test_chart_chartarea01.rb +0 -52
  452. data/test/regression/test_chart_chartarea02.rb +0 -52
  453. data/test/regression/test_chart_chartarea03.rb +0 -55
  454. data/test/regression/test_chart_chartarea04.rb +0 -71
  455. data/test/regression/test_chart_chartarea05.rb +0 -49
  456. data/test/regression/test_chart_chartarea06.rb +0 -49
  457. data/test/regression/test_chart_clustered01.rb +0 -65
  458. data/test/regression/test_chart_column01.rb +0 -39
  459. data/test/regression/test_chart_column02.rb +0 -44
  460. data/test/regression/test_chart_column03.rb +0 -44
  461. data/test/regression/test_chart_column04.rb +0 -44
  462. data/test/regression/test_chart_column05.rb +0 -39
  463. data/test/regression/test_chart_column06.rb +0 -45
  464. data/test/regression/test_chart_column07.rb +0 -40
  465. data/test/regression/test_chart_column08.rb +0 -42
  466. data/test/regression/test_chart_column09.rb +0 -39
  467. data/test/regression/test_chart_column10.rb +0 -39
  468. data/test/regression/test_chart_column11.rb +0 -41
  469. data/test/regression/test_chart_column12.rb +0 -37
  470. data/test/regression/test_chart_combined01.rb +0 -37
  471. data/test/regression/test_chart_combined02.rb +0 -43
  472. data/test/regression/test_chart_combined03.rb +0 -45
  473. data/test/regression/test_chart_combined04.rb +0 -47
  474. data/test/regression/test_chart_combined05.rb +0 -49
  475. data/test/regression/test_chart_combined06.rb +0 -49
  476. data/test/regression/test_chart_combined07.rb +0 -53
  477. data/test/regression/test_chart_combined08.rb +0 -65
  478. data/test/regression/test_chart_combined09.rb +0 -50
  479. data/test/regression/test_chart_combined10.rb +0 -43
  480. data/test/regression/test_chart_combined11.rb +0 -63
  481. data/test/regression/test_chart_crossing01.rb +0 -49
  482. data/test/regression/test_chart_crossing02.rb +0 -47
  483. data/test/regression/test_chart_crossing03.rb +0 -52
  484. data/test/regression/test_chart_crossing04.rb +0 -52
  485. data/test/regression/test_chart_crossing05.rb +0 -46
  486. data/test/regression/test_chart_crossing06.rb +0 -46
  487. data/test/regression/test_chart_data_labels01.rb +0 -47
  488. data/test/regression/test_chart_data_labels02.rb +0 -47
  489. data/test/regression/test_chart_data_labels03.rb +0 -47
  490. data/test/regression/test_chart_data_labels04.rb +0 -47
  491. data/test/regression/test_chart_data_labels05.rb +0 -50
  492. data/test/regression/test_chart_data_labels06.rb +0 -50
  493. data/test/regression/test_chart_data_labels07.rb +0 -40
  494. data/test/regression/test_chart_data_labels08.rb +0 -46
  495. data/test/regression/test_chart_data_labels09.rb +0 -47
  496. data/test/regression/test_chart_data_labels10.rb +0 -47
  497. data/test/regression/test_chart_data_labels11.rb +0 -37
  498. data/test/regression/test_chart_data_labels12.rb +0 -37
  499. data/test/regression/test_chart_data_labels13.rb +0 -37
  500. data/test/regression/test_chart_data_labels14.rb +0 -37
  501. data/test/regression/test_chart_data_labels15.rb +0 -37
  502. data/test/regression/test_chart_data_labels16.rb +0 -40
  503. data/test/regression/test_chart_data_labels17.rb +0 -63
  504. data/test/regression/test_chart_data_labels18.rb +0 -53
  505. data/test/regression/test_chart_data_labels19.rb +0 -53
  506. data/test/regression/test_chart_data_labels20.rb +0 -44
  507. data/test/regression/test_chart_data_labels21.rb +0 -48
  508. data/test/regression/test_chart_data_labels22.rb +0 -47
  509. data/test/regression/test_chart_data_labels23.rb +0 -50
  510. data/test/regression/test_chart_data_labels24.rb +0 -50
  511. data/test/regression/test_chart_data_labels25.rb +0 -61
  512. data/test/regression/test_chart_data_labels26.rb +0 -44
  513. data/test/regression/test_chart_data_labels27.rb +0 -44
  514. data/test/regression/test_chart_data_labels28.rb +0 -52
  515. data/test/regression/test_chart_data_labels29.rb +0 -43
  516. data/test/regression/test_chart_data_labels30.rb +0 -46
  517. data/test/regression/test_chart_data_labels31.rb +0 -49
  518. data/test/regression/test_chart_data_labels32.rb +0 -54
  519. data/test/regression/test_chart_data_labels33.rb +0 -52
  520. data/test/regression/test_chart_data_labels34.rb +0 -54
  521. data/test/regression/test_chart_data_labels35.rb +0 -46
  522. data/test/regression/test_chart_data_labels36.rb +0 -54
  523. data/test/regression/test_chart_data_labels37.rb +0 -51
  524. data/test/regression/test_chart_data_labels38.rb +0 -54
  525. data/test/regression/test_chart_data_labels39.rb +0 -53
  526. data/test/regression/test_chart_data_labels40.rb +0 -53
  527. data/test/regression/test_chart_data_labels41.rb +0 -54
  528. data/test/regression/test_chart_data_labels42.rb +0 -58
  529. data/test/regression/test_chart_data_labels43.rb +0 -58
  530. data/test/regression/test_chart_data_labels44.rb +0 -56
  531. data/test/regression/test_chart_data_labels45.rb +0 -57
  532. data/test/regression/test_chart_data_labels46.rb +0 -61
  533. data/test/regression/test_chart_data_labels47.rb +0 -61
  534. data/test/regression/test_chart_data_labels48.rb +0 -55
  535. data/test/regression/test_chart_data_labels49.rb +0 -55
  536. data/test/regression/test_chart_data_labels50.rb +0 -57
  537. data/test/regression/test_chart_date01.rb +0 -53
  538. data/test/regression/test_chart_date02.rb +0 -59
  539. data/test/regression/test_chart_date03.rb +0 -59
  540. data/test/regression/test_chart_date04.rb +0 -61
  541. data/test/regression/test_chart_date05.rb +0 -57
  542. data/test/regression/test_chart_display_units01.rb +0 -35
  543. data/test/regression/test_chart_display_units02.rb +0 -36
  544. data/test/regression/test_chart_display_units03.rb +0 -36
  545. data/test/regression/test_chart_display_units04.rb +0 -36
  546. data/test/regression/test_chart_display_units05.rb +0 -36
  547. data/test/regression/test_chart_display_units06.rb +0 -36
  548. data/test/regression/test_chart_display_units07.rb +0 -36
  549. data/test/regression/test_chart_display_units08.rb +0 -36
  550. data/test/regression/test_chart_display_units09.rb +0 -36
  551. data/test/regression/test_chart_display_units10.rb +0 -36
  552. data/test/regression/test_chart_display_units11.rb +0 -36
  553. data/test/regression/test_chart_display_units12.rb +0 -41
  554. data/test/regression/test_chart_doughnut01.rb +0 -39
  555. data/test/regression/test_chart_doughnut02.rb +0 -38
  556. data/test/regression/test_chart_doughnut03.rb +0 -38
  557. data/test/regression/test_chart_doughnut04.rb +0 -38
  558. data/test/regression/test_chart_doughnut05.rb +0 -38
  559. data/test/regression/test_chart_doughnut06.rb +0 -34
  560. data/test/regression/test_chart_doughnut07.rb +0 -37
  561. data/test/regression/test_chart_drop_lines01.rb +0 -46
  562. data/test/regression/test_chart_drop_lines02.rb +0 -51
  563. data/test/regression/test_chart_drop_lines03.rb +0 -46
  564. data/test/regression/test_chart_drop_lines04.rb +0 -64
  565. data/test/regression/test_chart_errorbars01.rb +0 -46
  566. data/test/regression/test_chart_errorbars02.rb +0 -56
  567. data/test/regression/test_chart_errorbars03.rb +0 -52
  568. data/test/regression/test_chart_errorbars04.rb +0 -47
  569. data/test/regression/test_chart_errorbars05.rb +0 -46
  570. data/test/regression/test_chart_errorbars06.rb +0 -46
  571. data/test/regression/test_chart_errorbars07.rb +0 -65
  572. data/test/regression/test_chart_errorbars08.rb +0 -50
  573. data/test/regression/test_chart_errorbars09.rb +0 -50
  574. data/test/regression/test_chart_errorbars10.rb +0 -52
  575. data/test/regression/test_chart_font01.rb +0 -54
  576. data/test/regression/test_chart_font02.rb +0 -56
  577. data/test/regression/test_chart_font03.rb +0 -59
  578. data/test/regression/test_chart_font04.rb +0 -57
  579. data/test/regression/test_chart_font05.rb +0 -54
  580. data/test/regression/test_chart_font06.rb +0 -84
  581. data/test/regression/test_chart_font07.rb +0 -44
  582. data/test/regression/test_chart_font08.rb +0 -44
  583. data/test/regression/test_chart_font09.rb +0 -40
  584. data/test/regression/test_chart_format01.rb +0 -44
  585. data/test/regression/test_chart_format02.rb +0 -45
  586. data/test/regression/test_chart_format03.rb +0 -46
  587. data/test/regression/test_chart_format04.rb +0 -45
  588. data/test/regression/test_chart_format05.rb +0 -45
  589. data/test/regression/test_chart_format06.rb +0 -50
  590. data/test/regression/test_chart_format07.rb +0 -55
  591. data/test/regression/test_chart_format08.rb +0 -50
  592. data/test/regression/test_chart_format09.rb +0 -54
  593. data/test/regression/test_chart_format10.rb +0 -57
  594. data/test/regression/test_chart_format11.rb +0 -61
  595. data/test/regression/test_chart_format12.rb +0 -58
  596. data/test/regression/test_chart_format13.rb +0 -50
  597. data/test/regression/test_chart_format14.rb +0 -54
  598. data/test/regression/test_chart_format15.rb +0 -52
  599. data/test/regression/test_chart_format16.rb +0 -55
  600. data/test/regression/test_chart_format17.rb +0 -39
  601. data/test/regression/test_chart_format18.rb +0 -43
  602. data/test/regression/test_chart_format19.rb +0 -46
  603. data/test/regression/test_chart_format20.rb +0 -54
  604. data/test/regression/test_chart_format21.rb +0 -47
  605. data/test/regression/test_chart_format22.rb +0 -47
  606. data/test/regression/test_chart_format23.rb +0 -47
  607. data/test/regression/test_chart_format24.rb +0 -52
  608. data/test/regression/test_chart_format25.rb +0 -46
  609. data/test/regression/test_chart_format26.rb +0 -48
  610. data/test/regression/test_chart_format27.rb +0 -58
  611. data/test/regression/test_chart_format28.rb +0 -52
  612. data/test/regression/test_chart_format29.rb +0 -59
  613. data/test/regression/test_chart_format30.rb +0 -53
  614. data/test/regression/test_chart_format31.rb +0 -60
  615. data/test/regression/test_chart_gap01.rb +0 -47
  616. data/test/regression/test_chart_gap02.rb +0 -47
  617. data/test/regression/test_chart_gap03.rb +0 -47
  618. data/test/regression/test_chart_gap04.rb +0 -54
  619. data/test/regression/test_chart_gap05.rb +0 -56
  620. data/test/regression/test_chart_gradient01.rb +0 -43
  621. data/test/regression/test_chart_gradient02.rb +0 -43
  622. data/test/regression/test_chart_gradient03.rb +0 -46
  623. data/test/regression/test_chart_gradient04.rb +0 -46
  624. data/test/regression/test_chart_gradient05.rb +0 -46
  625. data/test/regression/test_chart_gradient06.rb +0 -46
  626. data/test/regression/test_chart_gradient07.rb +0 -44
  627. data/test/regression/test_chart_gradient08.rb +0 -43
  628. data/test/regression/test_chart_gradient09.rb +0 -43
  629. data/test/regression/test_chart_gradient10.rb +0 -43
  630. data/test/regression/test_chart_gradient11.rb +0 -43
  631. data/test/regression/test_chart_gradient12.rb +0 -46
  632. data/test/regression/test_chart_gradient13.rb +0 -46
  633. data/test/regression/test_chart_gridlines01.rb +0 -42
  634. data/test/regression/test_chart_gridlines02.rb +0 -47
  635. data/test/regression/test_chart_gridlines03.rb +0 -63
  636. data/test/regression/test_chart_gridlines04.rb +0 -44
  637. data/test/regression/test_chart_gridlines05.rb +0 -48
  638. data/test/regression/test_chart_gridlines06.rb +0 -53
  639. data/test/regression/test_chart_gridlines07.rb +0 -69
  640. data/test/regression/test_chart_gridlines08.rb +0 -45
  641. data/test/regression/test_chart_gridlines09.rb +0 -67
  642. data/test/regression/test_chart_layout01.rb +0 -48
  643. data/test/regression/test_chart_layout02.rb +0 -48
  644. data/test/regression/test_chart_layout03.rb +0 -49
  645. data/test/regression/test_chart_layout04.rb +0 -47
  646. data/test/regression/test_chart_layout05.rb +0 -64
  647. data/test/regression/test_chart_layout06.rb +0 -48
  648. data/test/regression/test_chart_layout07.rb +0 -48
  649. data/test/regression/test_chart_layout08.rb +0 -49
  650. data/test/regression/test_chart_legend01.rb +0 -41
  651. data/test/regression/test_chart_legend02.rb +0 -41
  652. data/test/regression/test_chart_legend03.rb +0 -41
  653. data/test/regression/test_chart_legend04.rb +0 -41
  654. data/test/regression/test_chart_legend05.rb +0 -41
  655. data/test/regression/test_chart_legend06.rb +0 -41
  656. data/test/regression/test_chart_legend07.rb +0 -38
  657. data/test/regression/test_chart_line01.rb +0 -39
  658. data/test/regression/test_chart_line02.rb +0 -44
  659. data/test/regression/test_chart_line03.rb +0 -39
  660. data/test/regression/test_chart_line04.rb +0 -39
  661. data/test/regression/test_chart_line05.rb +0 -43
  662. data/test/regression/test_chart_line06.rb +0 -43
  663. data/test/regression/test_chart_name01.rb +0 -43
  664. data/test/regression/test_chart_name02.rb +0 -55
  665. data/test/regression/test_chart_name03.rb +0 -55
  666. data/test/regression/test_chart_order01.rb +0 -54
  667. data/test/regression/test_chart_order02.rb +0 -54
  668. data/test/regression/test_chart_order03.rb +0 -60
  669. data/test/regression/test_chart_pattern01.rb +0 -49
  670. data/test/regression/test_chart_pattern02.rb +0 -106
  671. data/test/regression/test_chart_pattern03.rb +0 -105
  672. data/test/regression/test_chart_pattern04.rb +0 -105
  673. data/test/regression/test_chart_pattern05.rb +0 -105
  674. data/test/regression/test_chart_pattern06.rb +0 -105
  675. data/test/regression/test_chart_pattern07.rb +0 -105
  676. data/test/regression/test_chart_pattern08.rb +0 -105
  677. data/test/regression/test_chart_pattern09.rb +0 -57
  678. data/test/regression/test_chart_pattern10.rb +0 -57
  679. data/test/regression/test_chart_pie01.rb +0 -36
  680. data/test/regression/test_chart_pie02.rb +0 -38
  681. data/test/regression/test_chart_pie03.rb +0 -38
  682. data/test/regression/test_chart_pie04.rb +0 -38
  683. data/test/regression/test_chart_pie05.rb +0 -38
  684. data/test/regression/test_chart_points01.rb +0 -37
  685. data/test/regression/test_chart_points02.rb +0 -40
  686. data/test/regression/test_chart_points03.rb +0 -42
  687. data/test/regression/test_chart_points04.rb +0 -52
  688. data/test/regression/test_chart_points05.rb +0 -49
  689. data/test/regression/test_chart_points06.rb +0 -49
  690. data/test/regression/test_chart_radar01.rb +0 -39
  691. data/test/regression/test_chart_radar02.rb +0 -43
  692. data/test/regression/test_chart_radar03.rb +0 -43
  693. data/test/regression/test_chart_scatter01.rb +0 -45
  694. data/test/regression/test_chart_scatter02.rb +0 -49
  695. data/test/regression/test_chart_scatter03.rb +0 -49
  696. data/test/regression/test_chart_scatter04.rb +0 -49
  697. data/test/regression/test_chart_scatter05.rb +0 -49
  698. data/test/regression/test_chart_scatter06.rb +0 -51
  699. data/test/regression/test_chart_scatter07.rb +0 -59
  700. data/test/regression/test_chart_scatter08.rb +0 -57
  701. data/test/regression/test_chart_scatter09.rb +0 -59
  702. data/test/regression/test_chart_scatter10.rb +0 -59
  703. data/test/regression/test_chart_scatter11.rb +0 -59
  704. data/test/regression/test_chart_scatter12.rb +0 -51
  705. data/test/regression/test_chart_scatter13.rb +0 -51
  706. data/test/regression/test_chart_scatter14.rb +0 -52
  707. data/test/regression/test_chart_scatter15.rb +0 -44
  708. data/test/regression/test_chart_size01.rb +0 -41
  709. data/test/regression/test_chart_size02.rb +0 -41
  710. data/test/regression/test_chart_size03.rb +0 -42
  711. data/test/regression/test_chart_size04.rb +0 -41
  712. data/test/regression/test_chart_size05.rb +0 -39
  713. data/test/regression/test_chart_sparse01.rb +0 -51
  714. data/test/regression/test_chart_stock01.rb +0 -65
  715. data/test/regression/test_chart_stock02.rb +0 -71
  716. data/test/regression/test_chart_str01.rb +0 -43
  717. data/test/regression/test_chart_str02.rb +0 -47
  718. data/test/regression/test_chart_table01.rb +0 -42
  719. data/test/regression/test_chart_table02.rb +0 -47
  720. data/test/regression/test_chart_table03.rb +0 -56
  721. data/test/regression/test_chart_title01.rb +0 -39
  722. data/test/regression/test_chart_title02.rb +0 -39
  723. data/test/regression/test_chartsheet01.rb +0 -41
  724. data/test/regression/test_chartsheet02.rb +0 -48
  725. data/test/regression/test_chartsheet03.rb +0 -46
  726. data/test/regression/test_chartsheet04.rb +0 -46
  727. data/test/regression/test_chartsheet05.rb +0 -46
  728. data/test/regression/test_chartsheet06.rb +0 -42
  729. data/test/regression/test_chartsheet07.rb +0 -55
  730. data/test/regression/test_chartsheet08.rb +0 -59
  731. data/test/regression/test_chartsheet09.rb +0 -50
  732. data/test/regression/test_comment01.rb +0 -27
  733. data/test/regression/test_comment02.rb +0 -28
  734. data/test/regression/test_comment03.rb +0 -31
  735. data/test/regression/test_comment04.rb +0 -36
  736. data/test/regression/test_comment06.rb +0 -33
  737. data/test/regression/test_comment07.rb +0 -35
  738. data/test/regression/test_comment08.rb +0 -35
  739. data/test/regression/test_comment09.rb +0 -31
  740. data/test/regression/test_comment10.rb +0 -30
  741. data/test/regression/test_comment11.rb +0 -31
  742. data/test/regression/test_comment12.rb +0 -30
  743. data/test/regression/test_comment13.rb +0 -36
  744. data/test/regression/test_comment14.rb +0 -29
  745. data/test/regression/test_comment15.rb +0 -28
  746. data/test/regression/test_comment16.rb +0 -34
  747. data/test/regression/test_cond_format01.rb +0 -45
  748. data/test/regression/test_cond_format02.rb +0 -40
  749. data/test/regression/test_cond_format03.rb +0 -51
  750. data/test/regression/test_cond_format04.rb +0 -50
  751. data/test/regression/test_cond_format05.rb +0 -40
  752. data/test/regression/test_cond_format06.rb +0 -44
  753. data/test/regression/test_cond_format07.rb +0 -61
  754. data/test/regression/test_cond_format08.rb +0 -45
  755. data/test/regression/test_cond_format10.rb +0 -42
  756. data/test/regression/test_cond_format11.rb +0 -46
  757. data/test/regression/test_cond_format12.rb +0 -46
  758. data/test/regression/test_cond_format13.rb +0 -52
  759. data/test/regression/test_cond_format14.rb +0 -42
  760. data/test/regression/test_cond_format15.rb +0 -53
  761. data/test/regression/test_cond_format16.rb +0 -53
  762. data/test/regression/test_cond_format17.rb +0 -37
  763. data/test/regression/test_cond_format18.rb +0 -136
  764. data/test/regression/test_cond_format19.rb +0 -64
  765. data/test/regression/test_cond_format20.rb +0 -43
  766. data/test/regression/test_custom_colors01.rb +0 -33
  767. data/test/regression/test_data_validation01.rb +0 -22
  768. data/test/regression/test_data_validation02.rb +0 -27
  769. data/test/regression/test_data_validation03.rb +0 -44
  770. data/test/regression/test_data_validation04.rb +0 -37
  771. data/test/regression/test_data_validation05.rb +0 -36
  772. data/test/regression/test_data_validation08.rb +0 -24
  773. data/test/regression/test_date_1904_01.rb +0 -31
  774. data/test/regression/test_date_1904_02.rb +0 -34
  775. data/test/regression/test_date_examples01.rb +0 -48
  776. data/test/regression/test_default_format01.rb +0 -22
  777. data/test/regression/test_default_row01.rb +0 -26
  778. data/test/regression/test_default_row02.rb +0 -28
  779. data/test/regression/test_default_row03.rb +0 -28
  780. data/test/regression/test_default_row04.rb +0 -31
  781. data/test/regression/test_default_row05.rb +0 -32
  782. data/test/regression/test_defined_name01.rb +0 -45
  783. data/test/regression/test_defined_name02.rb +0 -30
  784. data/test/regression/test_defined_name03.rb +0 -30
  785. data/test/regression/test_defined_name04.rb +0 -50
  786. data/test/regression/test_dynamic_array01.rb +0 -25
  787. data/test/regression/test_escapes01.rb +0 -35
  788. data/test/regression/test_escapes02.rb +0 -32
  789. data/test/regression/test_escapes03.rb +0 -33
  790. data/test/regression/test_escapes04.rb +0 -31
  791. data/test/regression/test_escapes05.rb +0 -32
  792. data/test/regression/test_escapes06.rb +0 -26
  793. data/test/regression/test_escapes07.rb +0 -29
  794. data/test/regression/test_escapes08.rb +0 -30
  795. data/test/regression/test_excel2003_style01.rb +0 -21
  796. data/test/regression/test_excel2003_style02.rb +0 -37
  797. data/test/regression/test_excel2003_style03.rb +0 -40
  798. data/test/regression/test_excel2003_style04.rb +0 -24
  799. data/test/regression/test_excel2003_style05.rb +0 -31
  800. data/test/regression/test_excel2003_style06.rb +0 -31
  801. data/test/regression/test_excel2003_style07.rb +0 -31
  802. data/test/regression/test_excel2003_style08.rb +0 -26
  803. data/test/regression/test_firstsheet01.rb +0 -43
  804. data/test/regression/test_fit_to_pages01.rb +0 -35
  805. data/test/regression/test_fit_to_pages02.rb +0 -35
  806. data/test/regression/test_fit_to_pages03.rb +0 -35
  807. data/test/regression/test_fit_to_pages04.rb +0 -35
  808. data/test/regression/test_fit_to_pages05.rb +0 -35
  809. data/test/regression/test_format01.rb +0 -35
  810. data/test/regression/test_format02.rb +0 -47
  811. data/test/regression/test_format03.rb +0 -31
  812. data/test/regression/test_format04.rb +0 -41
  813. data/test/regression/test_format05.rb +0 -26
  814. data/test/regression/test_format11.rb +0 -28
  815. data/test/regression/test_format12.rb +0 -41
  816. data/test/regression/test_format13.rb +0 -31
  817. data/test/regression/test_format14.rb +0 -26
  818. data/test/regression/test_format15.rb +0 -26
  819. data/test/regression/test_format16.rb +0 -24
  820. data/test/regression/test_format17.rb +0 -24
  821. data/test/regression/test_formula_results01.rb +0 -37
  822. data/test/regression/test_gridlines01.rb +0 -34
  823. data/test/regression/test_header01.rb +0 -28
  824. data/test/regression/test_header02.rb +0 -28
  825. data/test/regression/test_header03.rb +0 -31
  826. data/test/regression/test_header04.rb +0 -30
  827. data/test/regression/test_header_image01.rb +0 -26
  828. data/test/regression/test_header_image02.rb +0 -33
  829. data/test/regression/test_header_image03.rb +0 -34
  830. data/test/regression/test_header_image04.rb +0 -34
  831. data/test/regression/test_header_image05.rb +0 -28
  832. data/test/regression/test_header_image06.rb +0 -32
  833. data/test/regression/test_header_image07.rb +0 -29
  834. data/test/regression/test_header_image08.rb +0 -33
  835. data/test/regression/test_header_image09.rb +0 -32
  836. data/test/regression/test_header_image10.rb +0 -36
  837. data/test/regression/test_header_image11.rb +0 -28
  838. data/test/regression/test_header_image12.rb +0 -28
  839. data/test/regression/test_header_image13.rb +0 -36
  840. data/test/regression/test_header_image14.rb +0 -36
  841. data/test/regression/test_header_image15.rb +0 -36
  842. data/test/regression/test_header_image16.rb +0 -42
  843. data/test/regression/test_header_image17.rb +0 -46
  844. data/test/regression/test_header_image18.rb +0 -48
  845. data/test/regression/test_header_image19.rb +0 -36
  846. data/test/regression/test_hide01.rb +0 -25
  847. data/test/regression/test_hyperlink01.rb +0 -26
  848. data/test/regression/test_hyperlink02.rb +0 -30
  849. data/test/regression/test_hyperlink03.rb +0 -36
  850. data/test/regression/test_hyperlink04.rb +0 -34
  851. data/test/regression/test_hyperlink05.rb +0 -29
  852. data/test/regression/test_hyperlink06.rb +0 -28
  853. data/test/regression/test_hyperlink07.rb +0 -23
  854. data/test/regression/test_hyperlink08.rb +0 -27
  855. data/test/regression/test_hyperlink09.rb +0 -28
  856. data/test/regression/test_hyperlink10.rb +0 -27
  857. data/test/regression/test_hyperlink11.rb +0 -27
  858. data/test/regression/test_hyperlink12.rb +0 -28
  859. data/test/regression/test_hyperlink13.rb +0 -27
  860. data/test/regression/test_hyperlink14.rb +0 -27
  861. data/test/regression/test_hyperlink15.rb +0 -29
  862. data/test/regression/test_hyperlink16.rb +0 -29
  863. data/test/regression/test_hyperlink17.rb +0 -30
  864. data/test/regression/test_hyperlink18.rb +0 -30
  865. data/test/regression/test_hyperlink20.rb +0 -32
  866. data/test/regression/test_hyperlink21.rb +0 -27
  867. data/test/regression/test_hyperlink22.rb +0 -27
  868. data/test/regression/test_hyperlink23.rb +0 -27
  869. data/test/regression/test_hyperlink24.rb +0 -27
  870. data/test/regression/test_hyperlink25.rb +0 -30
  871. data/test/regression/test_hyperlink26.rb +0 -30
  872. data/test/regression/test_hyperlink27.rb +0 -27
  873. data/test/regression/test_hyperlink28.rb +0 -50
  874. data/test/regression/test_hyperlink29.rb +0 -27
  875. data/test/regression/test_hyperlink30.rb +0 -36
  876. data/test/regression/test_hyperlink32.rb +0 -27
  877. data/test/regression/test_hyperlink33.rb +0 -28
  878. data/test/regression/test_hyperlink34.rb +0 -33
  879. data/test/regression/test_hyperlink35.rb +0 -39
  880. data/test/regression/test_hyperlink36.rb +0 -34
  881. data/test/regression/test_hyperlink37.rb +0 -33
  882. data/test/regression/test_hyperlink38.rb +0 -27
  883. data/test/regression/test_hyperlink39.rb +0 -27
  884. data/test/regression/test_hyperlink40.rb +0 -27
  885. data/test/regression/test_hyperlink41.rb +0 -27
  886. data/test/regression/test_hyperlink42.rb +0 -27
  887. data/test/regression/test_hyperlink43.rb +0 -27
  888. data/test/regression/test_hyperlink44.rb +0 -27
  889. data/test/regression/test_hyperlink45.rb +0 -27
  890. data/test/regression/test_hyperlink47.rb +0 -27
  891. data/test/regression/test_hyperlink48.rb +0 -31
  892. data/test/regression/test_hyperlink49.rb +0 -29
  893. data/test/regression/test_hyperlink50.rb +0 -27
  894. data/test/regression/test_hyperlink51.rb +0 -27
  895. data/test/regression/test_ignore_error01.rb +0 -23
  896. data/test/regression/test_ignore_error02.rb +0 -24
  897. data/test/regression/test_ignore_error03.rb +0 -26
  898. data/test/regression/test_ignore_error04.rb +0 -26
  899. data/test/regression/test_ignore_error05.rb +0 -32
  900. data/test/regression/test_ignore_error06.rb +0 -32
  901. data/test/regression/test_image01.rb +0 -23
  902. data/test/regression/test_image02.rb +0 -23
  903. data/test/regression/test_image03.rb +0 -23
  904. data/test/regression/test_image04.rb +0 -23
  905. data/test/regression/test_image05.rb +0 -26
  906. data/test/regression/test_image06.rb +0 -36
  907. data/test/regression/test_image07.rb +0 -25
  908. data/test/regression/test_image08.rb +0 -27
  909. data/test/regression/test_image09.rb +0 -24
  910. data/test/regression/test_image10.rb +0 -24
  911. data/test/regression/test_image11.rb +0 -24
  912. data/test/regression/test_image12.rb +0 -27
  913. data/test/regression/test_image13.rb +0 -27
  914. data/test/regression/test_image14.rb +0 -29
  915. data/test/regression/test_image15.rb +0 -31
  916. data/test/regression/test_image16.rb +0 -24
  917. data/test/regression/test_image17.rb +0 -23
  918. data/test/regression/test_image18.rb +0 -27
  919. data/test/regression/test_image19.rb +0 -24
  920. data/test/regression/test_image22.rb +0 -24
  921. data/test/regression/test_image23.rb +0 -30
  922. data/test/regression/test_image24.rb +0 -24
  923. data/test/regression/test_image25.rb +0 -24
  924. data/test/regression/test_image26.rb +0 -30
  925. data/test/regression/test_image27.rb +0 -24
  926. data/test/regression/test_image28.rb +0 -27
  927. data/test/regression/test_image29.rb +0 -27
  928. data/test/regression/test_image30.rb +0 -27
  929. data/test/regression/test_image31.rb +0 -30
  930. data/test/regression/test_image32.rb +0 -28
  931. data/test/regression/test_image33.rb +0 -32
  932. data/test/regression/test_image35.rb +0 -26
  933. data/test/regression/test_image36.rb +0 -26
  934. data/test/regression/test_image44.rb +0 -28
  935. data/test/regression/test_image45.rb +0 -29
  936. data/test/regression/test_image46.rb +0 -29
  937. data/test/regression/test_image47.rb +0 -28
  938. data/test/regression/test_image48.rb +0 -32
  939. data/test/regression/test_image49.rb +0 -38
  940. data/test/regression/test_image50.rb +0 -24
  941. data/test/regression/test_image51.rb +0 -30
  942. data/test/regression/test_image52.rb +0 -26
  943. data/test/regression/test_image53.rb +0 -26
  944. data/test/regression/test_image54.rb +0 -26
  945. data/test/regression/test_image55.rb +0 -27
  946. data/test/regression/test_image56.rb +0 -23
  947. data/test/regression/test_image57.rb +0 -23
  948. data/test/regression/test_landscape01.rb +0 -27
  949. data/test/regression/test_macro01.rb +0 -29
  950. data/test/regression/test_merge_cells01.rb +0 -25
  951. data/test/regression/test_merge_range01.rb +0 -24
  952. data/test/regression/test_merge_range02.rb +0 -24
  953. data/test/regression/test_merge_range03.rb +0 -26
  954. data/test/regression/test_merge_range04.rb +0 -24
  955. data/test/regression/test_merge_range05.rb +0 -24
  956. data/test/regression/test_object_position01.rb +0 -26
  957. data/test/regression/test_object_position02.rb +0 -26
  958. data/test/regression/test_object_position03.rb +0 -26
  959. data/test/regression/test_object_position04.rb +0 -44
  960. data/test/regression/test_object_position06.rb +0 -28
  961. data/test/regression/test_object_position07.rb +0 -28
  962. data/test/regression/test_object_position08.rb +0 -47
  963. data/test/regression/test_object_position09.rb +0 -50
  964. data/test/regression/test_object_position10.rb +0 -28
  965. data/test/regression/test_object_position12.rb +0 -25
  966. data/test/regression/test_object_position13.rb +0 -25
  967. data/test/regression/test_object_position14.rb +0 -25
  968. data/test/regression/test_object_position15.rb +0 -29
  969. data/test/regression/test_object_position16.rb +0 -29
  970. data/test/regression/test_object_position17.rb +0 -29
  971. data/test/regression/test_object_position18.rb +0 -29
  972. data/test/regression/test_object_position19.rb +0 -29
  973. data/test/regression/test_object_position20.rb +0 -29
  974. data/test/regression/test_outline01.rb +0 -84
  975. data/test/regression/test_outline02.rb +0 -87
  976. data/test/regression/test_outline03.rb +0 -57
  977. data/test/regression/test_outline04.rb +0 -53
  978. data/test/regression/test_outline05.rb +0 -88
  979. data/test/regression/test_outline06.rb +0 -87
  980. data/test/regression/test_page_breaks01.rb +0 -34
  981. data/test/regression/test_page_breaks02.rb +0 -34
  982. data/test/regression/test_page_breaks03.rb +0 -34
  983. data/test/regression/test_page_breaks04.rb +0 -34
  984. data/test/regression/test_page_breaks05.rb +0 -34
  985. data/test/regression/test_page_breaks06.rb +0 -35
  986. data/test/regression/test_page_view01.rb +0 -34
  987. data/test/regression/test_panes01.rb +0 -61
  988. data/test/regression/test_print_across01.rb +0 -35
  989. data/test/regression/test_print_area01.rb +0 -34
  990. data/test/regression/test_print_area02.rb +0 -34
  991. data/test/regression/test_print_area03.rb +0 -34
  992. data/test/regression/test_print_area04.rb +0 -34
  993. data/test/regression/test_print_area05.rb +0 -34
  994. data/test/regression/test_print_area06.rb +0 -34
  995. data/test/regression/test_print_area07.rb +0 -35
  996. data/test/regression/test_print_options01.rb +0 -34
  997. data/test/regression/test_print_options02.rb +0 -34
  998. data/test/regression/test_print_options03.rb +0 -34
  999. data/test/regression/test_print_options04.rb +0 -34
  1000. data/test/regression/test_print_options05.rb +0 -37
  1001. data/test/regression/test_print_options06.rb +0 -35
  1002. data/test/regression/test_print_options07.rb +0 -31
  1003. data/test/regression/test_print_scale01.rb +0 -35
  1004. data/test/regression/test_print_scale02.rb +0 -35
  1005. data/test/regression/test_properties01.rb +0 -36
  1006. data/test/regression/test_properties02.rb +0 -25
  1007. data/test/regression/test_properties03.rb +0 -26
  1008. data/test/regression/test_properties04.rb +0 -61
  1009. data/test/regression/test_properties05.rb +0 -30
  1010. data/test/regression/test_protect01.rb +0 -28
  1011. data/test/regression/test_protect02.rb +0 -30
  1012. data/test/regression/test_protect03.rb +0 -30
  1013. data/test/regression/test_protect04.rb +0 -32
  1014. data/test/regression/test_protect05.rb +0 -35
  1015. data/test/regression/test_protect06.rb +0 -35
  1016. data/test/regression/test_protect07.rb +0 -23
  1017. data/test/regression/test_quote_name01.rb +0 -48
  1018. data/test/regression/test_quote_name03.rb +0 -41
  1019. data/test/regression/test_quote_name04.rb +0 -40
  1020. data/test/regression/test_repeat01.rb +0 -34
  1021. data/test/regression/test_repeat02.rb +0 -34
  1022. data/test/regression/test_repeat03.rb +0 -35
  1023. data/test/regression/test_repeat04.rb +0 -34
  1024. data/test/regression/test_repeat05.rb +0 -41
  1025. data/test/regression/test_rich_string01.rb +0 -28
  1026. data/test/regression/test_rich_string02.rb +0 -28
  1027. data/test/regression/test_rich_string03.rb +0 -28
  1028. data/test/regression/test_rich_string04.rb +0 -28
  1029. data/test/regression/test_rich_string05.rb +0 -30
  1030. data/test/regression/test_rich_string06.rb +0 -27
  1031. data/test/regression/test_rich_string07.rb +0 -33
  1032. data/test/regression/test_rich_string08.rb +0 -29
  1033. data/test/regression/test_rich_string09.rb +0 -31
  1034. data/test/regression/test_rich_string10.rb +0 -30
  1035. data/test/regression/test_rich_string11.rb +0 -29
  1036. data/test/regression/test_rich_string12.rb +0 -32
  1037. data/test/regression/test_row_col_format01.rb +0 -24
  1038. data/test/regression/test_row_col_format02.rb +0 -25
  1039. data/test/regression/test_row_col_format03.rb +0 -24
  1040. data/test/regression/test_row_col_format04.rb +0 -25
  1041. data/test/regression/test_row_col_format05.rb +0 -26
  1042. data/test/regression/test_row_col_format06.rb +0 -29
  1043. data/test/regression/test_row_col_format07.rb +0 -24
  1044. data/test/regression/test_row_col_format08.rb +0 -34
  1045. data/test/regression/test_row_col_format09.rb +0 -33
  1046. data/test/regression/test_row_col_format10.rb +0 -24
  1047. data/test/regression/test_row_col_format11.rb +0 -23
  1048. data/test/regression/test_row_col_format12.rb +0 -23
  1049. data/test/regression/test_row_col_format13.rb +0 -28
  1050. data/test/regression/test_row_col_format14.rb +0 -28
  1051. data/test/regression/test_selection01.rb +0 -23
  1052. data/test/regression/test_selection02.rb +0 -33
  1053. data/test/regression/test_set_column01.rb +0 -63
  1054. data/test/regression/test_set_column02.rb +0 -64
  1055. data/test/regression/test_set_column03.rb +0 -34
  1056. data/test/regression/test_set_column04.rb +0 -42
  1057. data/test/regression/test_set_column05.rb +0 -52
  1058. data/test/regression/test_set_column06.rb +0 -49
  1059. data/test/regression/test_set_column07.rb +0 -45
  1060. data/test/regression/test_set_column08.rb +0 -42
  1061. data/test/regression/test_set_column09.rb +0 -31
  1062. data/test/regression/test_set_column10.rb +0 -55
  1063. data/test/regression/test_set_column11.rb +0 -48
  1064. data/test/regression/test_set_print_scale01.rb +0 -36
  1065. data/test/regression/test_set_row01.rb +0 -35
  1066. data/test/regression/test_set_row02.rb +0 -35
  1067. data/test/regression/test_set_row03.rb +0 -35
  1068. data/test/regression/test_set_row04.rb +0 -35
  1069. data/test/regression/test_set_start_page01.rb +0 -33
  1070. data/test/regression/test_set_start_page02.rb +0 -33
  1071. data/test/regression/test_set_start_page03.rb +0 -33
  1072. data/test/regression/test_shape01.rb +0 -25
  1073. data/test/regression/test_shape02.rb +0 -42
  1074. data/test/regression/test_shape03.rb +0 -45
  1075. data/test/regression/test_shape04.rb +0 -43
  1076. data/test/regression/test_shape_connect01.rb +0 -48
  1077. data/test/regression/test_shape_connect02.rb +0 -42
  1078. data/test/regression/test_shape_connect03.rb +0 -78
  1079. data/test/regression/test_shape_connect04.rb +0 -75
  1080. data/test/regression/test_shape_scale01.rb +0 -45
  1081. data/test/regression/test_shape_stencil01.rb +0 -39
  1082. data/test/regression/test_shared_strings01.rb +0 -32
  1083. data/test/regression/test_shared_strings02.rb +0 -45
  1084. data/test/regression/test_shared_strings_encoding.rb +0 -0
  1085. data/test/regression/test_simple01.rb +0 -24
  1086. data/test/regression/test_simple02.rb +0 -32
  1087. data/test/regression/test_simple03.rb +0 -39
  1088. data/test/regression/test_simple04.rb +0 -29
  1089. data/test/regression/test_simple05.rb +0 -40
  1090. data/test/regression/test_tab_color01.rb +0 -20
  1091. data/test/regression/test_table01.rb +0 -27
  1092. data/test/regression/test_table02.rb +0 -37
  1093. data/test/regression/test_table03.rb +0 -33
  1094. data/test/regression/test_table04.rb +0 -37
  1095. data/test/regression/test_table05.rb +0 -41
  1096. data/test/regression/test_table06.rb +0 -44
  1097. data/test/regression/test_table07.rb +0 -29
  1098. data/test/regression/test_table08.rb +0 -48
  1099. data/test/regression/test_table09.rb +0 -65
  1100. data/test/regression/test_table10.rb +0 -68
  1101. data/test/regression/test_table11.rb +0 -37
  1102. data/test/regression/test_table12.rb +0 -36
  1103. data/test/regression/test_table13.rb +0 -51
  1104. data/test/regression/test_table14.rb +0 -51
  1105. data/test/regression/test_table15.rb +0 -37
  1106. data/test/regression/test_table16.rb +0 -37
  1107. data/test/regression/test_table17.rb +0 -70
  1108. data/test/regression/test_table20.rb +0 -34
  1109. data/test/regression/test_table21.rb +0 -36
  1110. data/test/regression/test_table22.rb +0 -32
  1111. data/test/regression/test_table23.rb +0 -56
  1112. data/test/regression/test_table24.rb +0 -27
  1113. data/test/regression/test_table25.rb +0 -27
  1114. data/test/regression/test_table26.rb +0 -38
  1115. data/test/regression/test_tutorial01.rb +0 -38
  1116. data/test/regression/test_tutorial02.rb +0 -44
  1117. data/test/regression/test_tutorial03.rb +0 -49
  1118. data/test/regression/test_types02.rb +0 -25
  1119. data/test/regression/test_types08.rb +0 -31
  1120. data/test/regression/test_update_range_format_with_params.rb +0 -42
  1121. data/test/regression/test_urls_as_strings.rb +0 -25
  1122. data/test/regression/test_utf8_01.rb +0 -23
  1123. data/test/regression/test_utf8_03.rb +0 -23
  1124. data/test/regression/test_utf8_04.rb +0 -23
  1125. data/test/regression/test_utf8_05.rb +0 -26
  1126. data/test/regression/test_utf8_06.rb +0 -28
  1127. data/test/regression/test_utf8_07.rb +0 -27
  1128. data/test/regression/test_utf8_08.rb +0 -38
  1129. data/test/regression/test_utf8_09.rb +0 -20
  1130. data/test/regression/test_utf8_10.rb +0 -42
  1131. data/test/regression/test_utf8_11.rb +0 -23
  1132. data/test/regression/test_vml01.rb +0 -29
  1133. data/test/regression/test_vml02.rb +0 -31
  1134. data/test/regression/test_vml03.rb +0 -40
  1135. data/test/regression/xlsx_files/array_formula01.xlsx +0 -0
  1136. data/test/regression/xlsx_files/array_formula02.xlsx +0 -0
  1137. data/test/regression/xlsx_files/array_formula03.xlsx +0 -0
  1138. data/test/regression/xlsx_files/array_formula04.xlsx +0 -0
  1139. data/test/regression/xlsx_files/autofilter00.xlsx +0 -0
  1140. data/test/regression/xlsx_files/autofilter01.xlsx +0 -0
  1141. data/test/regression/xlsx_files/autofilter02.xlsx +0 -0
  1142. data/test/regression/xlsx_files/autofilter03.xlsx +0 -0
  1143. data/test/regression/xlsx_files/autofilter04.xlsx +0 -0
  1144. data/test/regression/xlsx_files/autofilter05.xlsx +0 -0
  1145. data/test/regression/xlsx_files/autofilter06.xlsx +0 -0
  1146. data/test/regression/xlsx_files/autofilter07.xlsx +0 -0
  1147. data/test/regression/xlsx_files/autofilter08.xlsx +0 -0
  1148. data/test/regression/xlsx_files/autofilter09.xlsx +0 -0
  1149. data/test/regression/xlsx_files/autofilter10.xlsx +0 -0
  1150. data/test/regression/xlsx_files/background01.xlsx +0 -0
  1151. data/test/regression/xlsx_files/background02.xlsx +0 -0
  1152. data/test/regression/xlsx_files/background03.xlsx +0 -0
  1153. data/test/regression/xlsx_files/background04.xlsx +0 -0
  1154. data/test/regression/xlsx_files/background05.xlsx +0 -0
  1155. data/test/regression/xlsx_files/background06.xlsx +0 -0
  1156. data/test/regression/xlsx_files/background07.xlsx +0 -0
  1157. data/test/regression/xlsx_files/button01.xlsx +0 -0
  1158. data/test/regression/xlsx_files/button02.xlsx +0 -0
  1159. data/test/regression/xlsx_files/button03.xlsx +0 -0
  1160. data/test/regression/xlsx_files/button04.xlsx +0 -0
  1161. data/test/regression/xlsx_files/button05.xlsx +0 -0
  1162. data/test/regression/xlsx_files/button07.xlsm +0 -0
  1163. data/test/regression/xlsx_files/button08.xlsx +0 -0
  1164. data/test/regression/xlsx_files/button09.xlsx +0 -0
  1165. data/test/regression/xlsx_files/button10.xlsx +0 -0
  1166. data/test/regression/xlsx_files/button11.xlsx +0 -0
  1167. data/test/regression/xlsx_files/button12.xlsx +0 -0
  1168. data/test/regression/xlsx_files/chart_area01.xlsx +0 -0
  1169. data/test/regression/xlsx_files/chart_area02.xlsx +0 -0
  1170. data/test/regression/xlsx_files/chart_area03.xlsx +0 -0
  1171. data/test/regression/xlsx_files/chart_area04.xlsx +0 -0
  1172. data/test/regression/xlsx_files/chart_axis01.xlsx +0 -0
  1173. data/test/regression/xlsx_files/chart_axis02.xlsx +0 -0
  1174. data/test/regression/xlsx_files/chart_axis03.xlsx +0 -0
  1175. data/test/regression/xlsx_files/chart_axis04.xlsx +0 -0
  1176. data/test/regression/xlsx_files/chart_axis05.xlsx +0 -0
  1177. data/test/regression/xlsx_files/chart_axis06.xlsx +0 -0
  1178. data/test/regression/xlsx_files/chart_axis07.xlsx +0 -0
  1179. data/test/regression/xlsx_files/chart_axis08.xlsx +0 -0
  1180. data/test/regression/xlsx_files/chart_axis09.xlsx +0 -0
  1181. data/test/regression/xlsx_files/chart_axis10.xlsx +0 -0
  1182. data/test/regression/xlsx_files/chart_axis11.xlsx +0 -0
  1183. data/test/regression/xlsx_files/chart_axis12.xlsx +0 -0
  1184. data/test/regression/xlsx_files/chart_axis13.xlsx +0 -0
  1185. data/test/regression/xlsx_files/chart_axis14.xlsx +0 -0
  1186. data/test/regression/xlsx_files/chart_axis15.xlsx +0 -0
  1187. data/test/regression/xlsx_files/chart_axis16.xlsx +0 -0
  1188. data/test/regression/xlsx_files/chart_axis17.xlsx +0 -0
  1189. data/test/regression/xlsx_files/chart_axis18.xlsx +0 -0
  1190. data/test/regression/xlsx_files/chart_axis19.xlsx +0 -0
  1191. data/test/regression/xlsx_files/chart_axis20.xlsx +0 -0
  1192. data/test/regression/xlsx_files/chart_axis21.xlsx +0 -0
  1193. data/test/regression/xlsx_files/chart_axis22.xlsx +0 -0
  1194. data/test/regression/xlsx_files/chart_axis23.xlsx +0 -0
  1195. data/test/regression/xlsx_files/chart_axis24.xlsx +0 -0
  1196. data/test/regression/xlsx_files/chart_axis25.xlsx +0 -0
  1197. data/test/regression/xlsx_files/chart_axis26.xlsx +0 -0
  1198. data/test/regression/xlsx_files/chart_axis27.xlsx +0 -0
  1199. data/test/regression/xlsx_files/chart_axis28.xlsx +0 -0
  1200. data/test/regression/xlsx_files/chart_axis29.xlsx +0 -0
  1201. data/test/regression/xlsx_files/chart_axis30.xlsx +0 -0
  1202. data/test/regression/xlsx_files/chart_axis31.xlsx +0 -0
  1203. data/test/regression/xlsx_files/chart_axis32.xlsx +0 -0
  1204. data/test/regression/xlsx_files/chart_axis33.xlsx +0 -0
  1205. data/test/regression/xlsx_files/chart_axis34.xlsx +0 -0
  1206. data/test/regression/xlsx_files/chart_axis35.xlsx +0 -0
  1207. data/test/regression/xlsx_files/chart_axis36.xlsx +0 -0
  1208. data/test/regression/xlsx_files/chart_axis37.xlsx +0 -0
  1209. data/test/regression/xlsx_files/chart_axis38.xlsx +0 -0
  1210. data/test/regression/xlsx_files/chart_axis39.xlsx +0 -0
  1211. data/test/regression/xlsx_files/chart_axis40.xlsx +0 -0
  1212. data/test/regression/xlsx_files/chart_axis41.xlsx +0 -0
  1213. data/test/regression/xlsx_files/chart_axis42.xlsx +0 -0
  1214. data/test/regression/xlsx_files/chart_axis43.xlsx +0 -0
  1215. data/test/regression/xlsx_files/chart_axis44.xlsx +0 -0
  1216. data/test/regression/xlsx_files/chart_axis45.xlsx +0 -0
  1217. data/test/regression/xlsx_files/chart_axis46.xlsx +0 -0
  1218. data/test/regression/xlsx_files/chart_axis47.xlsx +0 -0
  1219. data/test/regression/xlsx_files/chart_axis48.xlsx +0 -0
  1220. data/test/regression/xlsx_files/chart_bar01.xlsx +0 -0
  1221. data/test/regression/xlsx_files/chart_bar02.xlsx +0 -0
  1222. data/test/regression/xlsx_files/chart_bar03.xlsx +0 -0
  1223. data/test/regression/xlsx_files/chart_bar04.xlsx +0 -0
  1224. data/test/regression/xlsx_files/chart_bar05.xlsx +0 -0
  1225. data/test/regression/xlsx_files/chart_bar06.xlsx +0 -0
  1226. data/test/regression/xlsx_files/chart_bar07.xlsx +0 -0
  1227. data/test/regression/xlsx_files/chart_bar08.xlsx +0 -0
  1228. data/test/regression/xlsx_files/chart_bar09.xlsx +0 -0
  1229. data/test/regression/xlsx_files/chart_bar10.xlsx +0 -0
  1230. data/test/regression/xlsx_files/chart_bar11.xlsx +0 -0
  1231. data/test/regression/xlsx_files/chart_bar12.xlsx +0 -0
  1232. data/test/regression/xlsx_files/chart_bar13.xlsx +0 -0
  1233. data/test/regression/xlsx_files/chart_bar14.xlsx +0 -0
  1234. data/test/regression/xlsx_files/chart_bar15.xlsx +0 -0
  1235. data/test/regression/xlsx_files/chart_bar16.xlsx +0 -0
  1236. data/test/regression/xlsx_files/chart_bar17.xlsx +0 -0
  1237. data/test/regression/xlsx_files/chart_bar18.xlsx +0 -0
  1238. data/test/regression/xlsx_files/chart_bar19.xlsx +0 -0
  1239. data/test/regression/xlsx_files/chart_bar20.xlsx +0 -0
  1240. data/test/regression/xlsx_files/chart_bar21.xlsx +0 -0
  1241. data/test/regression/xlsx_files/chart_bar22.xlsx +0 -0
  1242. data/test/regression/xlsx_files/chart_bar23.xlsx +0 -0
  1243. data/test/regression/xlsx_files/chart_bar24.xlsx +0 -0
  1244. data/test/regression/xlsx_files/chart_blank01.xlsx +0 -0
  1245. data/test/regression/xlsx_files/chart_blank02.xlsx +0 -0
  1246. data/test/regression/xlsx_files/chart_blank03.xlsx +0 -0
  1247. data/test/regression/xlsx_files/chart_blank04.xlsx +0 -0
  1248. data/test/regression/xlsx_files/chart_blank05.xlsx +0 -0
  1249. data/test/regression/xlsx_files/chart_blank06.xlsx +0 -0
  1250. data/test/regression/xlsx_files/chart_chartarea01.xlsx +0 -0
  1251. data/test/regression/xlsx_files/chart_chartarea03.xlsx +0 -0
  1252. data/test/regression/xlsx_files/chart_chartarea04.xlsx +0 -0
  1253. data/test/regression/xlsx_files/chart_chartarea05.xlsx +0 -0
  1254. data/test/regression/xlsx_files/chart_chartarea06.xlsx +0 -0
  1255. data/test/regression/xlsx_files/chart_clustered01.xlsx +0 -0
  1256. data/test/regression/xlsx_files/chart_column01.xlsx +0 -0
  1257. data/test/regression/xlsx_files/chart_column02.xlsx +0 -0
  1258. data/test/regression/xlsx_files/chart_column03.xlsx +0 -0
  1259. data/test/regression/xlsx_files/chart_column04.xlsx +0 -0
  1260. data/test/regression/xlsx_files/chart_column05.xlsx +0 -0
  1261. data/test/regression/xlsx_files/chart_column06.xlsx +0 -0
  1262. data/test/regression/xlsx_files/chart_column07.xlsx +0 -0
  1263. data/test/regression/xlsx_files/chart_column08.xlsx +0 -0
  1264. data/test/regression/xlsx_files/chart_column09.xlsx +0 -0
  1265. data/test/regression/xlsx_files/chart_column10.xlsx +0 -0
  1266. data/test/regression/xlsx_files/chart_column11.xlsx +0 -0
  1267. data/test/regression/xlsx_files/chart_column12.xlsx +0 -0
  1268. data/test/regression/xlsx_files/chart_combined01.xlsx +0 -0
  1269. data/test/regression/xlsx_files/chart_combined02.xlsx +0 -0
  1270. data/test/regression/xlsx_files/chart_combined03.xlsx +0 -0
  1271. data/test/regression/xlsx_files/chart_combined04.xlsx +0 -0
  1272. data/test/regression/xlsx_files/chart_combined05.xlsx +0 -0
  1273. data/test/regression/xlsx_files/chart_combined06.xlsx +0 -0
  1274. data/test/regression/xlsx_files/chart_combined07.xlsx +0 -0
  1275. data/test/regression/xlsx_files/chart_combined08.xlsx +0 -0
  1276. data/test/regression/xlsx_files/chart_combined09.xlsx +0 -0
  1277. data/test/regression/xlsx_files/chart_combined10.xlsx +0 -0
  1278. data/test/regression/xlsx_files/chart_combined11.xlsx +0 -0
  1279. data/test/regression/xlsx_files/chart_crossing01.xlsx +0 -0
  1280. data/test/regression/xlsx_files/chart_crossing02.xlsx +0 -0
  1281. data/test/regression/xlsx_files/chart_crossing03.xlsx +0 -0
  1282. data/test/regression/xlsx_files/chart_crossing04.xlsx +0 -0
  1283. data/test/regression/xlsx_files/chart_crossing05.xlsx +0 -0
  1284. data/test/regression/xlsx_files/chart_crossing06.xlsx +0 -0
  1285. data/test/regression/xlsx_files/chart_data_labels01.xlsx +0 -0
  1286. data/test/regression/xlsx_files/chart_data_labels02.xlsx +0 -0
  1287. data/test/regression/xlsx_files/chart_data_labels03.xlsx +0 -0
  1288. data/test/regression/xlsx_files/chart_data_labels04.xlsx +0 -0
  1289. data/test/regression/xlsx_files/chart_data_labels05.xlsx +0 -0
  1290. data/test/regression/xlsx_files/chart_data_labels06.xlsx +0 -0
  1291. data/test/regression/xlsx_files/chart_data_labels07.xlsx +0 -0
  1292. data/test/regression/xlsx_files/chart_data_labels08.xlsx +0 -0
  1293. data/test/regression/xlsx_files/chart_data_labels09.xlsx +0 -0
  1294. data/test/regression/xlsx_files/chart_data_labels10.xlsx +0 -0
  1295. data/test/regression/xlsx_files/chart_data_labels11.xlsx +0 -0
  1296. data/test/regression/xlsx_files/chart_data_labels12.xlsx +0 -0
  1297. data/test/regression/xlsx_files/chart_data_labels13.xlsx +0 -0
  1298. data/test/regression/xlsx_files/chart_data_labels14.xlsx +0 -0
  1299. data/test/regression/xlsx_files/chart_data_labels15.xlsx +0 -0
  1300. data/test/regression/xlsx_files/chart_data_labels16.xlsx +0 -0
  1301. data/test/regression/xlsx_files/chart_data_labels17.xlsx +0 -0
  1302. data/test/regression/xlsx_files/chart_data_labels18.xlsx +0 -0
  1303. data/test/regression/xlsx_files/chart_data_labels19.xlsx +0 -0
  1304. data/test/regression/xlsx_files/chart_data_labels20.xlsx +0 -0
  1305. data/test/regression/xlsx_files/chart_data_labels21.xlsx +0 -0
  1306. data/test/regression/xlsx_files/chart_data_labels22.xlsx +0 -0
  1307. data/test/regression/xlsx_files/chart_data_labels23.xlsx +0 -0
  1308. data/test/regression/xlsx_files/chart_data_labels24.xlsx +0 -0
  1309. data/test/regression/xlsx_files/chart_data_labels25.xlsx +0 -0
  1310. data/test/regression/xlsx_files/chart_data_labels26.xlsx +0 -0
  1311. data/test/regression/xlsx_files/chart_data_labels27.xlsx +0 -0
  1312. data/test/regression/xlsx_files/chart_data_labels28.xlsx +0 -0
  1313. data/test/regression/xlsx_files/chart_data_labels29.xlsx +0 -0
  1314. data/test/regression/xlsx_files/chart_data_labels30.xlsx +0 -0
  1315. data/test/regression/xlsx_files/chart_data_labels31.xlsx +0 -0
  1316. data/test/regression/xlsx_files/chart_data_labels32.xlsx +0 -0
  1317. data/test/regression/xlsx_files/chart_data_labels33.xlsx +0 -0
  1318. data/test/regression/xlsx_files/chart_data_labels34.xlsx +0 -0
  1319. data/test/regression/xlsx_files/chart_data_labels35.xlsx +0 -0
  1320. data/test/regression/xlsx_files/chart_data_labels36.xlsx +0 -0
  1321. data/test/regression/xlsx_files/chart_data_labels37.xlsx +0 -0
  1322. data/test/regression/xlsx_files/chart_data_labels38.xlsx +0 -0
  1323. data/test/regression/xlsx_files/chart_data_labels39.xlsx +0 -0
  1324. data/test/regression/xlsx_files/chart_data_labels40.xlsx +0 -0
  1325. data/test/regression/xlsx_files/chart_data_labels41.xlsx +0 -0
  1326. data/test/regression/xlsx_files/chart_data_labels42.xlsx +0 -0
  1327. data/test/regression/xlsx_files/chart_data_labels43.xlsx +0 -0
  1328. data/test/regression/xlsx_files/chart_data_labels44.xlsx +0 -0
  1329. data/test/regression/xlsx_files/chart_data_labels45.xlsx +0 -0
  1330. data/test/regression/xlsx_files/chart_data_labels46.xlsx +0 -0
  1331. data/test/regression/xlsx_files/chart_data_labels47.xlsx +0 -0
  1332. data/test/regression/xlsx_files/chart_data_labels48.xlsx +0 -0
  1333. data/test/regression/xlsx_files/chart_data_labels49.xlsx +0 -0
  1334. data/test/regression/xlsx_files/chart_data_labels50.xlsx +0 -0
  1335. data/test/regression/xlsx_files/chart_date01.xlsx +0 -0
  1336. data/test/regression/xlsx_files/chart_date02.xlsx +0 -0
  1337. data/test/regression/xlsx_files/chart_date03.xlsx +0 -0
  1338. data/test/regression/xlsx_files/chart_date04.xlsx +0 -0
  1339. data/test/regression/xlsx_files/chart_date05.xlsx +0 -0
  1340. data/test/regression/xlsx_files/chart_display_units01.xlsx +0 -0
  1341. data/test/regression/xlsx_files/chart_display_units02.xlsx +0 -0
  1342. data/test/regression/xlsx_files/chart_display_units03.xlsx +0 -0
  1343. data/test/regression/xlsx_files/chart_display_units04.xlsx +0 -0
  1344. data/test/regression/xlsx_files/chart_display_units05.xlsx +0 -0
  1345. data/test/regression/xlsx_files/chart_display_units06.xlsx +0 -0
  1346. data/test/regression/xlsx_files/chart_display_units07.xlsx +0 -0
  1347. data/test/regression/xlsx_files/chart_display_units08.xlsx +0 -0
  1348. data/test/regression/xlsx_files/chart_display_units09.xlsx +0 -0
  1349. data/test/regression/xlsx_files/chart_display_units10.xlsx +0 -0
  1350. data/test/regression/xlsx_files/chart_display_units11.xlsx +0 -0
  1351. data/test/regression/xlsx_files/chart_display_units12.xlsx +0 -0
  1352. data/test/regression/xlsx_files/chart_doughnut01.xlsx +0 -0
  1353. data/test/regression/xlsx_files/chart_doughnut02.xlsx +0 -0
  1354. data/test/regression/xlsx_files/chart_doughnut03.xlsx +0 -0
  1355. data/test/regression/xlsx_files/chart_doughnut04.xlsx +0 -0
  1356. data/test/regression/xlsx_files/chart_doughnut05.xlsx +0 -0
  1357. data/test/regression/xlsx_files/chart_doughnut06.xlsx +0 -0
  1358. data/test/regression/xlsx_files/chart_doughnut07.xlsx +0 -0
  1359. data/test/regression/xlsx_files/chart_drop_lines01.xlsx +0 -0
  1360. data/test/regression/xlsx_files/chart_drop_lines02.xlsx +0 -0
  1361. data/test/regression/xlsx_files/chart_drop_lines03.xlsx +0 -0
  1362. data/test/regression/xlsx_files/chart_drop_lines04.xlsx +0 -0
  1363. data/test/regression/xlsx_files/chart_errorbars01.xlsx +0 -0
  1364. data/test/regression/xlsx_files/chart_errorbars02.xlsx +0 -0
  1365. data/test/regression/xlsx_files/chart_errorbars03.xlsx +0 -0
  1366. data/test/regression/xlsx_files/chart_errorbars04.xlsx +0 -0
  1367. data/test/regression/xlsx_files/chart_errorbars05.xlsx +0 -0
  1368. data/test/regression/xlsx_files/chart_errorbars06.xlsx +0 -0
  1369. data/test/regression/xlsx_files/chart_errorbars07.xlsx +0 -0
  1370. data/test/regression/xlsx_files/chart_errorbars08.xlsx +0 -0
  1371. data/test/regression/xlsx_files/chart_errorbars09.xlsx +0 -0
  1372. data/test/regression/xlsx_files/chart_errorbars10.xlsx +0 -0
  1373. data/test/regression/xlsx_files/chart_font01.xlsx +0 -0
  1374. data/test/regression/xlsx_files/chart_font02.xlsx +0 -0
  1375. data/test/regression/xlsx_files/chart_font03.xlsx +0 -0
  1376. data/test/regression/xlsx_files/chart_font04.xlsx +0 -0
  1377. data/test/regression/xlsx_files/chart_font05.xlsx +0 -0
  1378. data/test/regression/xlsx_files/chart_font06.xlsx +0 -0
  1379. data/test/regression/xlsx_files/chart_font07.xlsx +0 -0
  1380. data/test/regression/xlsx_files/chart_font08.xlsx +0 -0
  1381. data/test/regression/xlsx_files/chart_font09.xlsx +0 -0
  1382. data/test/regression/xlsx_files/chart_format01.xlsx +0 -0
  1383. data/test/regression/xlsx_files/chart_format02.xlsx +0 -0
  1384. data/test/regression/xlsx_files/chart_format03.xlsx +0 -0
  1385. data/test/regression/xlsx_files/chart_format04.xlsx +0 -0
  1386. data/test/regression/xlsx_files/chart_format05.xlsx +0 -0
  1387. data/test/regression/xlsx_files/chart_format06.xlsx +0 -0
  1388. data/test/regression/xlsx_files/chart_format07.xlsx +0 -0
  1389. data/test/regression/xlsx_files/chart_format08.xlsx +0 -0
  1390. data/test/regression/xlsx_files/chart_format09.xlsx +0 -0
  1391. data/test/regression/xlsx_files/chart_format10.xlsx +0 -0
  1392. data/test/regression/xlsx_files/chart_format11.xlsx +0 -0
  1393. data/test/regression/xlsx_files/chart_format12.xlsx +0 -0
  1394. data/test/regression/xlsx_files/chart_format13.xlsx +0 -0
  1395. data/test/regression/xlsx_files/chart_format14.xlsx +0 -0
  1396. data/test/regression/xlsx_files/chart_format15.xlsx +0 -0
  1397. data/test/regression/xlsx_files/chart_format16.xlsx +0 -0
  1398. data/test/regression/xlsx_files/chart_format17.xlsx +0 -0
  1399. data/test/regression/xlsx_files/chart_format18.xlsx +0 -0
  1400. data/test/regression/xlsx_files/chart_format19.xlsx +0 -0
  1401. data/test/regression/xlsx_files/chart_format20.xlsx +0 -0
  1402. data/test/regression/xlsx_files/chart_format21.xlsx +0 -0
  1403. data/test/regression/xlsx_files/chart_format22.xlsx +0 -0
  1404. data/test/regression/xlsx_files/chart_format23.xlsx +0 -0
  1405. data/test/regression/xlsx_files/chart_format24.xlsx +0 -0
  1406. data/test/regression/xlsx_files/chart_format25.xlsx +0 -0
  1407. data/test/regression/xlsx_files/chart_format26.xlsx +0 -0
  1408. data/test/regression/xlsx_files/chart_format27.xlsx +0 -0
  1409. data/test/regression/xlsx_files/chart_format28.xlsx +0 -0
  1410. data/test/regression/xlsx_files/chart_format29.xlsx +0 -0
  1411. data/test/regression/xlsx_files/chart_format30.xlsx +0 -0
  1412. data/test/regression/xlsx_files/chart_format31.xlsx +0 -0
  1413. data/test/regression/xlsx_files/chart_gap01.xlsx +0 -0
  1414. data/test/regression/xlsx_files/chart_gap02.xlsx +0 -0
  1415. data/test/regression/xlsx_files/chart_gap03.xlsx +0 -0
  1416. data/test/regression/xlsx_files/chart_gap04.xlsx +0 -0
  1417. data/test/regression/xlsx_files/chart_gap05.xlsx +0 -0
  1418. data/test/regression/xlsx_files/chart_gradient01.xlsx +0 -0
  1419. data/test/regression/xlsx_files/chart_gradient02.xlsx +0 -0
  1420. data/test/regression/xlsx_files/chart_gradient03.xlsx +0 -0
  1421. data/test/regression/xlsx_files/chart_gradient04.xlsx +0 -0
  1422. data/test/regression/xlsx_files/chart_gradient05.xlsx +0 -0
  1423. data/test/regression/xlsx_files/chart_gradient06.xlsx +0 -0
  1424. data/test/regression/xlsx_files/chart_gradient07.xlsx +0 -0
  1425. data/test/regression/xlsx_files/chart_gradient08.xlsx +0 -0
  1426. data/test/regression/xlsx_files/chart_gradient09.xlsx +0 -0
  1427. data/test/regression/xlsx_files/chart_gradient10.xlsx +0 -0
  1428. data/test/regression/xlsx_files/chart_gradient11.xlsx +0 -0
  1429. data/test/regression/xlsx_files/chart_gradient12.xlsx +0 -0
  1430. data/test/regression/xlsx_files/chart_gradient13.xlsx +0 -0
  1431. data/test/regression/xlsx_files/chart_gridlines01.xlsx +0 -0
  1432. data/test/regression/xlsx_files/chart_gridlines02.xlsx +0 -0
  1433. data/test/regression/xlsx_files/chart_gridlines03.xlsx +0 -0
  1434. data/test/regression/xlsx_files/chart_gridlines04.xlsx +0 -0
  1435. data/test/regression/xlsx_files/chart_gridlines05.xlsx +0 -0
  1436. data/test/regression/xlsx_files/chart_gridlines06.xlsx +0 -0
  1437. data/test/regression/xlsx_files/chart_gridlines07.xlsx +0 -0
  1438. data/test/regression/xlsx_files/chart_gridlines08.xlsx +0 -0
  1439. data/test/regression/xlsx_files/chart_gridlines09.xlsx +0 -0
  1440. data/test/regression/xlsx_files/chart_layout01.xlsx +0 -0
  1441. data/test/regression/xlsx_files/chart_layout02.xlsx +0 -0
  1442. data/test/regression/xlsx_files/chart_layout03.xlsx +0 -0
  1443. data/test/regression/xlsx_files/chart_layout04.xlsx +0 -0
  1444. data/test/regression/xlsx_files/chart_layout05.xlsx +0 -0
  1445. data/test/regression/xlsx_files/chart_layout06.xlsx +0 -0
  1446. data/test/regression/xlsx_files/chart_layout07.xlsx +0 -0
  1447. data/test/regression/xlsx_files/chart_layout08.xlsx +0 -0
  1448. data/test/regression/xlsx_files/chart_legend01.xlsx +0 -0
  1449. data/test/regression/xlsx_files/chart_legend03.xlsx +0 -0
  1450. data/test/regression/xlsx_files/chart_legend04.xlsx +0 -0
  1451. data/test/regression/xlsx_files/chart_legend05.xlsx +0 -0
  1452. data/test/regression/xlsx_files/chart_legend06.xlsx +0 -0
  1453. data/test/regression/xlsx_files/chart_legend07.xlsx +0 -0
  1454. data/test/regression/xlsx_files/chart_line01.xlsx +0 -0
  1455. data/test/regression/xlsx_files/chart_line02.xlsx +0 -0
  1456. data/test/regression/xlsx_files/chart_line03.xlsx +0 -0
  1457. data/test/regression/xlsx_files/chart_line04.xlsx +0 -0
  1458. data/test/regression/xlsx_files/chart_line05.xlsx +0 -0
  1459. data/test/regression/xlsx_files/chart_line06.xlsx +0 -0
  1460. data/test/regression/xlsx_files/chart_name01.xlsx +0 -0
  1461. data/test/regression/xlsx_files/chart_name02.xlsx +0 -0
  1462. data/test/regression/xlsx_files/chart_name03.xlsx +0 -0
  1463. data/test/regression/xlsx_files/chart_order01.xlsx +0 -0
  1464. data/test/regression/xlsx_files/chart_order03.xlsx +0 -0
  1465. data/test/regression/xlsx_files/chart_pattern01.xlsx +0 -0
  1466. data/test/regression/xlsx_files/chart_pattern02.xlsx +0 -0
  1467. data/test/regression/xlsx_files/chart_pattern03.xlsx +0 -0
  1468. data/test/regression/xlsx_files/chart_pattern04.xlsx +0 -0
  1469. data/test/regression/xlsx_files/chart_pattern05.xlsx +0 -0
  1470. data/test/regression/xlsx_files/chart_pattern06.xlsx +0 -0
  1471. data/test/regression/xlsx_files/chart_pattern07.xlsx +0 -0
  1472. data/test/regression/xlsx_files/chart_pattern08.xlsx +0 -0
  1473. data/test/regression/xlsx_files/chart_pattern09.xlsx +0 -0
  1474. data/test/regression/xlsx_files/chart_pattern10.xlsx +0 -0
  1475. data/test/regression/xlsx_files/chart_pie01.xlsx +0 -0
  1476. data/test/regression/xlsx_files/chart_pie02.xlsx +0 -0
  1477. data/test/regression/xlsx_files/chart_pie03.xlsx +0 -0
  1478. data/test/regression/xlsx_files/chart_pie04.xlsx +0 -0
  1479. data/test/regression/xlsx_files/chart_pie05.xlsx +0 -0
  1480. data/test/regression/xlsx_files/chart_points01.xlsx +0 -0
  1481. data/test/regression/xlsx_files/chart_points02.xlsx +0 -0
  1482. data/test/regression/xlsx_files/chart_points03.xlsx +0 -0
  1483. data/test/regression/xlsx_files/chart_points04.xlsx +0 -0
  1484. data/test/regression/xlsx_files/chart_points05.xlsx +0 -0
  1485. data/test/regression/xlsx_files/chart_points06.xlsx +0 -0
  1486. data/test/regression/xlsx_files/chart_radar01.xlsx +0 -0
  1487. data/test/regression/xlsx_files/chart_radar02.xlsx +0 -0
  1488. data/test/regression/xlsx_files/chart_radar03.xlsx +0 -0
  1489. data/test/regression/xlsx_files/chart_scatter01.xlsx +0 -0
  1490. data/test/regression/xlsx_files/chart_scatter02.xlsx +0 -0
  1491. data/test/regression/xlsx_files/chart_scatter03.xlsx +0 -0
  1492. data/test/regression/xlsx_files/chart_scatter04.xlsx +0 -0
  1493. data/test/regression/xlsx_files/chart_scatter05.xlsx +0 -0
  1494. data/test/regression/xlsx_files/chart_scatter06.xlsx +0 -0
  1495. data/test/regression/xlsx_files/chart_scatter07.xlsx +0 -0
  1496. data/test/regression/xlsx_files/chart_scatter08.xlsx +0 -0
  1497. data/test/regression/xlsx_files/chart_scatter09.xlsx +0 -0
  1498. data/test/regression/xlsx_files/chart_scatter10.xlsx +0 -0
  1499. data/test/regression/xlsx_files/chart_scatter11.xlsx +0 -0
  1500. data/test/regression/xlsx_files/chart_scatter12.xlsx +0 -0
  1501. data/test/regression/xlsx_files/chart_scatter14.xlsx +0 -0
  1502. data/test/regression/xlsx_files/chart_scatter15.xlsx +0 -0
  1503. data/test/regression/xlsx_files/chart_size01.xlsx +0 -0
  1504. data/test/regression/xlsx_files/chart_size04.xlsx +0 -0
  1505. data/test/regression/xlsx_files/chart_sparse01.xlsx +0 -0
  1506. data/test/regression/xlsx_files/chart_stock01.xlsx +0 -0
  1507. data/test/regression/xlsx_files/chart_stock02.xlsx +0 -0
  1508. data/test/regression/xlsx_files/chart_str01.xlsx +0 -0
  1509. data/test/regression/xlsx_files/chart_str02.xlsx +0 -0
  1510. data/test/regression/xlsx_files/chart_table01.xlsx +0 -0
  1511. data/test/regression/xlsx_files/chart_table02.xlsx +0 -0
  1512. data/test/regression/xlsx_files/chart_table03.xlsx +0 -0
  1513. data/test/regression/xlsx_files/chart_title01.xlsx +0 -0
  1514. data/test/regression/xlsx_files/chart_title02.xlsx +0 -0
  1515. data/test/regression/xlsx_files/chartsheet01.xlsx +0 -0
  1516. data/test/regression/xlsx_files/chartsheet02.xlsx +0 -0
  1517. data/test/regression/xlsx_files/chartsheet03.xlsx +0 -0
  1518. data/test/regression/xlsx_files/chartsheet04.xlsx +0 -0
  1519. data/test/regression/xlsx_files/chartsheet05.xlsx +0 -0
  1520. data/test/regression/xlsx_files/chartsheet06.xlsx +0 -0
  1521. data/test/regression/xlsx_files/chartsheet07.xlsx +0 -0
  1522. data/test/regression/xlsx_files/chartsheet08.xlsx +0 -0
  1523. data/test/regression/xlsx_files/chartsheet09.xlsx +0 -0
  1524. data/test/regression/xlsx_files/comment01.xlsx +0 -0
  1525. data/test/regression/xlsx_files/comment02.xlsx +0 -0
  1526. data/test/regression/xlsx_files/comment03.xlsx +0 -0
  1527. data/test/regression/xlsx_files/comment04.xlsx +0 -0
  1528. data/test/regression/xlsx_files/comment05.xlsx +0 -0
  1529. data/test/regression/xlsx_files/comment06.xlsx +0 -0
  1530. data/test/regression/xlsx_files/comment07.xlsx +0 -0
  1531. data/test/regression/xlsx_files/comment08.xlsx +0 -0
  1532. data/test/regression/xlsx_files/comment09.xlsx +0 -0
  1533. data/test/regression/xlsx_files/comment10.xlsx +0 -0
  1534. data/test/regression/xlsx_files/comment11.xlsx +0 -0
  1535. data/test/regression/xlsx_files/comment12.xlsx +0 -0
  1536. data/test/regression/xlsx_files/comment13.xlsx +0 -0
  1537. data/test/regression/xlsx_files/comment14.xlsx +0 -0
  1538. data/test/regression/xlsx_files/comment15.xlsx +0 -0
  1539. data/test/regression/xlsx_files/comment16.xlsx +0 -0
  1540. data/test/regression/xlsx_files/cond_format01.xlsx +0 -0
  1541. data/test/regression/xlsx_files/cond_format02.xlsx +0 -0
  1542. data/test/regression/xlsx_files/cond_format03.xlsx +0 -0
  1543. data/test/regression/xlsx_files/cond_format04.xlsx +0 -0
  1544. data/test/regression/xlsx_files/cond_format05.xlsx +0 -0
  1545. data/test/regression/xlsx_files/cond_format06.xlsx +0 -0
  1546. data/test/regression/xlsx_files/cond_format07.xlsx +0 -0
  1547. data/test/regression/xlsx_files/cond_format08.xlsx +0 -0
  1548. data/test/regression/xlsx_files/cond_format10.xlsx +0 -0
  1549. data/test/regression/xlsx_files/cond_format11.xlsx +0 -0
  1550. data/test/regression/xlsx_files/cond_format12.xlsx +0 -0
  1551. data/test/regression/xlsx_files/cond_format14.xlsx +0 -0
  1552. data/test/regression/xlsx_files/cond_format15.xlsx +0 -0
  1553. data/test/regression/xlsx_files/cond_format16.xlsx +0 -0
  1554. data/test/regression/xlsx_files/cond_format17.xlsx +0 -0
  1555. data/test/regression/xlsx_files/cond_format18.xlsx +0 -0
  1556. data/test/regression/xlsx_files/cond_format19.xlsx +0 -0
  1557. data/test/regression/xlsx_files/cond_format20.xlsx +0 -0
  1558. data/test/regression/xlsx_files/custom_colors01.xlsx +0 -0
  1559. data/test/regression/xlsx_files/data_validation01.xlsx +0 -0
  1560. data/test/regression/xlsx_files/data_validation02.xlsx +0 -0
  1561. data/test/regression/xlsx_files/data_validation03.xlsx +0 -0
  1562. data/test/regression/xlsx_files/data_validation08.xlsx +0 -0
  1563. data/test/regression/xlsx_files/date_1904_01.xlsx +0 -0
  1564. data/test/regression/xlsx_files/date_1904_02.xlsx +0 -0
  1565. data/test/regression/xlsx_files/date_examples01.xlsx +0 -0
  1566. data/test/regression/xlsx_files/default_format01.xlsx +0 -0
  1567. data/test/regression/xlsx_files/default_row01.xlsx +0 -0
  1568. data/test/regression/xlsx_files/default_row02.xlsx +0 -0
  1569. data/test/regression/xlsx_files/default_row03.xlsx +0 -0
  1570. data/test/regression/xlsx_files/default_row04.xlsx +0 -0
  1571. data/test/regression/xlsx_files/default_row05.xlsx +0 -0
  1572. data/test/regression/xlsx_files/defined_name01.xlsx +0 -0
  1573. data/test/regression/xlsx_files/defined_name02.xlsx +0 -0
  1574. data/test/regression/xlsx_files/defined_name03.xlsx +0 -0
  1575. data/test/regression/xlsx_files/defined_name04.xlsx +0 -0
  1576. data/test/regression/xlsx_files/dynamic_array01.xlsx +0 -0
  1577. data/test/regression/xlsx_files/escapes01.xlsx +0 -0
  1578. data/test/regression/xlsx_files/escapes02.xlsx +0 -0
  1579. data/test/regression/xlsx_files/escapes03.xlsx +0 -0
  1580. data/test/regression/xlsx_files/escapes04.xlsx +0 -0
  1581. data/test/regression/xlsx_files/escapes05.xlsx +0 -0
  1582. data/test/regression/xlsx_files/escapes06.xlsx +0 -0
  1583. data/test/regression/xlsx_files/escapes07.xlsx +0 -0
  1584. data/test/regression/xlsx_files/escapes08.xlsx +0 -0
  1585. data/test/regression/xlsx_files/excel2003_style01.xlsx +0 -0
  1586. data/test/regression/xlsx_files/excel2003_style02.xlsx +0 -0
  1587. data/test/regression/xlsx_files/excel2003_style03.xlsx +0 -0
  1588. data/test/regression/xlsx_files/excel2003_style04.xlsx +0 -0
  1589. data/test/regression/xlsx_files/excel2003_style05.xlsx +0 -0
  1590. data/test/regression/xlsx_files/excel2003_style06.xlsx +0 -0
  1591. data/test/regression/xlsx_files/excel2003_style07.xlsx +0 -0
  1592. data/test/regression/xlsx_files/excel2003_style08.xlsx +0 -0
  1593. data/test/regression/xlsx_files/filehandle01.xlsx +0 -0
  1594. data/test/regression/xlsx_files/firstsheet01.xlsx +0 -0
  1595. data/test/regression/xlsx_files/fit_to_pages01.xlsx +0 -0
  1596. data/test/regression/xlsx_files/fit_to_pages02.xlsx +0 -0
  1597. data/test/regression/xlsx_files/fit_to_pages03.xlsx +0 -0
  1598. data/test/regression/xlsx_files/fit_to_pages04.xlsx +0 -0
  1599. data/test/regression/xlsx_files/fit_to_pages05.xlsx +0 -0
  1600. data/test/regression/xlsx_files/format01.xlsx +0 -0
  1601. data/test/regression/xlsx_files/format02.xlsx +0 -0
  1602. data/test/regression/xlsx_files/format03.xlsx +0 -0
  1603. data/test/regression/xlsx_files/format04.xlsx +0 -0
  1604. data/test/regression/xlsx_files/format05.xlsx +0 -0
  1605. data/test/regression/xlsx_files/format11.xlsx +0 -0
  1606. data/test/regression/xlsx_files/format12.xlsx +0 -0
  1607. data/test/regression/xlsx_files/format13.xlsx +0 -0
  1608. data/test/regression/xlsx_files/format14.xlsx +0 -0
  1609. data/test/regression/xlsx_files/format15.xlsx +0 -0
  1610. data/test/regression/xlsx_files/format16.xlsx +0 -0
  1611. data/test/regression/xlsx_files/format17.xlsx +0 -0
  1612. data/test/regression/xlsx_files/formula_results01.xlsx +0 -0
  1613. data/test/regression/xlsx_files/gridlines01.xlsx +0 -0
  1614. data/test/regression/xlsx_files/header01.xlsx +0 -0
  1615. data/test/regression/xlsx_files/header02.xlsx +0 -0
  1616. data/test/regression/xlsx_files/header03.xlsx +0 -0
  1617. data/test/regression/xlsx_files/header04.xlsx +0 -0
  1618. data/test/regression/xlsx_files/header_image01.xlsx +0 -0
  1619. data/test/regression/xlsx_files/header_image02.xlsx +0 -0
  1620. data/test/regression/xlsx_files/header_image03.xlsx +0 -0
  1621. data/test/regression/xlsx_files/header_image04.xlsx +0 -0
  1622. data/test/regression/xlsx_files/header_image05.xlsx +0 -0
  1623. data/test/regression/xlsx_files/header_image06.xlsx +0 -0
  1624. data/test/regression/xlsx_files/header_image07.xlsx +0 -0
  1625. data/test/regression/xlsx_files/header_image08.xlsx +0 -0
  1626. data/test/regression/xlsx_files/header_image09.xlsx +0 -0
  1627. data/test/regression/xlsx_files/header_image10.xlsx +0 -0
  1628. data/test/regression/xlsx_files/header_image11.xlsx +0 -0
  1629. data/test/regression/xlsx_files/header_image12.xlsx +0 -0
  1630. data/test/regression/xlsx_files/header_image13.xlsx +0 -0
  1631. data/test/regression/xlsx_files/header_image14.xlsx +0 -0
  1632. data/test/regression/xlsx_files/header_image15.xlsx +0 -0
  1633. data/test/regression/xlsx_files/header_image16.xlsx +0 -0
  1634. data/test/regression/xlsx_files/header_image17.xlsx +0 -0
  1635. data/test/regression/xlsx_files/header_image18.xlsx +0 -0
  1636. data/test/regression/xlsx_files/header_image19.xlsx +0 -0
  1637. data/test/regression/xlsx_files/hide01.xlsx +0 -0
  1638. data/test/regression/xlsx_files/hyperlink01.xlsx +0 -0
  1639. data/test/regression/xlsx_files/hyperlink02.xlsx +0 -0
  1640. data/test/regression/xlsx_files/hyperlink03.xlsx +0 -0
  1641. data/test/regression/xlsx_files/hyperlink04.xlsx +0 -0
  1642. data/test/regression/xlsx_files/hyperlink05.xlsx +0 -0
  1643. data/test/regression/xlsx_files/hyperlink06.xlsx +0 -0
  1644. data/test/regression/xlsx_files/hyperlink07.xlsx +0 -0
  1645. data/test/regression/xlsx_files/hyperlink08.xlsx +0 -0
  1646. data/test/regression/xlsx_files/hyperlink09.xlsx +0 -0
  1647. data/test/regression/xlsx_files/hyperlink10.xlsx +0 -0
  1648. data/test/regression/xlsx_files/hyperlink11.xlsx +0 -0
  1649. data/test/regression/xlsx_files/hyperlink12.xlsx +0 -0
  1650. data/test/regression/xlsx_files/hyperlink13.xlsx +0 -0
  1651. data/test/regression/xlsx_files/hyperlink14.xlsx +0 -0
  1652. data/test/regression/xlsx_files/hyperlink15.xlsx +0 -0
  1653. data/test/regression/xlsx_files/hyperlink16.xlsx +0 -0
  1654. data/test/regression/xlsx_files/hyperlink17.xlsx +0 -0
  1655. data/test/regression/xlsx_files/hyperlink18.xlsx +0 -0
  1656. data/test/regression/xlsx_files/hyperlink20.xlsx +0 -0
  1657. data/test/regression/xlsx_files/hyperlink21.xlsx +0 -0
  1658. data/test/regression/xlsx_files/hyperlink22.xlsx +0 -0
  1659. data/test/regression/xlsx_files/hyperlink23.xlsx +0 -0
  1660. data/test/regression/xlsx_files/hyperlink24.xlsx +0 -0
  1661. data/test/regression/xlsx_files/hyperlink25.xlsx +0 -0
  1662. data/test/regression/xlsx_files/hyperlink26.xlsx +0 -0
  1663. data/test/regression/xlsx_files/hyperlink27.xlsx +0 -0
  1664. data/test/regression/xlsx_files/hyperlink28.xlsx +0 -0
  1665. data/test/regression/xlsx_files/hyperlink29.xlsx +0 -0
  1666. data/test/regression/xlsx_files/hyperlink30.xlsx +0 -0
  1667. data/test/regression/xlsx_files/hyperlink31.xlsx +0 -0
  1668. data/test/regression/xlsx_files/hyperlink32.xlsx +0 -0
  1669. data/test/regression/xlsx_files/hyperlink33.xlsx +0 -0
  1670. data/test/regression/xlsx_files/hyperlink34.xlsx +0 -0
  1671. data/test/regression/xlsx_files/hyperlink35.xlsx +0 -0
  1672. data/test/regression/xlsx_files/hyperlink36.xlsx +0 -0
  1673. data/test/regression/xlsx_files/hyperlink37.xlsx +0 -0
  1674. data/test/regression/xlsx_files/hyperlink38.xlsx +0 -0
  1675. data/test/regression/xlsx_files/hyperlink39.xlsx +0 -0
  1676. data/test/regression/xlsx_files/hyperlink40.xlsx +0 -0
  1677. data/test/regression/xlsx_files/hyperlink41.xlsx +0 -0
  1678. data/test/regression/xlsx_files/hyperlink42.xlsx +0 -0
  1679. data/test/regression/xlsx_files/hyperlink43.xlsx +0 -0
  1680. data/test/regression/xlsx_files/hyperlink44.xlsx +0 -0
  1681. data/test/regression/xlsx_files/hyperlink45.xlsx +0 -0
  1682. data/test/regression/xlsx_files/hyperlink46.xlsx +0 -0
  1683. data/test/regression/xlsx_files/hyperlink47.xlsx +0 -0
  1684. data/test/regression/xlsx_files/hyperlink48.xlsx +0 -0
  1685. data/test/regression/xlsx_files/hyperlink49.xlsx +0 -0
  1686. data/test/regression/xlsx_files/hyperlink50.xlsx +0 -0
  1687. data/test/regression/xlsx_files/hyperlink51.xlsx +0 -0
  1688. data/test/regression/xlsx_files/ignore_error01.xlsx +0 -0
  1689. data/test/regression/xlsx_files/ignore_error02.xlsx +0 -0
  1690. data/test/regression/xlsx_files/ignore_error03.xlsx +0 -0
  1691. data/test/regression/xlsx_files/ignore_error04.xlsx +0 -0
  1692. data/test/regression/xlsx_files/ignore_error05.xlsx +0 -0
  1693. data/test/regression/xlsx_files/ignore_error06.xlsx +0 -0
  1694. data/test/regression/xlsx_files/image01.xlsx +0 -0
  1695. data/test/regression/xlsx_files/image02.xlsx +0 -0
  1696. data/test/regression/xlsx_files/image03.xlsx +0 -0
  1697. data/test/regression/xlsx_files/image04.xlsx +0 -0
  1698. data/test/regression/xlsx_files/image05.xlsx +0 -0
  1699. data/test/regression/xlsx_files/image06.xlsx +0 -0
  1700. data/test/regression/xlsx_files/image07.xlsx +0 -0
  1701. data/test/regression/xlsx_files/image08.xlsx +0 -0
  1702. data/test/regression/xlsx_files/image09.xlsx +0 -0
  1703. data/test/regression/xlsx_files/image10.xlsx +0 -0
  1704. data/test/regression/xlsx_files/image11.xlsx +0 -0
  1705. data/test/regression/xlsx_files/image12.xlsx +0 -0
  1706. data/test/regression/xlsx_files/image13.xlsx +0 -0
  1707. data/test/regression/xlsx_files/image14.xlsx +0 -0
  1708. data/test/regression/xlsx_files/image15.xlsx +0 -0
  1709. data/test/regression/xlsx_files/image16.xlsx +0 -0
  1710. data/test/regression/xlsx_files/image17.xlsx +0 -0
  1711. data/test/regression/xlsx_files/image18.xlsx +0 -0
  1712. data/test/regression/xlsx_files/image19.xlsx +0 -0
  1713. data/test/regression/xlsx_files/image22.xlsx +0 -0
  1714. data/test/regression/xlsx_files/image23.xlsx +0 -0
  1715. data/test/regression/xlsx_files/image24.xlsx +0 -0
  1716. data/test/regression/xlsx_files/image25.xlsx +0 -0
  1717. data/test/regression/xlsx_files/image26.xlsx +0 -0
  1718. data/test/regression/xlsx_files/image27.xlsx +0 -0
  1719. data/test/regression/xlsx_files/image28.xlsx +0 -0
  1720. data/test/regression/xlsx_files/image29.xlsx +0 -0
  1721. data/test/regression/xlsx_files/image30.xlsx +0 -0
  1722. data/test/regression/xlsx_files/image31.xlsx +0 -0
  1723. data/test/regression/xlsx_files/image32.xlsx +0 -0
  1724. data/test/regression/xlsx_files/image33.xlsx +0 -0
  1725. data/test/regression/xlsx_files/image35.xlsx +0 -0
  1726. data/test/regression/xlsx_files/image36.xlsx +0 -0
  1727. data/test/regression/xlsx_files/image44.xlsx +0 -0
  1728. data/test/regression/xlsx_files/image45.xlsx +0 -0
  1729. data/test/regression/xlsx_files/image46.xlsx +0 -0
  1730. data/test/regression/xlsx_files/image47.xlsx +0 -0
  1731. data/test/regression/xlsx_files/image48.xlsx +0 -0
  1732. data/test/regression/xlsx_files/image49.xlsx +0 -0
  1733. data/test/regression/xlsx_files/image50.xlsx +0 -0
  1734. data/test/regression/xlsx_files/image51.xlsx +0 -0
  1735. data/test/regression/xlsx_files/image52.xlsx +0 -0
  1736. data/test/regression/xlsx_files/image53.xlsx +0 -0
  1737. data/test/regression/xlsx_files/image54.xlsx +0 -0
  1738. data/test/regression/xlsx_files/image55.xlsx +0 -0
  1739. data/test/regression/xlsx_files/image56.xlsx +0 -0
  1740. data/test/regression/xlsx_files/image57.xlsx +0 -0
  1741. data/test/regression/xlsx_files/landscape01.xlsx +0 -0
  1742. data/test/regression/xlsx_files/macro01.xlsm +0 -0
  1743. data/test/regression/xlsx_files/merge_cells01.xlsx +0 -0
  1744. data/test/regression/xlsx_files/merge_range01.xlsx +0 -0
  1745. data/test/regression/xlsx_files/merge_range02.xlsx +0 -0
  1746. data/test/regression/xlsx_files/merge_range03.xlsx +0 -0
  1747. data/test/regression/xlsx_files/merge_range04.xlsx +0 -0
  1748. data/test/regression/xlsx_files/merge_range05.xlsx +0 -0
  1749. data/test/regression/xlsx_files/object_position01.xlsx +0 -0
  1750. data/test/regression/xlsx_files/object_position02.xlsx +0 -0
  1751. data/test/regression/xlsx_files/object_position03.xlsx +0 -0
  1752. data/test/regression/xlsx_files/object_position04.xlsx +0 -0
  1753. data/test/regression/xlsx_files/object_position06.xlsx +0 -0
  1754. data/test/regression/xlsx_files/object_position07.xlsx +0 -0
  1755. data/test/regression/xlsx_files/object_position08.xlsx +0 -0
  1756. data/test/regression/xlsx_files/object_position09.xlsx +0 -0
  1757. data/test/regression/xlsx_files/object_position10.xlsx +0 -0
  1758. data/test/regression/xlsx_files/object_position12.xlsx +0 -0
  1759. data/test/regression/xlsx_files/object_position13.xlsx +0 -0
  1760. data/test/regression/xlsx_files/object_position14.xlsx +0 -0
  1761. data/test/regression/xlsx_files/object_position15.xlsx +0 -0
  1762. data/test/regression/xlsx_files/object_position16.xlsx +0 -0
  1763. data/test/regression/xlsx_files/object_position17.xlsx +0 -0
  1764. data/test/regression/xlsx_files/object_position18.xlsx +0 -0
  1765. data/test/regression/xlsx_files/object_position19.xlsx +0 -0
  1766. data/test/regression/xlsx_files/object_position20.xlsx +0 -0
  1767. data/test/regression/xlsx_files/outline01.xlsx +0 -0
  1768. data/test/regression/xlsx_files/outline02.xlsx +0 -0
  1769. data/test/regression/xlsx_files/outline03.xlsx +0 -0
  1770. data/test/regression/xlsx_files/outline04.xlsx +0 -0
  1771. data/test/regression/xlsx_files/outline05.xlsx +0 -0
  1772. data/test/regression/xlsx_files/outline06.xlsx +0 -0
  1773. data/test/regression/xlsx_files/page_breaks01.xlsx +0 -0
  1774. data/test/regression/xlsx_files/page_breaks02.xlsx +0 -0
  1775. data/test/regression/xlsx_files/page_breaks03.xlsx +0 -0
  1776. data/test/regression/xlsx_files/page_breaks04.xlsx +0 -0
  1777. data/test/regression/xlsx_files/page_breaks05.xlsx +0 -0
  1778. data/test/regression/xlsx_files/page_breaks06.xlsx +0 -0
  1779. data/test/regression/xlsx_files/page_view01.xlsx +0 -0
  1780. data/test/regression/xlsx_files/panes01.xlsx +0 -0
  1781. data/test/regression/xlsx_files/print_across01.xlsx +0 -0
  1782. data/test/regression/xlsx_files/print_area01.xlsx +0 -0
  1783. data/test/regression/xlsx_files/print_area02.xlsx +0 -0
  1784. data/test/regression/xlsx_files/print_area03.xlsx +0 -0
  1785. data/test/regression/xlsx_files/print_area04.xlsx +0 -0
  1786. data/test/regression/xlsx_files/print_area05.xlsx +0 -0
  1787. data/test/regression/xlsx_files/print_area06.xlsx +0 -0
  1788. data/test/regression/xlsx_files/print_area07.xlsx +0 -0
  1789. data/test/regression/xlsx_files/print_options01.xlsx +0 -0
  1790. data/test/regression/xlsx_files/print_options02.xlsx +0 -0
  1791. data/test/regression/xlsx_files/print_options03.xlsx +0 -0
  1792. data/test/regression/xlsx_files/print_options04.xlsx +0 -0
  1793. data/test/regression/xlsx_files/print_options05.xlsx +0 -0
  1794. data/test/regression/xlsx_files/print_options06.xlsx +0 -0
  1795. data/test/regression/xlsx_files/print_options07.xlsx +0 -0
  1796. data/test/regression/xlsx_files/print_scale01.xlsx +0 -0
  1797. data/test/regression/xlsx_files/print_scale02.xlsx +0 -0
  1798. data/test/regression/xlsx_files/properties01.xlsx +0 -0
  1799. data/test/regression/xlsx_files/properties02.xlsx +0 -0
  1800. data/test/regression/xlsx_files/properties03.xlsx +0 -0
  1801. data/test/regression/xlsx_files/properties04.xlsx +0 -0
  1802. data/test/regression/xlsx_files/properties05.xlsx +0 -0
  1803. data/test/regression/xlsx_files/protect01.xlsx +0 -0
  1804. data/test/regression/xlsx_files/protect02.xlsx +0 -0
  1805. data/test/regression/xlsx_files/protect03.xlsx +0 -0
  1806. data/test/regression/xlsx_files/protect04.xlsx +0 -0
  1807. data/test/regression/xlsx_files/protect05.xlsx +0 -0
  1808. data/test/regression/xlsx_files/protect06.xlsx +0 -0
  1809. data/test/regression/xlsx_files/protect07.xlsx +0 -0
  1810. data/test/regression/xlsx_files/quote_name01.xlsx +0 -0
  1811. data/test/regression/xlsx_files/quote_name02.xlsx +0 -0
  1812. data/test/regression/xlsx_files/quote_name03.xlsx +0 -0
  1813. data/test/regression/xlsx_files/quote_name04.xlsx +0 -0
  1814. data/test/regression/xlsx_files/repeat01.xlsx +0 -0
  1815. data/test/regression/xlsx_files/repeat02.xlsx +0 -0
  1816. data/test/regression/xlsx_files/repeat03.xlsx +0 -0
  1817. data/test/regression/xlsx_files/repeat04.xlsx +0 -0
  1818. data/test/regression/xlsx_files/repeat05.xlsx +0 -0
  1819. data/test/regression/xlsx_files/rich_string01.xlsx +0 -0
  1820. data/test/regression/xlsx_files/rich_string02.xlsx +0 -0
  1821. data/test/regression/xlsx_files/rich_string03.xlsx +0 -0
  1822. data/test/regression/xlsx_files/rich_string04.xlsx +0 -0
  1823. data/test/regression/xlsx_files/rich_string05.xlsx +0 -0
  1824. data/test/regression/xlsx_files/rich_string06.xlsx +0 -0
  1825. data/test/regression/xlsx_files/rich_string07.xlsx +0 -0
  1826. data/test/regression/xlsx_files/rich_string08.xlsx +0 -0
  1827. data/test/regression/xlsx_files/rich_string09.xlsx +0 -0
  1828. data/test/regression/xlsx_files/rich_string10.xlsx +0 -0
  1829. data/test/regression/xlsx_files/rich_string11.xlsx +0 -0
  1830. data/test/regression/xlsx_files/rich_string12.xlsx +0 -0
  1831. data/test/regression/xlsx_files/row_col_format01.xlsx +0 -0
  1832. data/test/regression/xlsx_files/row_col_format02.xlsx +0 -0
  1833. data/test/regression/xlsx_files/row_col_format03.xlsx +0 -0
  1834. data/test/regression/xlsx_files/row_col_format04.xlsx +0 -0
  1835. data/test/regression/xlsx_files/row_col_format05.xlsx +0 -0
  1836. data/test/regression/xlsx_files/row_col_format06.xlsx +0 -0
  1837. data/test/regression/xlsx_files/row_col_format07.xlsx +0 -0
  1838. data/test/regression/xlsx_files/row_col_format08.xlsx +0 -0
  1839. data/test/regression/xlsx_files/row_col_format09.xlsx +0 -0
  1840. data/test/regression/xlsx_files/row_col_format10.xlsx +0 -0
  1841. data/test/regression/xlsx_files/row_col_format11.xlsx +0 -0
  1842. data/test/regression/xlsx_files/row_col_format12.xlsx +0 -0
  1843. data/test/regression/xlsx_files/row_col_format13.xlsx +0 -0
  1844. data/test/regression/xlsx_files/row_col_format14.xlsx +0 -0
  1845. data/test/regression/xlsx_files/selection01.xlsx +0 -0
  1846. data/test/regression/xlsx_files/selection02.xlsx +0 -0
  1847. data/test/regression/xlsx_files/set_column01.xlsx +0 -0
  1848. data/test/regression/xlsx_files/set_column03.xlsx +0 -0
  1849. data/test/regression/xlsx_files/set_column04.xlsx +0 -0
  1850. data/test/regression/xlsx_files/set_column05.xlsx +0 -0
  1851. data/test/regression/xlsx_files/set_column06.xlsx +0 -0
  1852. data/test/regression/xlsx_files/set_column07.xlsx +0 -0
  1853. data/test/regression/xlsx_files/set_column08.xlsx +0 -0
  1854. data/test/regression/xlsx_files/set_column09.xlsx +0 -0
  1855. data/test/regression/xlsx_files/set_print_scale01.xlsx +0 -0
  1856. data/test/regression/xlsx_files/set_row01.xlsx +0 -0
  1857. data/test/regression/xlsx_files/set_row03.xlsx +0 -0
  1858. data/test/regression/xlsx_files/set_start_page01.xlsx +0 -0
  1859. data/test/regression/xlsx_files/set_start_page02.xlsx +0 -0
  1860. data/test/regression/xlsx_files/set_start_page03.xlsx +0 -0
  1861. data/test/regression/xlsx_files/shape01.xlsx +0 -0
  1862. data/test/regression/xlsx_files/shape02.xlsx +0 -0
  1863. data/test/regression/xlsx_files/shape03.xlsx +0 -0
  1864. data/test/regression/xlsx_files/shape04.xlsx +0 -0
  1865. data/test/regression/xlsx_files/shape_connect01.xlsx +0 -0
  1866. data/test/regression/xlsx_files/shape_connect02.xlsx +0 -0
  1867. data/test/regression/xlsx_files/shape_connect03.xlsx +0 -0
  1868. data/test/regression/xlsx_files/shape_connect04.xlsx +0 -0
  1869. data/test/regression/xlsx_files/shape_scale01.xlsx +0 -0
  1870. data/test/regression/xlsx_files/shape_stencil01.xlsx +0 -0
  1871. data/test/regression/xlsx_files/shared_strings01.xlsx +0 -0
  1872. data/test/regression/xlsx_files/shared_strings02.xlsx +0 -0
  1873. data/test/regression/xlsx_files/shared_strings_encoding.xlsx +0 -0
  1874. data/test/regression/xlsx_files/simple01.xlsx +0 -0
  1875. data/test/regression/xlsx_files/simple02.xlsx +0 -0
  1876. data/test/regression/xlsx_files/simple03.xlsx +0 -0
  1877. data/test/regression/xlsx_files/simple04.xlsx +0 -0
  1878. data/test/regression/xlsx_files/simple05.xlsx +0 -0
  1879. data/test/regression/xlsx_files/tab_color01.xlsx +0 -0
  1880. data/test/regression/xlsx_files/table01.xlsx +0 -0
  1881. data/test/regression/xlsx_files/table02.xlsx +0 -0
  1882. data/test/regression/xlsx_files/table03.xlsx +0 -0
  1883. data/test/regression/xlsx_files/table04.xlsx +0 -0
  1884. data/test/regression/xlsx_files/table05.xlsx +0 -0
  1885. data/test/regression/xlsx_files/table06.xlsx +0 -0
  1886. data/test/regression/xlsx_files/table07.xlsx +0 -0
  1887. data/test/regression/xlsx_files/table08.xlsx +0 -0
  1888. data/test/regression/xlsx_files/table09.xlsx +0 -0
  1889. data/test/regression/xlsx_files/table10.xlsx +0 -0
  1890. data/test/regression/xlsx_files/table11.xlsx +0 -0
  1891. data/test/regression/xlsx_files/table12.xlsx +0 -0
  1892. data/test/regression/xlsx_files/table13.xlsx +0 -0
  1893. data/test/regression/xlsx_files/table14.xlsx +0 -0
  1894. data/test/regression/xlsx_files/table15.xlsx +0 -0
  1895. data/test/regression/xlsx_files/table17.xlsx +0 -0
  1896. data/test/regression/xlsx_files/table18.xlsx +0 -0
  1897. data/test/regression/xlsx_files/table19.xlsx +0 -0
  1898. data/test/regression/xlsx_files/table21.xlsx +0 -0
  1899. data/test/regression/xlsx_files/table22.xlsx +0 -0
  1900. data/test/regression/xlsx_files/table23.xlsx +0 -0
  1901. data/test/regression/xlsx_files/table24.xlsx +0 -0
  1902. data/test/regression/xlsx_files/table25.xlsx +0 -0
  1903. data/test/regression/xlsx_files/table26.xlsx +0 -0
  1904. data/test/regression/xlsx_files/tutorial01.xlsx +0 -0
  1905. data/test/regression/xlsx_files/tutorial02.xlsx +0 -0
  1906. data/test/regression/xlsx_files/tutorial03.xlsx +0 -0
  1907. data/test/regression/xlsx_files/types02.xlsx +0 -0
  1908. data/test/regression/xlsx_files/types08.xlsx +0 -0
  1909. data/test/regression/xlsx_files/update_range_format_with_params.xlsx +0 -0
  1910. data/test/regression/xlsx_files/urls_as_strings.xlsx +0 -0
  1911. data/test/regression/xlsx_files/utf8_01.xlsx +0 -0
  1912. data/test/regression/xlsx_files/utf8_03.xlsx +0 -0
  1913. data/test/regression/xlsx_files/utf8_04.xlsx +0 -0
  1914. data/test/regression/xlsx_files/utf8_05.xlsx +0 -0
  1915. data/test/regression/xlsx_files/utf8_06.xlsx +0 -0
  1916. data/test/regression/xlsx_files/utf8_07.xlsx +0 -0
  1917. data/test/regression/xlsx_files/utf8_08.xlsx +0 -0
  1918. data/test/regression/xlsx_files/utf8_09.xlsx +0 -0
  1919. data/test/regression/xlsx_files/utf8_10.xlsx +0 -0
  1920. data/test/regression/xlsx_files/utf8_11.xlsx +0 -0
  1921. data/test/regression/xlsx_files/vbaProject01.bin +0 -0
  1922. data/test/regression/xlsx_files/vbaProject02.bin +0 -0
  1923. data/test/regression/xlsx_files/vml01.xlsx +0 -0
  1924. data/test/regression/xlsx_files/vml02.xlsx +0 -0
  1925. data/test/regression/xlsx_files/vml03.xlsx +0 -0
  1926. data/test/regression/xlsx_files/vml04.xlsx +0 -0
  1927. data/test/republic.png +0 -0
  1928. data/test/run_test.rb +0 -9
  1929. data/test/test_delete_files.rb +0 -37
  1930. data/test/test_example_match.rb +0 -6348
  1931. data/test/test_option_hash_for_workbook.rb +0 -72
  1932. data/test/test_xml_writer_simple.rb +0 -64
  1933. data/test/utility/test_range.rb +0 -20
  1934. data/test/vbaProject.bin +0 -0
  1935. data/test/workbook/test_check_sheetname.rb +0 -51
  1936. data/test/workbook/test_define_name.rb +0 -16
  1937. data/test/workbook/test_get_chart_range.rb +0 -57
  1938. data/test/workbook/test_sort_defined_names.rb +0 -77
  1939. data/test/workbook/test_workbook_01.rb +0 -29
  1940. data/test/workbook/test_workbook_02.rb +0 -31
  1941. data/test/workbook/test_workbook_03.rb +0 -31
  1942. data/test/workbook/test_worksheet_by_name.rb +0 -35
  1943. data/test/workbook/test_write_calc_pr.rb +0 -41
  1944. data/test/workbook/test_write_defined_name.rb +0 -17
  1945. data/test/workbook/test_write_defined_names.rb +0 -41
  1946. data/test/workbook/test_write_workbook_view.rb +0 -117
  1947. data/test/worksheet/test_calculate_spans.rb +0 -58
  1948. data/test/worksheet/test_cond_format_01.rb +0 -82
  1949. data/test/worksheet/test_cond_format_02.rb +0 -87
  1950. data/test/worksheet/test_cond_format_03.rb +0 -97
  1951. data/test/worksheet/test_cond_format_04.rb +0 -85
  1952. data/test/worksheet/test_cond_format_05.rb +0 -96
  1953. data/test/worksheet/test_cond_format_06.rb +0 -106
  1954. data/test/worksheet/test_cond_format_07.rb +0 -116
  1955. data/test/worksheet/test_cond_format_08.rb +0 -115
  1956. data/test/worksheet/test_cond_format_09.rb +0 -108
  1957. data/test/worksheet/test_cond_format_10.rb +0 -83
  1958. data/test/worksheet/test_cond_format_11.rb +0 -85
  1959. data/test/worksheet/test_cond_format_12.rb +0 -133
  1960. data/test/worksheet/test_cond_format_13.rb +0 -135
  1961. data/test/worksheet/test_cond_format_14.rb +0 -132
  1962. data/test/worksheet/test_cond_format_15.rb +0 -93
  1963. data/test/worksheet/test_cond_format_16.rb +0 -138
  1964. data/test/worksheet/test_cond_format_17.rb +0 -141
  1965. data/test/worksheet/test_cond_format_18.rb +0 -135
  1966. data/test/worksheet/test_cond_format_19.rb +0 -139
  1967. data/test/worksheet/test_cond_format_20.rb +0 -119
  1968. data/test/worksheet/test_cond_format_21.rb +0 -90
  1969. data/test/worksheet/test_cond_format_22.rb +0 -266
  1970. data/test/worksheet/test_cond_format_23.rb +0 -242
  1971. data/test/worksheet/test_cond_format_24.rb +0 -303
  1972. data/test/worksheet/test_convert_date_time_01.rb +0 -439
  1973. data/test/worksheet/test_convert_date_time_02.rb +0 -472
  1974. data/test/worksheet/test_convert_date_time_03.rb +0 -435
  1975. data/test/worksheet/test_convert_date_time_04.rb +0 -19
  1976. data/test/worksheet/test_data_bar_01.rb +0 -53
  1977. data/test/worksheet/test_data_bar_02.rb +0 -79
  1978. data/test/worksheet/test_data_bar_03.rb +0 -147
  1979. data/test/worksheet/test_data_bar_04.rb +0 -145
  1980. data/test/worksheet/test_data_bar_05.rb +0 -147
  1981. data/test/worksheet/test_data_bar_06.rb +0 -145
  1982. data/test/worksheet/test_data_bar_07.rb +0 -146
  1983. data/test/worksheet/test_data_bar_08.rb +0 -54
  1984. data/test/worksheet/test_data_bar_09.rb +0 -80
  1985. data/test/worksheet/test_data_bar_10.rb +0 -165
  1986. data/test/worksheet/test_data_bar_11.rb +0 -167
  1987. data/test/worksheet/test_data_bar_12.rb +0 -104
  1988. data/test/worksheet/test_extract_filter_tokens.rb +0 -109
  1989. data/test/worksheet/test_parse_filter_expression.rb +0 -143
  1990. data/test/worksheet/test_pixels_to_row_col.rb +0 -46
  1991. data/test/worksheet/test_position_object.rb +0 -50
  1992. data/test/worksheet/test_repeat_formula.rb +0 -55
  1993. data/test/worksheet/test_sparkline_01.rb +0 -65
  1994. data/test/worksheet/test_sparkline_02.rb +0 -92
  1995. data/test/worksheet/test_sparkline_03.rb +0 -133
  1996. data/test/worksheet/test_sparkline_04.rb +0 -93
  1997. data/test/worksheet/test_sparkline_05.rb +0 -93
  1998. data/test/worksheet/test_sparkline_06.rb +0 -114
  1999. data/test/worksheet/test_sparkline_07.rb +0 -357
  2000. data/test/worksheet/test_sparkline_08.rb +0 -177
  2001. data/test/worksheet/test_sparkline_09.rb +0 -1250
  2002. data/test/worksheet/test_sparkline_10.rb +0 -107
  2003. data/test/worksheet/test_sparkline_11.rb +0 -218
  2004. data/test/worksheet/test_sparkline_12.rb +0 -94
  2005. data/test/worksheet/test_update_format_methods.rb +0 -91
  2006. data/test/worksheet/test_worksheet_01.rb +0 -32
  2007. data/test/worksheet/test_worksheet_02.rb +0 -38
  2008. data/test/worksheet/test_worksheet_03.rb +0 -44
  2009. data/test/worksheet/test_worksheet_04.rb +0 -45
  2010. data/test/worksheet/test_write_array_formula_01.rb +0 -98
  2011. data/test/worksheet/test_write_autofilter.rb +0 -260
  2012. data/test/worksheet/test_write_brk.rb +0 -18
  2013. data/test/worksheet/test_write_cell.rb +0 -54
  2014. data/test/worksheet/test_write_cell_value.rb +0 -33
  2015. data/test/worksheet/test_write_col_breaks.rb +0 -27
  2016. data/test/worksheet/test_write_col_info.rb +0 -95
  2017. data/test/worksheet/test_write_conditional_formatting.rb +0 -72
  2018. data/test/worksheet/test_write_custom_filter.rb +0 -18
  2019. data/test/worksheet/test_write_custom_filters.rb +0 -25
  2020. data/test/worksheet/test_write_data_validation_01.rb +0 -113
  2021. data/test/worksheet/test_write_data_validation_02.rb +0 -585
  2022. data/test/worksheet/test_write_dimension.rb +0 -94
  2023. data/test/worksheet/test_write_filter.rb +0 -18
  2024. data/test/worksheet/test_write_filter_column.rb +0 -18
  2025. data/test/worksheet/test_write_filters.rb +0 -32
  2026. data/test/worksheet/test_write_formula_does_not_change_formula_string.rb +0 -18
  2027. data/test/worksheet/test_write_header_footer.rb +0 -58
  2028. data/test/worksheet/test_write_hyperlink.rb +0 -32
  2029. data/test/worksheet/test_write_legacy_drawing.rb +0 -19
  2030. data/test/worksheet/test_write_merge_cell.rb +0 -18
  2031. data/test/worksheet/test_write_merge_cells.rb +0 -192
  2032. data/test/worksheet/test_write_methods.rb +0 -248
  2033. data/test/worksheet/test_write_page_margins.rb +0 -98
  2034. data/test/worksheet/test_write_page_set_up_pr.rb +0 -19
  2035. data/test/worksheet/test_write_page_setup.rb +0 -54
  2036. data/test/worksheet/test_write_pane.rb +0 -123
  2037. data/test/worksheet/test_write_phonetic_pr.rb +0 -19
  2038. data/test/worksheet/test_write_print_options.rb +0 -77
  2039. data/test/worksheet/test_write_row_breaks.rb +0 -27
  2040. data/test/worksheet/test_write_row_element.rb +0 -69
  2041. data/test/worksheet/test_write_selection.rb +0 -18
  2042. data/test/worksheet/test_write_sheet_calc_pr.rb +0 -18
  2043. data/test/worksheet/test_write_sheet_data.rb +0 -18
  2044. data/test/worksheet/test_write_sheet_format_pr.rb +0 -18
  2045. data/test/worksheet/test_write_sheet_pr.rb +0 -36
  2046. data/test/worksheet/test_write_sheet_protection.rb +0 -174
  2047. data/test/worksheet/test_write_sheet_view.rb +0 -71
  2048. data/test/worksheet/test_write_sheet_view1.rb +0 -64
  2049. data/test/worksheet/test_write_sheet_view2.rb +0 -56
  2050. data/test/worksheet/test_write_sheet_view3.rb +0 -83
  2051. data/test/worksheet/test_write_sheet_view4.rb +0 -83
  2052. data/test/worksheet/test_write_sheet_view5.rb +0 -74
  2053. data/test/worksheet/test_write_sheet_view6.rb +0 -51
  2054. data/test/worksheet/test_write_sheet_view7.rb +0 -71
  2055. data/test/worksheet/test_write_sheet_view8.rb +0 -51
  2056. data/test/worksheet/test_write_sheet_view9.rb +0 -51
  2057. data/test/worksheet/test_write_tab_color.rb +0 -23
  2058. data/test/worksheet/test_write_worksheet_attributes.rb +0 -21
@@ -1,5 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # frozen_string_literal: true
3
+
3
4
  require 'write_xlsx/package/xml_writer_simple'
4
5
  require 'write_xlsx/package/button'
5
6
  require 'write_xlsx/colors'
@@ -36,14 +37,14 @@ module Writexlsx
36
37
  attr_reader :vba_codename # :nodoc:
37
38
  attr_writer :excel_version
38
39
 
39
- def initialize(workbook, index, name) #:nodoc:
40
+ def initialize(workbook, index, name) # :nodoc:
40
41
  @writer = Package::XMLWriterSimple.new
41
42
 
42
43
  @workbook = workbook
43
44
  @index = index
44
45
  @name = name
45
46
  @colinfo = {}
46
- @cell_data_table = {}
47
+ @cell_data_table = []
47
48
  @excel_version = 2007
48
49
  @palette = workbook.palette
49
50
  @default_url_format = workbook.default_url_format
@@ -60,6 +61,7 @@ module Writexlsx
60
61
  @selections = []
61
62
  @panes = []
62
63
  @hide_row_col_headers = 0
64
+ @top_left_cell = ''
63
65
 
64
66
  @tab_color = 0
65
67
 
@@ -102,6 +104,9 @@ module Writexlsx
102
104
  @vml_drawing_rels = {}
103
105
  @vml_drawing_rels_id = 0
104
106
  @has_dynamic_arrays = false
107
+
108
+ @use_future_functions = false
109
+
105
110
  @header_images = []
106
111
  @footer_images = []
107
112
  @background_image = ''
@@ -138,19 +143,19 @@ module Writexlsx
138
143
  @original_row_height = 12.75
139
144
  @default_row_height = 12.75
140
145
  @default_row_pixels = 17
141
- self::margins_left_right = 0.75
142
- self::margins_top_bottom = 1
146
+ self.margins_left_right = 0.75
147
+ self.margins_top_bottom = 1
143
148
  @page_setup.margin_header = 0.5
144
149
  @page_setup.margin_footer = 0.5
145
150
  @page_setup.header_footer_aligns = false
146
151
  end
147
152
  end
148
153
 
149
- def set_xml_writer(filename) #:nodoc:
154
+ def set_xml_writer(filename) # :nodoc:
150
155
  @writer.set_xml_writer(filename)
151
156
  end
152
157
 
153
- def assemble_xml_file #:nodoc:
158
+ def assemble_xml_file # :nodoc:
154
159
  write_xml_declaration do
155
160
  @writer.tag_elements('worksheet', write_worksheet_attributes) do
156
161
  write_sheet_pr
@@ -188,9 +193,7 @@ module Writexlsx
188
193
  #
189
194
  # The name method is used to retrieve the name of a worksheet.
190
195
  #
191
- def name
192
- @name
193
- end
196
+ attr_reader :name
194
197
 
195
198
  #
196
199
  # Set this worksheet as a selected worksheet, i.e. the worksheet has its tab
@@ -244,8 +247,10 @@ module Writexlsx
244
247
  @protect = protect_default_settings.merge(options)
245
248
 
246
249
  # Set the password after the user defined values.
247
- @protect[:password] =
248
- encode_password(password) if password && password != ''
250
+ if password && password != ''
251
+ @protect[:password] =
252
+ encode_password(password)
253
+ end
249
254
  end
250
255
 
251
256
  #
@@ -255,8 +260,8 @@ module Writexlsx
255
260
  if range.nil?
256
261
  raise "The range must be defined in unprotect_range())\n"
257
262
  else
258
- range.gsub!(/\$/, "")
259
- range.sub!(/^=/, "")
263
+ range = range.gsub(/\$/, "")
264
+ range = range.sub(/^=/, "")
260
265
  @num_protected_ranges += 1
261
266
  end
262
267
 
@@ -300,7 +305,7 @@ module Writexlsx
300
305
  def set_column(*args)
301
306
  # Check for a cell reference in A1 notation and substitute row and column
302
307
  if args[0].to_s =~ /^\D/
303
- row1, firstcol, row2, lastcol, *data = substitute_cellref(*args)
308
+ _row1, firstcol, _row2, lastcol, *data = substitute_cellref(*args)
304
309
  else
305
310
  firstcol, lastcol, *data = args
306
311
  end
@@ -342,9 +347,9 @@ module Writexlsx
342
347
 
343
348
  # Store the col sizes for use when calculating image vertices taking
344
349
  # hidden columns into account. Also store the column formats.
345
- width = @default_col_width unless width
350
+ width ||= @default_col_width
346
351
 
347
- (firstcol .. lastcol).each do |col|
352
+ (firstcol..lastcol).each do |col|
348
353
  @col_sizes[col] = [width, hidden]
349
354
  @col_formats[col] = format if format
350
355
  end
@@ -376,9 +381,7 @@ module Writexlsx
376
381
  hidden = data[4] || 0
377
382
  level = data[5]
378
383
 
379
- if ptrue?(pixels)
380
- width = pixels_to_width(pixels)
381
- end
384
+ width = pixels_to_width(pixels) if ptrue?(pixels)
382
385
 
383
386
  set_column(first_col, last_col, width, format, hidden, level)
384
387
  end
@@ -408,7 +411,19 @@ module Writexlsx
408
411
  # Selection isn't set for cell A1.
409
412
  return if sqref == 'A1'
410
413
 
411
- @selections = [ [ nil, active_cell, sqref ] ]
414
+ @selections = [[nil, active_cell, sqref]]
415
+ end
416
+
417
+ ###############################################################################
418
+ #
419
+ # set_top_left_cell()
420
+ #
421
+ # Set the first visible cell at the top left of the worksheet.
422
+ #
423
+ def set_top_left_cell(*args)
424
+ row, col = row_col_notation(args)
425
+
426
+ @top_left_cell = xl_rowcol_to_cell(row, col)
412
427
  end
413
428
 
414
429
  #
@@ -431,7 +446,7 @@ module Writexlsx
431
446
  left_col ||= col
432
447
  type ||= 0
433
448
 
434
- @panes = [row, col, top_row, left_col, type ]
449
+ @panes = [row, col, top_row, left_col, type]
435
450
  end
436
451
 
437
452
  #
@@ -492,7 +507,7 @@ module Writexlsx
492
507
 
493
508
  def set_paper(paper_size)
494
509
  put_deprecate_message("#{self}.set_paper")
495
- self::paper = paper_size
510
+ self.paper = paper_size
496
511
  end
497
512
 
498
513
  #
@@ -500,26 +515,21 @@ module Writexlsx
500
515
  #
501
516
  def set_header(string = '', margin = 0.3, options = {})
502
517
  raise 'Header string must be less than 255 characters' if string.length > 255
518
+
503
519
  # Replace the Excel placeholder &[Picture] with the internal &G.
504
520
  @page_setup.header = string.gsub(/&\[Picture\]/, '&G')
505
521
 
506
- if options[:align_with_margins]
507
- @page_setup.header_footer_aligns = options[:align_with_margins]
508
- end
522
+ @page_setup.header_footer_aligns = options[:align_with_margins] if options[:align_with_margins]
509
523
 
510
- if options[:scale_with_doc]
511
- @page_setup.header_footer_scales = options[:scale_with_doc]
512
- end
524
+ @page_setup.header_footer_scales = options[:scale_with_doc] if options[:scale_with_doc]
513
525
 
514
526
  # Reset the array in case the function is called more than once.
515
527
  @header_images = []
516
528
 
517
529
  [
518
- [:image_left, 'LH'], [:image_center, 'CH'], [:image_right, 'RH']
530
+ [:image_left, 'LH'], [:image_center, 'CH'], [:image_right, 'RH']
519
531
  ].each do |p|
520
- if options[p.first]
521
- @header_images << [options[p.first], p.last]
522
- end
532
+ @header_images << [options[p.first], p.last] if options[p.first]
523
533
  end
524
534
 
525
535
  # placeholeder /&G/ の数
@@ -527,9 +537,7 @@ module Writexlsx
527
537
 
528
538
  image_count = @header_images.count
529
539
 
530
- if image_count != placeholder_count
531
- raise "Number of header image (#{image_count}) doesn't match placeholder count (#{placeholder_count}) in string: #{@page_setup.header}"
532
- end
540
+ raise "Number of header image (#{image_count}) doesn't match placeholder count (#{placeholder_count}) in string: #{@page_setup.header}" if image_count != placeholder_count
533
541
 
534
542
  @has_header_vml = true if image_count > 0
535
543
 
@@ -543,28 +551,22 @@ module Writexlsx
543
551
  def set_footer(string = '', margin = 0.3, options = {})
544
552
  raise 'Footer string must be less than 255 characters' if string.length > 255
545
553
 
546
- @page_setup.footer = string.dup
554
+ @page_setup.footer = string.dup
547
555
 
548
556
  # Replace the Excel placeholder &[Picture] with the internal &G.
549
557
  @page_setup.footer = string.gsub(/&\[Picture\]/, '&G')
550
558
 
551
- if options[:align_with_margins]
552
- @page_setup.header_footer_aligns = options[:align_with_margins]
553
- end
559
+ @page_setup.header_footer_aligns = options[:align_with_margins] if options[:align_with_margins]
554
560
 
555
- if options[:scale_with_doc]
556
- @page_setup.header_footer_scales = options[:scale_with_doc]
557
- end
561
+ @page_setup.header_footer_scales = options[:scale_with_doc] if options[:scale_with_doc]
558
562
 
559
563
  # Reset the array in case the function is called more than once.
560
564
  @footer_images = []
561
565
 
562
566
  [
563
- [:image_left, 'LF'], [:image_center, 'CF'], [:image_right, 'RF']
567
+ [:image_left, 'LF'], [:image_center, 'CF'], [:image_right, 'RF']
564
568
  ].each do |p|
565
- if options[p.first]
566
- @footer_images << [options[p.first], p.last]
567
- end
569
+ @footer_images << [options[p.first], p.last] if options[p.first]
568
570
  end
569
571
 
570
572
  # placeholeder /&G/ の数
@@ -572,9 +574,7 @@ module Writexlsx
572
574
 
573
575
  image_count = @footer_images.count
574
576
 
575
- if image_count != placeholder_count
576
- raise "Number of footer image (#{image_count}) doesn't match placeholder count (#{placeholder_count}) in string: #{@page_setup.footer}"
577
- end
577
+ raise "Number of footer image (#{image_count}) doesn't match placeholder count (#{placeholder_count}) in string: #{@page_setup.footer}" if image_count != placeholder_count
578
578
 
579
579
  @has_header_vml = true if image_count > 0
580
580
 
@@ -600,10 +600,10 @@ module Writexlsx
600
600
  # Set all the page margins to the same value in inches.
601
601
  #
602
602
  def margins=(margin)
603
- self::margin_left = margin
604
- self::margin_right = margin
605
- self::margin_top = margin
606
- self::margin_bottom = margin
603
+ self.margin_left = margin
604
+ self.margin_right = margin
605
+ self.margin_top = margin
606
+ self.margin_bottom = margin
607
607
  end
608
608
 
609
609
  #
@@ -611,8 +611,8 @@ module Writexlsx
611
611
  # See set_margins
612
612
  #
613
613
  def margins_left_right=(margin)
614
- self::margin_left = margin
615
- self::margin_right = margin
614
+ self.margin_left = margin
615
+ self.margin_right = margin
616
616
  end
617
617
 
618
618
  #
@@ -620,8 +620,8 @@ module Writexlsx
620
620
  # See set_margins
621
621
  #
622
622
  def margins_top_bottom=(margin)
623
- self::margin_top = margin
624
- self::margin_bottom = margin
623
+ self.margin_top = margin
624
+ self.margin_bottom = margin
625
625
  end
626
626
 
627
627
  #
@@ -661,7 +661,7 @@ module Writexlsx
661
661
  #
662
662
  def set_margins(margin)
663
663
  put_deprecate_message("#{self}.set_margins")
664
- self::margins = margin
664
+ self.margins = margin
665
665
  end
666
666
 
667
667
  #
@@ -670,7 +670,7 @@ module Writexlsx
670
670
  #
671
671
  def set_margins_LR(margin)
672
672
  put_deprecate_message("#{self}.set_margins_LR")
673
- self::margins_left_right = margin
673
+ self.margins_left_right = margin
674
674
  end
675
675
 
676
676
  #
@@ -679,7 +679,7 @@ module Writexlsx
679
679
  #
680
680
  def set_margins_TB(margin)
681
681
  put_deprecate_message("#{self}.set_margins_TB")
682
- self::margins_top_bottom = margin
682
+ self.margins_top_bottom = margin
683
683
  end
684
684
 
685
685
  #
@@ -688,7 +688,7 @@ module Writexlsx
688
688
  #
689
689
  def set_margin_left(margin = 0.7)
690
690
  put_deprecate_message("#{self}.set_margin_left")
691
- self::margin_left = margin
691
+ self.margin_left = margin
692
692
  end
693
693
 
694
694
  #
@@ -697,7 +697,7 @@ module Writexlsx
697
697
  #
698
698
  def set_margin_right(margin = 0.7)
699
699
  put_deprecate_message("#{self}.set_margin_right")
700
- self::margin_right = margin
700
+ self.margin_right = margin
701
701
  end
702
702
 
703
703
  #
@@ -706,7 +706,7 @@ module Writexlsx
706
706
  #
707
707
  def set_margin_top(margin = 0.75)
708
708
  put_deprecate_message("#{self}.set_margin_top")
709
- self::margin_top = margin
709
+ self.margin_top = margin
710
710
  end
711
711
 
712
712
  #
@@ -715,7 +715,7 @@ module Writexlsx
715
715
  #
716
716
  def set_margin_bottom(margin = 0.75)
717
717
  put_deprecate_message("#{self}.set_margin_bottom")
718
- self::margin_bottom = margin
718
+ self.margin_bottom = margin
719
719
  end
720
720
 
721
721
  #
@@ -747,7 +747,7 @@ module Writexlsx
747
747
  #
748
748
  def repeat_columns(*args)
749
749
  if args[0] =~ /^\D/
750
- dummy, first_col, dummy, last_col = substitute_cellref(*args)
750
+ _dummy, first_col, _dummy, last_col = substitute_cellref(*args)
751
751
  else
752
752
  first_col, last_col = args
753
753
  end
@@ -771,13 +771,12 @@ module Writexlsx
771
771
  #
772
772
  def print_area(*args)
773
773
  return @page_setup.print_area.dup if args.empty?
774
+
774
775
  row1, col1, row2, col2 = row_col_notation(args)
775
776
  return if [row1, col1, row2, col2].include?(nil)
776
777
 
777
778
  # Ignore max print area since this is the same as no print area for Excel.
778
- if row1 == 0 && col1 == 0 && row2 == ROW_MAX - 1 && col2 == COL_MAX - 1
779
- return
780
- end
779
+ return if row1 == 0 && col1 == 0 && row2 == ROW_MAX - 1 && col2 == COL_MAX - 1
781
780
 
782
781
  # Build up the print area range "=Sheet2!R1C1:R2C1"
783
782
  @page_setup.print_area = convert_name_area(row1, col1, row2, col2)
@@ -788,12 +787,12 @@ module Writexlsx
788
787
  #
789
788
  def zoom=(scale)
790
789
  # Confine the scale to Excel's range
791
- if scale < 10 or scale > 400
792
- # carp "Zoom factor scale outside range: 10 <= zoom <= 400"
793
- @zoom = 100
794
- else
795
- @zoom = scale.to_i
796
- end
790
+ @zoom = if scale < 10 or scale > 400
791
+ # carp "Zoom factor scale outside range: 10 <= zoom <= 400"
792
+ 100
793
+ else
794
+ scale.to_i
795
+ end
797
796
  end
798
797
 
799
798
  # This method is deprecated. use zoom=().
@@ -823,23 +822,24 @@ module Writexlsx
823
822
  #
824
823
  def set_print_scale(scale = 100)
825
824
  put_deprecate_message("#{self}.set_print_scale")
826
- self::print_scale = (scale)
825
+ self.print_scale = (scale)
827
826
  end
828
827
 
829
- #
830
- # Set the option to print the worksheet in black and white.
831
- #
832
- def print_black_and_white
833
- @page_setup.black_white = true
828
+ #
829
+ # Set the option to print the worksheet in black and white.
830
+ #
831
+ def print_black_and_white
832
+ @page_setup.black_white = true
833
+ @page_setup.page_setup_changed = true
834
834
  end
835
835
 
836
- #
837
- # Causes the write() method to treat integers with a leading zero as a string.
838
- # This ensures that any leading zeros such, as in zip codes, are maintained.
839
- #
840
- def keep_leading_zeros(flag = true)
841
- @leading_zeros = !!flag
842
- end
836
+ #
837
+ # Causes the write() method to treat integers with a leading zero as a string.
838
+ # This ensures that any leading zeros such, as in zip codes, are maintained.
839
+ #
840
+ def keep_leading_zeros(flag = true)
841
+ @leading_zeros = !!flag
842
+ end
843
843
 
844
844
  #
845
845
  # Display the worksheet right to left for some eastern versions of Excel.
@@ -852,7 +852,7 @@ module Writexlsx
852
852
  # Hide cell zero values.
853
853
  #
854
854
  def hide_zero(flag = true)
855
- @show_zeros = !flag
855
+ @show_zeros = !flag
856
856
  end
857
857
 
858
858
  #
@@ -877,7 +877,7 @@ module Writexlsx
877
877
 
878
878
  def set_start_page(page_start)
879
879
  put_deprecate_message("#{self}.set_start_page")
880
- self::start_page = page_start
880
+ self.start_page = page_start
881
881
  end
882
882
 
883
883
  #
@@ -893,9 +893,13 @@ module Writexlsx
893
893
  # Check for a cell reference in A1 notation and substitute row and column
894
894
  row_col_args = row_col_notation(args)
895
895
  token = row_col_args[2] || ''
896
+ token = token.to_s if token.instance_of?(Time)
896
897
 
898
+ fmt = row_col_args[3]
899
+ if fmt.respond_to?(:force_text_format?) && fmt.force_text_format?
900
+ write_string(*args) # Force text format
897
901
  # Match an array ref.
898
- if token.respond_to?(:to_ary)
902
+ elsif token.respond_to?(:to_ary)
899
903
  write_row(*args)
900
904
  elsif token.respond_to?(:coerce) # Numeric
901
905
  write_number(*args)
@@ -916,13 +920,13 @@ module Writexlsx
916
920
  write_blank(*row_col_args)
917
921
  elsif @workbook.strings_to_urls
918
922
  # Match http, https or ftp URL
919
- if token =~ %r|\A[fh]tt?ps?://|
923
+ if token =~ %r{\A[fh]tt?ps?://}
920
924
  write_url(*args)
921
925
  # Match mailto:
922
- elsif token =~ %r|\Amailto:|
926
+ elsif token =~ /\Amailto:/
923
927
  write_url(*args)
924
928
  # Match internal or external sheet link
925
- elsif token =~ %r!\A(?:in|ex)ternal:!
929
+ elsif token =~ /\A(?:in|ex)ternal:/
926
930
  write_url(*args)
927
931
  else
928
932
  write_string(*args)
@@ -934,7 +938,7 @@ module Writexlsx
934
938
 
935
939
  #
936
940
  # :call-seq:
937
- # write_row(row, col, array [ , format ] )
941
+ # write_row(row, col, array [ , format ])
938
942
  #
939
943
  # Write a row of data starting from (row, col). Call write_col() if any of
940
944
  # the elements of the array are in turn array. This allows the writing
@@ -958,7 +962,7 @@ module Writexlsx
958
962
 
959
963
  #
960
964
  # :call-seq:
961
- # write_col(row, col, array [ , format ] )
965
+ # write_col(row, col, array [ , format ])
962
966
  #
963
967
  # Write a column of data starting from (row, col). Call write_row() if any of
964
968
  # the elements of the array are in turn array. This allows the writing
@@ -997,7 +1001,7 @@ module Writexlsx
997
1001
 
998
1002
  #
999
1003
  # :call-seq:
1000
- # write_number(row, column, number [ , format ] )
1004
+ # write_number(row, column, number [ , format ])
1001
1005
  #
1002
1006
  # Write an integer or a float to the cell specified by row and column:
1003
1007
  #
@@ -1010,12 +1014,12 @@ module Writexlsx
1010
1014
  check_dimensions(row, col)
1011
1015
  store_row_col_max_min_values(row, col)
1012
1016
 
1013
- store_data_to_table(NumberCellData.new(self, row, col, num, xf))
1017
+ store_data_to_table(NumberCellData.new(num, xf), row, col)
1014
1018
  end
1015
1019
 
1016
1020
  #
1017
1021
  # :call-seq:
1018
- # write_string(row, column, string [, format ] )
1022
+ # write_string(row, column, string [, format ])
1019
1023
  #
1020
1024
  # Write a string to the specified row and column (zero indexed).
1021
1025
  # +format+ is optional.
@@ -1032,12 +1036,12 @@ module Writexlsx
1032
1036
 
1033
1037
  index = shared_string_index(str.length > STR_MAX ? str[0, STR_MAX] : str)
1034
1038
 
1035
- store_data_to_table(StringCellData.new(self, row, col, index, xf))
1039
+ store_data_to_table(StringCellData.new(index, xf), row, col)
1036
1040
  end
1037
1041
 
1038
1042
  #
1039
1043
  # :call-seq:
1040
- # write_rich_string(row, column, (string | format, string)+, [,cell_format] )
1044
+ # write_rich_string(row, column, (string | format, string)+, [,cell_format])
1041
1045
  #
1042
1046
  # The write_rich_string() method is used to write strings with multiple formats.
1043
1047
  # The method receives string fragments prefixed by format objects. The final
@@ -1054,13 +1058,13 @@ module Writexlsx
1054
1058
  check_dimensions(row, col)
1055
1059
  store_row_col_max_min_values(row, col)
1056
1060
 
1057
- fragments, length = rich_strings_fragments(rich_strings)
1061
+ fragments, _length = rich_strings_fragments(rich_strings)
1058
1062
  # can't allow 2 formats in a row
1059
1063
  return -4 unless fragments
1060
1064
 
1061
1065
  index = shared_string_index(xml_str_of_rich_string(fragments))
1062
1066
 
1063
- store_data_to_table(StringCellData.new(self, row, col, index, xf))
1067
+ store_data_to_table(StringCellData.new(index, xf), row, col)
1064
1068
  end
1065
1069
 
1066
1070
  #
@@ -1083,12 +1087,177 @@ module Writexlsx
1083
1087
  check_dimensions(row, col)
1084
1088
  store_row_col_max_min_values(row, col)
1085
1089
 
1086
- store_data_to_table(BlankCellData.new(self, row, col, xf))
1090
+ store_data_to_table(BlankCellData.new(xf), row, col)
1091
+ end
1092
+
1093
+ def expand_formula(formula, function, addition = '')
1094
+ if formula =~ /\b(#{function})/
1095
+ formula.gsub(
1096
+ ::Regexp.last_match(1),
1097
+ "_xlfn#{addition}.#{::Regexp.last_match(1)}"
1098
+ )
1099
+ else
1100
+ formula
1101
+ end
1087
1102
  end
1103
+ private :expand_formula
1104
+
1105
+ #
1106
+ # Utility method to strip equal sign and array braces from a formula
1107
+ # and also expand out future and dynamic array formulas.
1108
+ #
1109
+ def prepare_formula(given_formula)
1110
+ # Ignore empty/null formulas.
1111
+ return given_formula unless ptrue?(given_formula)
1112
+
1113
+ # Remove array formula braces and the leading =.
1114
+ formula = given_formula.sub(/^\{(.*)\}$/, '\1').sub(/^=/, '')
1115
+
1116
+ # # Don't expand formulas that the user has already expanded.
1117
+ return formula if formula =~ /_xlfn\./
1118
+
1119
+ # Expand dynamic array formulas.
1120
+ formula = expand_formula(formula, 'LET\(')
1121
+ formula = expand_formula(formula, 'LAMBDA\(')
1122
+ formula = expand_formula(formula, 'SINGLE\(')
1123
+ formula = expand_formula(formula, 'SORTBY\(')
1124
+ formula = expand_formula(formula, 'UNIQUE\(')
1125
+ formula = expand_formula(formula, 'XMATCH\(')
1126
+ formula = expand_formula(formula, 'XLOOKUP\(')
1127
+ formula = expand_formula(formula, 'SEQUENCE\(')
1128
+ formula = expand_formula(formula, 'RANDARRAY\(')
1129
+ formula = expand_formula(formula, 'SORT\(', '._xlws')
1130
+ formula = expand_formula(formula, 'ANCHORARRAY\(')
1131
+ formula = expand_formula(formula, 'FILTER\(', '._xlws')
1132
+
1133
+ return formula unless @use_future_functions
1134
+
1135
+ # Future functions.
1136
+ formula = expand_formula(formula, 'ACOTH\(')
1137
+ formula = expand_formula(formula, 'ACOT\(')
1138
+ formula = expand_formula(formula, 'AGGREGATE\(')
1139
+ formula = expand_formula(formula, 'ARABIC\(')
1140
+ formula = expand_formula(formula, 'BASE\(')
1141
+ formula = expand_formula(formula, 'BETA.DIST\(')
1142
+ formula = expand_formula(formula, 'BETA.INV\(')
1143
+ formula = expand_formula(formula, 'BINOM.DIST.RANGE\(')
1144
+ formula = expand_formula(formula, 'BINOM.DIST\(')
1145
+ formula = expand_formula(formula, 'BINOM.INV\(')
1146
+ formula = expand_formula(formula, 'BITAND\(')
1147
+ formula = expand_formula(formula, 'BITLSHIFT\(')
1148
+ formula = expand_formula(formula, 'BITOR\(')
1149
+ formula = expand_formula(formula, 'BITRSHIFT\(')
1150
+ formula = expand_formula(formula, 'BITXOR\(')
1151
+ formula = expand_formula(formula, 'CEILING.MATH\(')
1152
+ formula = expand_formula(formula, 'CEILING.PRECISE\(')
1153
+ formula = expand_formula(formula, 'CHISQ.DIST.RT\(')
1154
+ formula = expand_formula(formula, 'CHISQ.DIST\(')
1155
+ formula = expand_formula(formula, 'CHISQ.INV.RT\(')
1156
+ formula = expand_formula(formula, 'CHISQ.INV\(')
1157
+ formula = expand_formula(formula, 'CHISQ.TEST\(')
1158
+ formula = expand_formula(formula, 'COMBINA\(')
1159
+ formula = expand_formula(formula, 'CONCAT\(')
1160
+ formula = expand_formula(formula, 'CONFIDENCE.NORM\(')
1161
+ formula = expand_formula(formula, 'CONFIDENCE.T\(')
1162
+ formula = expand_formula(formula, 'COTH\(')
1163
+ formula = expand_formula(formula, 'COT\(')
1164
+ formula = expand_formula(formula, 'COVARIANCE.P\(')
1165
+ formula = expand_formula(formula, 'COVARIANCE.S\(')
1166
+ formula = expand_formula(formula, 'CSCH\(')
1167
+ formula = expand_formula(formula, 'CSC\(')
1168
+ formula = expand_formula(formula, 'DAYS\(')
1169
+ formula = expand_formula(formula, 'DECIMAL\(')
1170
+ formula = expand_formula(formula, 'ERF.PRECISE\(')
1171
+ formula = expand_formula(formula, 'ERFC.PRECISE\(')
1172
+ formula = expand_formula(formula, 'EXPON.DIST\(')
1173
+ formula = expand_formula(formula, 'F.DIST.RT\(')
1174
+ formula = expand_formula(formula, 'F.DIST\(')
1175
+ formula = expand_formula(formula, 'F.INV.RT\(')
1176
+ formula = expand_formula(formula, 'F.INV\(')
1177
+ formula = expand_formula(formula, 'F.TEST\(')
1178
+ formula = expand_formula(formula, 'FILTERXML\(')
1179
+ formula = expand_formula(formula, 'FLOOR.MATH\(')
1180
+ formula = expand_formula(formula, 'FLOOR.PRECISE\(')
1181
+ formula = expand_formula(formula, 'FORECAST.ETS.CONFINT\(')
1182
+ formula = expand_formula(formula, 'FORECAST.ETS.SEASONALITY\(')
1183
+ formula = expand_formula(formula, 'FORECAST.ETS.STAT\(')
1184
+ formula = expand_formula(formula, 'FORECAST.ETS\(')
1185
+ formula = expand_formula(formula, 'FORECAST.LINEAR\(')
1186
+ formula = expand_formula(formula, 'FORMULATEXT\(')
1187
+ formula = expand_formula(formula, 'GAMMA.DIST\(')
1188
+ formula = expand_formula(formula, 'GAMMA.INV\(')
1189
+ formula = expand_formula(formula, 'GAMMALN.PRECISE\(')
1190
+ formula = expand_formula(formula, 'GAMMA\(')
1191
+ formula = expand_formula(formula, 'GAUSS\(')
1192
+ formula = expand_formula(formula, 'HYPGEOM.DIST\(')
1193
+ formula = expand_formula(formula, 'IFNA\(')
1194
+ formula = expand_formula(formula, 'IFS\(')
1195
+ formula = expand_formula(formula, 'IMCOSH\(')
1196
+ formula = expand_formula(formula, 'IMCOT\(')
1197
+ formula = expand_formula(formula, 'IMCSCH\(')
1198
+ formula = expand_formula(formula, 'IMCSC\(')
1199
+ formula = expand_formula(formula, 'IMSECH\(')
1200
+ formula = expand_formula(formula, 'IMSEC\(')
1201
+ formula = expand_formula(formula, 'IMSINH\(')
1202
+ formula = expand_formula(formula, 'IMTAN\(')
1203
+ formula = expand_formula(formula, 'ISFORMULA\(')
1204
+ formula = expand_formula(formula, 'ISOWEEKNUM\(')
1205
+ formula = expand_formula(formula, 'LOGNORM.DIST\(')
1206
+ formula = expand_formula(formula, 'LOGNORM.INV\(')
1207
+ formula = expand_formula(formula, 'MAXIFS\(')
1208
+ formula = expand_formula(formula, 'MINIFS\(')
1209
+ formula = expand_formula(formula, 'MODE.MULT\(')
1210
+ formula = expand_formula(formula, 'MODE.SNGL\(')
1211
+ formula = expand_formula(formula, 'MUNIT\(')
1212
+ formula = expand_formula(formula, 'NEGBINOM.DIST\(')
1213
+ formula = expand_formula(formula, 'NORM.DIST\(')
1214
+ formula = expand_formula(formula, 'NORM.INV\(')
1215
+ formula = expand_formula(formula, 'NORM.S.DIST\(')
1216
+ formula = expand_formula(formula, 'NORM.S.INV\(')
1217
+ formula = expand_formula(formula, 'NUMBERVALUE\(')
1218
+ formula = expand_formula(formula, 'PDURATION\(')
1219
+ formula = expand_formula(formula, 'PERCENTILE.EXC\(')
1220
+ formula = expand_formula(formula, 'PERCENTILE.INC\(')
1221
+ formula = expand_formula(formula, 'PERCENTRANK.EXC\(')
1222
+ formula = expand_formula(formula, 'PERCENTRANK.INC\(')
1223
+ formula = expand_formula(formula, 'PERMUTATIONA\(')
1224
+ formula = expand_formula(formula, 'PHI\(')
1225
+ formula = expand_formula(formula, 'POISSON.DIST\(')
1226
+ formula = expand_formula(formula, 'QUARTILE.EXC\(')
1227
+ formula = expand_formula(formula, 'QUARTILE.INC\(')
1228
+ formula = expand_formula(formula, 'QUERYSTRING\(')
1229
+ formula = expand_formula(formula, 'RANK.AVG\(')
1230
+ formula = expand_formula(formula, 'RANK.EQ\(')
1231
+ formula = expand_formula(formula, 'RRI\(')
1232
+ formula = expand_formula(formula, 'SECH\(')
1233
+ formula = expand_formula(formula, 'SEC\(')
1234
+ formula = expand_formula(formula, 'SHEETS\(')
1235
+ formula = expand_formula(formula, 'SHEET\(')
1236
+ formula = expand_formula(formula, 'SKEW.P\(')
1237
+ formula = expand_formula(formula, 'STDEV.P\(')
1238
+ formula = expand_formula(formula, 'STDEV.S\(')
1239
+ formula = expand_formula(formula, 'SWITCH\(')
1240
+ formula = expand_formula(formula, 'T.DIST.2T\(')
1241
+ formula = expand_formula(formula, 'T.DIST.RT\(')
1242
+ formula = expand_formula(formula, 'T.DIST\(')
1243
+ formula = expand_formula(formula, 'T.INV.2T\(')
1244
+ formula = expand_formula(formula, 'T.INV\(')
1245
+ formula = expand_formula(formula, 'T.TEST\(')
1246
+ formula = expand_formula(formula, 'TEXTJOIN\(')
1247
+ formula = expand_formula(formula, 'UNICHAR\(')
1248
+ formula = expand_formula(formula, 'UNICODE\(')
1249
+ formula = expand_formula(formula, 'VAR.P\(')
1250
+ formula = expand_formula(formula, 'VAR.S\(')
1251
+ formula = expand_formula(formula, 'WEBSERVICE\(')
1252
+ formula = expand_formula(formula, 'WEIBULL.DIST\(')
1253
+ formula = expand_formula(formula, 'XOR\(')
1254
+ expand_formula(formula, 'Z.TEST\(')
1255
+ end
1256
+ private :prepare_formula
1088
1257
 
1089
1258
  #
1090
1259
  # :call-seq:
1091
- # write_formula(row, column, formula [ , format [ , value ] ] )
1260
+ # write_formula(row, column, formula [ , format [ , value ] ])
1092
1261
  #
1093
1262
  # Write a formula or function to the cell specified by +row+ and +column+:
1094
1263
  #
@@ -1097,6 +1266,15 @@ module Writexlsx
1097
1266
  row, col, formula, format, value = row_col_notation(args)
1098
1267
  raise WriteXLSXInsufficientArgumentError if [row, col, formula].include?(nil)
1099
1268
 
1269
+ # Check for dynamic array functions.
1270
+ regex = /\bLET\(|\bSORT\(|\bLAMBDA\(|\bSINGLE\(|\bSORTBY\(|\bUNIQUE\(|\bXMATCH\(|\bFILTER\(|\bXLOOKUP\(|\bSEQUENCE\(|\bRANDARRAY\(|\bANCHORARRAY\(/
1271
+ if formula =~ regex
1272
+ return write_dynamic_array_formula(
1273
+ row, col, row, col, formula, format, value
1274
+ )
1275
+ end
1276
+
1277
+ # Hand off array formulas.
1100
1278
  if formula =~ /^\{=.*\}$/
1101
1279
  write_array_formula(row, col, row, col, formula, format, value)
1102
1280
  else
@@ -1104,7 +1282,7 @@ module Writexlsx
1104
1282
  store_row_col_max_min_values(row, col)
1105
1283
  formula = formula.sub(/^=/, '')
1106
1284
 
1107
- store_data_to_table(FormulaCellData.new(self, row, col, formula, format, value))
1285
+ store_data_to_table(FormulaCellData.new(formula, format, value), row, col)
1108
1286
  end
1109
1287
  end
1110
1288
 
@@ -1114,7 +1292,15 @@ module Writexlsx
1114
1292
  #
1115
1293
  def write_array_formula_base(type, *args)
1116
1294
  # Check for a cell reference in A1 notation and substitute row and column
1117
- row1, col1, row2, col2, formula, xf, value = row_col_notation(args)
1295
+ # Convert single cell to range
1296
+ if args.first.to_s =~ /^([A-Za-z]+[0-9]+)$/
1297
+ range = "#{::Regexp.last_match(1)}:#{::Regexp.last_match(1)}"
1298
+ params = [range] + args[1..]
1299
+ else
1300
+ params = args
1301
+ end
1302
+
1303
+ row1, col1, row2, col2, formula, xf, value = row_col_notation(params)
1118
1304
  raise WriteXLSXInsufficientArgumentError if [row1, col1, row2, col2, formula].include?(nil)
1119
1305
 
1120
1306
  # Swap last row/col with first row/col as necessary
@@ -1128,29 +1314,31 @@ module Writexlsx
1128
1314
  store_row_col_max_min_values(row2, col2)
1129
1315
 
1130
1316
  # Define array range
1131
- if row1 == row2 && col1 == col2
1132
- range = xl_rowcol_to_cell(row1, col1)
1133
- else
1134
- range ="#{xl_rowcol_to_cell(row1, col1)}:#{xl_rowcol_to_cell(row2, col2)}"
1135
- end
1317
+ range = if row1 == row2 && col1 == col2
1318
+ xl_rowcol_to_cell(row1, col1)
1319
+ else
1320
+ "#{xl_rowcol_to_cell(row1, col1)}:#{xl_rowcol_to_cell(row2, col2)}"
1321
+ end
1136
1322
 
1137
- # Remove array formula braces and the leading =.
1138
- formula = formula.sub(/^\{(.*)\}$/, '\1').sub(/^=/, '')
1323
+ # Modify the formula string, as needed.
1324
+ formula = prepare_formula(formula)
1139
1325
 
1140
1326
  store_data_to_table(
1141
1327
  if type == 'a'
1142
- FormulaArrayCellData.new(self, row1, col1, formula, xf, range, value)
1328
+ FormulaArrayCellData.new(formula, xf, range, value)
1143
1329
  elsif type == 'd'
1144
- DynamicFormulaArrayCellData.new(self, row1, col1, formula, xf, range, value)
1330
+ DynamicFormulaArrayCellData.new(formula, xf, range, value)
1145
1331
  else
1146
1332
  raise "invalid type in write_array_formula_base()."
1147
- end
1333
+ end,
1334
+ row1, col1
1148
1335
  )
1149
1336
 
1150
1337
  # Pad out the rest of the area with formatted zeroes.
1151
1338
  (row1..row2).each do |row|
1152
1339
  (col1..col2).each do |col|
1153
1340
  next if row == row1 && col == col1
1341
+
1154
1342
  write_number(row, col, 0, xf)
1155
1343
  end
1156
1344
  end
@@ -1186,13 +1374,12 @@ module Writexlsx
1186
1374
 
1187
1375
  val = val ? 1 : 0 # Boolean value.
1188
1376
  # xf : cell format.
1189
- type = 'l' # The data type
1190
1377
 
1191
1378
  # Check that row and col are valid and store max and min values
1192
1379
  check_dimensions(row, col)
1193
1380
  store_row_col_max_min_values(row, col)
1194
1381
 
1195
- store_data_to_table(BooleanCellData.new(self, row, col, val, xf))
1382
+ store_data_to_table(BooleanCellData.new(val, xf), row, col)
1196
1383
  end
1197
1384
 
1198
1385
  #
@@ -1225,15 +1412,15 @@ module Writexlsx
1225
1412
  format.set_format_properties(params)
1226
1413
  end
1227
1414
  # keep original value of cell
1228
- if cell_data.is_a? FormulaCellData
1229
- value = "=#{cell_data.token}"
1230
- elsif cell_data.is_a? FormulaArrayCellData
1231
- value = "{=#{cell_data.token}}"
1232
- elsif cell_data.is_a? StringCellData
1233
- value = @workbook.shared_strings.string(cell_data.data[:sst_id])
1234
- else
1235
- value = cell_data.data
1236
- end
1415
+ value = if cell_data.is_a? FormulaCellData
1416
+ "=#{cell_data.token}"
1417
+ elsif cell_data.is_a? FormulaArrayCellData
1418
+ "{=#{cell_data.token}}"
1419
+ elsif cell_data.is_a? StringCellData
1420
+ @workbook.shared_strings.string(cell_data.data[:sst_id])
1421
+ else
1422
+ cell_data.data
1423
+ end
1237
1424
  write(row, col, value, format)
1238
1425
  end
1239
1426
  end
@@ -1250,7 +1437,7 @@ module Writexlsx
1250
1437
  raise WriteXLSXInsufficientArgumentError if [row_first, col_first, row_last, col_last, params].include?(nil)
1251
1438
 
1252
1439
  # Swap last row/col with first row/col as necessary
1253
- row_first, row_last = row_last, row_first if row_first > row_last
1440
+ row_first, row_last = row_last, row_first if row_first > row_last
1254
1441
  col_first, col_last = col_last, col_first if col_first > col_last
1255
1442
 
1256
1443
  # Check that column number is valid and store the max value
@@ -1287,7 +1474,7 @@ module Writexlsx
1287
1474
 
1288
1475
  #
1289
1476
  # :call-seq:
1290
- # write_url(row, column, url [ , format, label, tip ] )
1477
+ # write_url(row, column, url [ , format, label, tip ])
1291
1478
  #
1292
1479
  # Write a hyperlink to a URL in the cell specified by +row+ and +column+.
1293
1480
  # The hyperlink is comprised of two elements: the visible label and
@@ -1309,12 +1496,10 @@ module Writexlsx
1309
1496
  hyperlink = Hyperlink.factory(url, str, tip)
1310
1497
  store_hyperlink(row, col, hyperlink)
1311
1498
 
1312
- if hyperlinks_count > 65_530
1313
- raise "URL '#{url}' added but URL exceeds Excel's limit of 65,530 URLs per worksheet."
1314
- end
1499
+ raise "URL '#{url}' added but URL exceeds Excel's limit of 65,530 URLs per worksheet." if hyperlinks_count > 65_530
1315
1500
 
1316
1501
  # Add the default URL format.
1317
- xf = @default_url_format unless xf
1502
+ xf ||= @default_url_format
1318
1503
 
1319
1504
  # Write the hyperlink string.
1320
1505
  write_string(row, col, hyperlink.str, xf)
@@ -1322,7 +1507,7 @@ module Writexlsx
1322
1507
 
1323
1508
  #
1324
1509
  # :call-seq:
1325
- # write_date_time (row, col, date_string [ , format ] )
1510
+ # write_date_time (row, col, date_string [ , format ])
1326
1511
  #
1327
1512
  # Write a datetime string in ISO8601 "yyyy-mm-ddThh:mm:ss.ss" format as a
1328
1513
  # number representing an Excel date. format is optional.
@@ -1339,7 +1524,7 @@ module Writexlsx
1339
1524
  date_time = convert_date_time(str)
1340
1525
 
1341
1526
  if date_time
1342
- store_data_to_table(NumberCellData.new(self, row, col, date_time, xf))
1527
+ store_data_to_table(NumberCellData.new(date_time, xf), row, col)
1343
1528
  else
1344
1529
  # If the date isn't valid then write it as a string.
1345
1530
  write_string(*args)
@@ -1348,7 +1533,7 @@ module Writexlsx
1348
1533
 
1349
1534
  #
1350
1535
  # :call-seq:
1351
- # insert_chart(row, column, chart [ , x, y, x_scale, y_scale ] )
1536
+ # insert_chart(row, column, chart [ , x, y, x_scale, y_scale ])
1352
1537
  #
1353
1538
  # This method can be used to insert a Chart object into a worksheet.
1354
1539
  # The Chart must be created by the add_chart() Workbook method and
@@ -1359,14 +1544,15 @@ module Writexlsx
1359
1544
  row, col, chart, *options = row_col_notation(args)
1360
1545
  raise WriteXLSXInsufficientArgumentError if [row, col, chart].include?(nil)
1361
1546
 
1362
- if options.first.class == Hash
1547
+ if options.first.instance_of?(Hash)
1363
1548
  params = options.first
1364
- x_offset = params[:x_offset]
1365
- y_offset = params[:y_offset]
1366
- x_scale = params[:x_scale]
1367
- y_scale = params[:y_scale]
1368
- anchor = params[:object_position]
1369
-
1549
+ x_offset = params[:x_offset]
1550
+ y_offset = params[:y_offset]
1551
+ x_scale = params[:x_scale]
1552
+ y_scale = params[:y_scale]
1553
+ anchor = params[:object_position]
1554
+ description = params[:description]
1555
+ decorative = params[:decorative]
1370
1556
  else
1371
1557
  x_offset, y_offset, x_scale, y_scale, anchor = options
1372
1558
  end
@@ -1392,7 +1578,10 @@ module Writexlsx
1392
1578
  x_offset = chart.x_offset if ptrue?(chart.x_offset)
1393
1579
  y_offset = chart.y_offset if ptrue?(chart.y_offset)
1394
1580
 
1395
- @charts << [row, col, chart, x_offset, y_offset, x_scale, y_scale, anchor]
1581
+ @charts << [
1582
+ row, col, chart, x_offset, y_offset,
1583
+ x_scale, y_scale, anchor, description, decorative
1584
+ ]
1396
1585
  end
1397
1586
 
1398
1587
  #
@@ -1404,7 +1593,7 @@ module Writexlsx
1404
1593
  row, col, image, *options = row_col_notation(args)
1405
1594
  raise WriteXLSXInsufficientArgumentError if [row, col, image].include?(nil)
1406
1595
 
1407
- if options.first.class == Hash
1596
+ if options.first.instance_of?(Hash)
1408
1597
  # Newer hash bashed options
1409
1598
  params = options.first
1410
1599
  x_offset = params[:x_offset]
@@ -1433,7 +1622,7 @@ module Writexlsx
1433
1622
 
1434
1623
  #
1435
1624
  # :call-seq:
1436
- # repeat_formula(row, column, formula [ , format ] )
1625
+ # repeat_formula(row, column, formula [ , format ])
1437
1626
  #
1438
1627
  # Deprecated. This is a writeexcel gem's method that is no longer
1439
1628
  # required by WriteXLSX.
@@ -1443,7 +1632,7 @@ module Writexlsx
1443
1632
  row, col, formula, format, *pairs = row_col_notation(args)
1444
1633
  raise WriteXLSXInsufficientArgumentError if [row, col].include?(nil)
1445
1634
 
1446
- raise "Odd number of elements in pattern/replacement list" unless pairs.size % 2 == 0
1635
+ raise "Odd number of elements in pattern/replacement list" unless pairs.size.even?
1447
1636
  raise "Not a valid formula" unless formula.respond_to?(:to_ary)
1448
1637
 
1449
1638
  tokens = formula.join("\t").split("\t")
@@ -1454,7 +1643,7 @@ module Writexlsx
1454
1643
  value = pairs.pop
1455
1644
  pairs.pop
1456
1645
  end
1457
- while !pairs.empty?
1646
+ until pairs.empty?
1458
1647
  pattern = pairs.shift
1459
1648
  replace = pairs.shift
1460
1649
 
@@ -1468,13 +1657,14 @@ module Writexlsx
1468
1657
 
1469
1658
  #
1470
1659
  # :call-seq:
1471
- # set_row(row [ , height, format, hidden, level, collapsed ] )
1660
+ # set_row(row [ , height, format, hidden, level, collapsed ])
1472
1661
  #
1473
1662
  # This method can be used to change the default properties of a row.
1474
1663
  # All parameters apart from +row+ are optional.
1475
1664
  #
1476
1665
  def set_row(*args)
1477
1666
  return unless args[0]
1667
+
1478
1668
  row = args[0]
1479
1669
  height = args[1] || @default_height
1480
1670
  xf = args[2]
@@ -1541,9 +1731,7 @@ module Writexlsx
1541
1731
  @row_size_changed = 1
1542
1732
  end
1543
1733
 
1544
- if ptrue?(zero_height)
1545
- @default_row_zeroed = 1
1546
- end
1734
+ @default_row_zeroed = 1 if ptrue?(zero_height)
1547
1735
  end
1548
1736
 
1549
1737
  #
@@ -1560,7 +1748,7 @@ module Writexlsx
1560
1748
  raise "Can't merge single cell" if row_first == row_last && col_first == col_last
1561
1749
 
1562
1750
  # Swap last row/col with first row/col as necessary
1563
- row_first, row_last = row_last, row_first if row_first > row_last
1751
+ row_first, row_last = row_last, row_first if row_first > row_last
1564
1752
  col_first, col_last = col_last, col_first if col_first > col_last
1565
1753
 
1566
1754
  # Check that the data range is valid and store the max and min values.
@@ -1683,7 +1871,7 @@ module Writexlsx
1683
1871
  # into a worksheet.
1684
1872
  #
1685
1873
  def insert_button(*args)
1686
- @buttons_array << button_params(*(row_col_notation(args)))
1874
+ @buttons_array << button_params(*row_col_notation(args))
1687
1875
  @has_vml = 1
1688
1876
  end
1689
1877
 
@@ -1705,11 +1893,7 @@ module Writexlsx
1705
1893
  # Set the option to hide gridlines on the screen and the printed page.
1706
1894
  #
1707
1895
  def hide_gridlines(option = 1)
1708
- if option == 2
1709
- @screen_gridlines = false
1710
- else
1711
- @screen_gridlines = true
1712
- end
1896
+ @screen_gridlines = (option != 2)
1713
1897
 
1714
1898
  @page_setup.hide_gridlines(option)
1715
1899
  end
@@ -1743,7 +1927,7 @@ module Writexlsx
1743
1927
  def fit_to_pages(width = 1, height = 1)
1744
1928
  @page_setup.fit_page = true
1745
1929
  @page_setup.fit_width = width
1746
- @page_setup.fit_height = height
1930
+ @page_setup.fit_height = height
1747
1931
  @page_setup.page_setup_changed = true
1748
1932
  end
1749
1933
 
@@ -1779,9 +1963,7 @@ module Writexlsx
1779
1963
 
1780
1964
  tokens = extract_filter_tokens(expression)
1781
1965
 
1782
- unless tokens.size == 3 || tokens.size == 7
1783
- raise "Incorrect number of tokens in expression '#{expression}'"
1784
- end
1966
+ raise "Incorrect number of tokens in expression '#{expression}'" unless tokens.size == 3 || tokens.size == 7
1785
1967
 
1786
1968
  tokens = parse_filter_expression(expression, tokens)
1787
1969
 
@@ -1891,7 +2073,9 @@ module Writexlsx
1891
2073
  def prepare_chart(index, chart_id, drawing_id) # :nodoc:
1892
2074
  drawing_type = 1
1893
2075
 
1894
- row, col, chart, x_offset, y_offset, x_scale, y_scale, anchor = @charts[index]
2076
+ row, col, chart, x_offset, y_offset,
2077
+ x_scale, y_scale, anchor, description, decorative = @charts[index]
2078
+
1895
2079
  chart.id = chart_id - 1
1896
2080
  x_scale ||= 0
1897
2081
  y_scale ||= 0
@@ -1909,15 +2093,15 @@ module Writexlsx
1909
2093
  name = chart.name
1910
2094
 
1911
2095
  # Create a Drawing object to use with worksheet unless one already exists.
1912
- drawing = Drawing.new(drawing_type, dimensions, 0, 0, name, nil, anchor, drawing_rel_index, 0, nil, 0)
1913
- if !drawings?
2096
+ drawing = Drawing.new(drawing_type, dimensions, 0, 0, nil, anchor, drawing_rel_index, 0, nil, name, description, decorative)
2097
+ if drawings?
2098
+ @drawings.add_drawing_object(drawing)
2099
+ else
1914
2100
  @drawings = Drawings.new
1915
2101
  @drawings.add_drawing_object(drawing)
1916
2102
  @drawings.embedded = 1
1917
2103
 
1918
- @external_drawing_links << ['/drawing', "../drawings/drawing#{drawing_id}.xml" ]
1919
- else
1920
- @drawings.add_drawing_object(drawing)
2104
+ @external_drawing_links << ['/drawing', "../drawings/drawing#{drawing_id}.xml"]
1921
2105
  end
1922
2106
  @drawing_links << ['/chart', "../charts/chart#{chart_id}.xml"]
1923
2107
  end
@@ -1933,31 +2117,31 @@ module Writexlsx
1933
2117
 
1934
2118
  # Iterate through the table data.
1935
2119
  data = []
1936
- (row_start .. row_end).each do |row_num|
2120
+ (row_start..row_end).each do |row_num|
1937
2121
  # Store nil if row doesn't exist.
1938
- if !@cell_data_table[row_num]
2122
+ unless @cell_data_table[row_num]
1939
2123
  data << nil
1940
2124
  next
1941
2125
  end
1942
2126
 
1943
- (col_start .. col_end).each do |col_num|
1944
- if cell = @cell_data_table[row_num][col_num]
2127
+ (col_start..col_end).each do |col_num|
2128
+ cell = @cell_data_table[row_num][col_num]
2129
+ if cell
1945
2130
  data << cell.data
1946
2131
  else
1947
- # Store nil if col doesn't exist.
1948
2132
  data << nil
1949
2133
  end
1950
2134
  end
1951
2135
  end
1952
2136
 
1953
- return data
2137
+ data
1954
2138
  end
1955
2139
 
1956
2140
  #
1957
2141
  # Calculate the vertices that define the position of a graphical object within
1958
2142
  # the worksheet in pixels.
1959
2143
  #
1960
- def position_object_pixels(col_start, row_start, x1, y1, width, height, anchor = nil) #:nodoc:
2144
+ def position_object_pixels(col_start, row_start, x1, y1, width, height, anchor = nil) # :nodoc:
1961
2145
  # Adjust start column for negative offsets.
1962
2146
  while x1 < 0 && col_start > 0
1963
2147
  x1 += size_col(col_start - 1)
@@ -1975,22 +2159,22 @@ module Writexlsx
1975
2159
  y1 = 0 if y1 < 0
1976
2160
 
1977
2161
  # Calculate the absolute x offset of the top-left vertex.
1978
- if @col_size_changed
1979
- x_abs = (0 .. col_start-1).inject(0) {|sum, col| sum += size_col(col, anchor)}
1980
- else
1981
- # Optimisation for when the column widths haven't changed.
1982
- x_abs = @default_col_pixels * col_start
1983
- end
2162
+ x_abs = if @col_size_changed
2163
+ (0..col_start - 1).inject(0) { |sum, col| sum += size_col(col, anchor) }
2164
+ else
2165
+ # Optimisation for when the column widths haven't changed.
2166
+ @default_col_pixels * col_start
2167
+ end
1984
2168
  x_abs += x1
1985
2169
 
1986
2170
  # Calculate the absolute y offset of the top-left vertex.
1987
2171
  # Store the column change to allow optimisations.
1988
- if @row_size_changed
1989
- y_abs = (0 .. row_start-1).inject(0) {|sum, row| sum += size_row(row, anchor)}
1990
- else
1991
- # Optimisation for when the row heights haven't changed.
1992
- y_abs = @default_row_pixels * row_start
1993
- end
2172
+ y_abs = if @row_size_changed
2173
+ (0..row_start - 1).inject(0) { |sum, row| sum += size_row(row, anchor) }
2174
+ else
2175
+ # Optimisation for when the row heights haven't changed.
2176
+ @default_row_pixels * row_start
2177
+ end
1994
2178
  y_abs += y1
1995
2179
 
1996
2180
  # Adjust start column for offsets that are greater than the col width.
@@ -2043,7 +2227,7 @@ module Writexlsx
2043
2227
  #
2044
2228
  # Write the cell value <v> element.
2045
2229
  #
2046
- def write_cell_value(value = '') #:nodoc:
2230
+ def write_cell_value(value = '') # :nodoc:
2047
2231
  return write_cell_formula('=NA()') if !value.nil? && value.is_a?(Float) && value.nan?
2048
2232
 
2049
2233
  value ||= ''
@@ -2054,24 +2238,24 @@ module Writexlsx
2054
2238
  #
2055
2239
  # Write the cell formula <f> element.
2056
2240
  #
2057
- def write_cell_formula(formula = '') #:nodoc:
2241
+ def write_cell_formula(formula = '') # :nodoc:
2058
2242
  @writer.data_element('f', formula)
2059
2243
  end
2060
2244
 
2061
2245
  #
2062
2246
  # Write the cell array formula <f> element.
2063
2247
  #
2064
- def write_cell_array_formula(formula, range) #:nodoc:
2248
+ def write_cell_array_formula(formula, range) # :nodoc:
2065
2249
  @writer.data_element(
2066
2250
  'f', formula,
2067
2251
  [
2068
- ['t', 'array'],
2252
+ %w[t array],
2069
2253
  ['ref', range]
2070
2254
  ]
2071
2255
  )
2072
2256
  end
2073
2257
 
2074
- def date_1904? #:nodoc:
2258
+ def date_1904? # :nodoc:
2075
2259
  @workbook.date_1904?
2076
2260
  end
2077
2261
 
@@ -2083,9 +2267,9 @@ module Writexlsx
2083
2267
  # Convert from an Excel internal colour index to a XML style #RRGGBB index
2084
2268
  # based on the default or user defined values in the Workbook palette.
2085
2269
  #
2086
- def palette_color(index) #:nodoc:
2270
+ def palette_color(index) # :nodoc:
2087
2271
  if index.to_s =~ /^#([0-9A-F]{6})$/i
2088
- "FF#{$1.upcase}"
2272
+ "FF#{::Regexp.last_match(1).upcase}"
2089
2273
  else
2090
2274
  "FF#{super(index)}"
2091
2275
  end
@@ -2125,7 +2309,7 @@ module Writexlsx
2125
2309
  # The VML o:idmap data id contains a comma separated range when there is
2126
2310
  # more than one 1024 block of comments, like this: data="1,2".
2127
2311
  data = "#{vml_data_id}"
2128
- (1 .. num_comments_block).each do |i|
2312
+ (1..num_comments_block).each do |i|
2129
2313
  data += ",#{vml_data_id + i}"
2130
2314
  end
2131
2315
  @vml_data_id = data
@@ -2183,11 +2367,7 @@ module Writexlsx
2183
2367
  # set the vba name for the worksheet
2184
2368
  #
2185
2369
  def set_vba_name(vba_codename = nil)
2186
- if vba_codename
2187
- @vba_codename = vba_codename
2188
- else
2189
- @vba_codename = @name
2190
- end
2370
+ @vba_codename = vba_codename || @name
2191
2371
  end
2192
2372
 
2193
2373
  #
@@ -2195,33 +2375,29 @@ module Writexlsx
2195
2375
  #
2196
2376
  def ignore_errors(ignores)
2197
2377
  # List of valid input parameters.
2198
- valid_parameter_keys = [
2199
- :number_stored_as_text,
2200
- :eval_error,
2201
- :formula_differs,
2202
- :formula_range,
2203
- :formula_unlocked,
2204
- :empty_cell_reference,
2205
- :list_data_validation,
2206
- :calculated_column,
2207
- :two_digit_text_year
2378
+ valid_parameter_keys = %i[
2379
+ number_stored_as_text
2380
+ eval_error
2381
+ formula_differs
2382
+ formula_range
2383
+ formula_unlocked
2384
+ empty_cell_reference
2385
+ list_data_validation
2386
+ calculated_column
2387
+ two_digit_text_year
2208
2388
  ]
2209
2389
 
2210
- unless (ignores.keys - valid_parameter_keys).empty?
2211
- raise "Unknown parameter '#{ignores.key - valid_parameter_keys}' in ignore_errors()."
2212
- end
2390
+ raise "Unknown parameter '#{ignores.key - valid_parameter_keys}' in ignore_errors()." unless (ignores.keys - valid_parameter_keys).empty?
2213
2391
 
2214
2392
  @ignore_errors = ignores
2215
2393
  end
2216
2394
 
2217
- def write_ext(url)
2395
+ def write_ext(url, &block)
2218
2396
  attributes = [
2219
2397
  ['xmlns:x14', "#{OFFICE_URL}spreadsheetml/2009/9/main"],
2220
2398
  ['uri', url]
2221
2399
  ]
2222
- @writer.tag_elements('ext', attributes) do
2223
- yield
2224
- end
2400
+ @writer.tag_elements('ext', attributes, &block)
2225
2401
  end
2226
2402
 
2227
2403
  def write_sparkline_groups
@@ -2279,11 +2455,7 @@ module Writexlsx
2279
2455
 
2280
2456
  def cell_format_of_rich_string(rich_strings)
2281
2457
  # If the last arg is a format we use it as the cell format.
2282
- if rich_strings[-1].respond_to?(:xf_index)
2283
- rich_strings.pop
2284
- else
2285
- nil
2286
- end
2458
+ rich_strings.pop if rich_strings[-1].respond_to?(:xf_index)
2287
2459
  end
2288
2460
 
2289
2461
  #
@@ -2310,12 +2482,12 @@ module Writexlsx
2310
2482
  last = 'format'
2311
2483
  else
2312
2484
  # Token is a string.
2313
- if last != 'format'
2314
- # If previous token wasn't a format add one before the string.
2315
- fragments << default << token
2316
- else
2485
+ if last == 'format'
2317
2486
  # If previous token was a format just add the string.
2318
2487
  fragments << token
2488
+ else
2489
+ # If previous token wasn't a format add one before the string.
2490
+ fragments << default << token
2319
2491
  end
2320
2492
 
2321
2493
  length += token.size # Keep track of actual string length.
@@ -2332,7 +2504,7 @@ module Writexlsx
2332
2504
  writer = Package::XMLWriterSimple.new
2333
2505
 
2334
2506
  # If the first token is a string start the <r> element.
2335
- writer.start_tag('r') if !fragments[0].respond_to?(:xf_index)
2507
+ writer.start_tag('r') unless fragments[0].respond_to?(:xf_index)
2336
2508
 
2337
2509
  # Write the XML elements for the format string fragments.
2338
2510
  fragments.each do |token|
@@ -2354,9 +2526,10 @@ module Writexlsx
2354
2526
 
2355
2527
  # Pad out the rest of the area with formatted blank cells.
2356
2528
  def write_formatted_blank_to_area(row_first, row_last, col_first, col_last, format)
2357
- (row_first .. row_last).each do |row|
2358
- (col_first .. col_last).each do |col|
2529
+ (row_first..row_last).each do |row|
2530
+ (col_first..col_last).each do |col|
2359
2531
  next if row == row_first && col == col_first
2532
+
2360
2533
  write_blank(row, col, format)
2361
2534
  end
2362
2535
  end
@@ -2367,13 +2540,13 @@ module Writexlsx
2367
2540
  # whitespace groups. The only tricky part is to extract string tokens that
2368
2541
  # contain whitespace and/or quoted double quotes (Excel's escaped quotes).
2369
2542
  #
2370
- def extract_filter_tokens(expression = nil) #:nodoc:
2543
+ def extract_filter_tokens(expression = nil) # :nodoc:
2371
2544
  return [] unless expression
2372
2545
 
2373
2546
  tokens = []
2374
2547
  str = expression
2375
2548
  while str =~ /"(?:[^"]|"")*"|\S+/
2376
- tokens << $&
2549
+ tokens << ::Regexp.last_match(0)
2377
2550
  str = $~.post_match
2378
2551
  end
2379
2552
 
@@ -2398,11 +2571,11 @@ module Writexlsx
2398
2571
  # Converts the tokens of a possibly conditional expression into 1 or 2
2399
2572
  # sub expressions for further parsing.
2400
2573
  #
2401
- def parse_filter_expression(expression, tokens) #:nodoc:
2574
+ def parse_filter_expression(expression, tokens) # :nodoc:
2402
2575
  # The number of tokens will be either 3 (for 1 expression)
2403
2576
  # or 7 (for 2 expressions).
2404
2577
  #
2405
- if (tokens.size == 7)
2578
+ if tokens.size == 7
2406
2579
  conditional = tokens[3]
2407
2580
  if conditional =~ /^(and|&&)$/
2408
2581
  conditional = 0
@@ -2410,7 +2583,7 @@ module Writexlsx
2410
2583
  conditional = 1
2411
2584
  else
2412
2585
  raise "Token '#{conditional}' is not a valid conditional " +
2413
- "in filter expression '#{expression}'"
2586
+ "in filter expression '#{expression}'"
2414
2587
  end
2415
2588
  expression_1 = parse_filter_tokens(expression, tokens[0..2])
2416
2589
  expression_2 = parse_filter_tokens(expression, tokens[4..6])
@@ -2423,7 +2596,7 @@ module Writexlsx
2423
2596
  #
2424
2597
  # Parse the 3 tokens of a filter expression and return the operator and token.
2425
2598
  #
2426
- def parse_filter_tokens(expression, tokens) #:nodoc:
2599
+ def parse_filter_tokens(expression, tokens) # :nodoc:
2427
2600
  operators = {
2428
2601
  '==' => 2,
2429
2602
  '=' => 2,
@@ -2438,7 +2611,7 @@ module Writexlsx
2438
2611
  '<' => 1,
2439
2612
  '<=' => 3,
2440
2613
  '>' => 4,
2441
- '>=' => 6,
2614
+ '>=' => 6
2442
2615
  }
2443
2616
 
2444
2617
  operator = operators[tokens[1]]
@@ -2447,40 +2620,38 @@ module Writexlsx
2447
2620
  # Special handling of "Top" filter expressions.
2448
2621
  if tokens[0] =~ /^top|bottom$/i
2449
2622
  value = tokens[1]
2450
- if (value.to_s =~ /\D/ or value.to_i < 1 or value.to_i > 500)
2623
+ if value.to_s =~ /\D/ or value.to_i < 1 or value.to_i > 500
2451
2624
  raise "The value '#{value}' in expression '#{expression}' " +
2452
- "must be in the range 1 to 500"
2625
+ "must be in the range 1 to 500"
2453
2626
  end
2454
2627
  token.downcase!
2455
- if (token != 'items' and token != '%')
2628
+ if token != 'items' and token != '%'
2456
2629
  raise "The type '#{token}' in expression '#{expression}' " +
2457
- "must be either 'items' or '%'"
2630
+ "must be either 'items' or '%'"
2458
2631
  end
2459
2632
 
2460
- if (tokens[0] =~ /^top$/i)
2461
- operator = 30
2462
- else
2463
- operator = 32
2464
- end
2633
+ operator = if tokens[0] =~ /^top$/i
2634
+ 30
2635
+ else
2636
+ 32
2637
+ end
2465
2638
 
2466
- if (tokens[2] == '%')
2467
- operator += 1
2468
- end
2639
+ operator += 1 if tokens[2] == '%'
2469
2640
 
2470
2641
  token = value
2471
2642
  end
2472
2643
 
2473
- if (not operator and tokens[0])
2644
+ if !operator and tokens[0]
2474
2645
  raise "Token '#{tokens[1]}' is not a valid operator " +
2475
- "in filter expression '#{expression}'"
2646
+ "in filter expression '#{expression}'"
2476
2647
  end
2477
2648
 
2478
2649
  # Special handling for Blanks/NonBlanks.
2479
- if (token.to_s =~ /^blanks|nonblanks$/i)
2650
+ if token.to_s =~ /^blanks|nonblanks$/i
2480
2651
  # Only allow Equals or NotEqual in this context.
2481
- if (operator != 2 and operator != 5)
2652
+ if operator != 2 and operator != 5
2482
2653
  raise "The operator '#{tokens[1]}' in expression '#{expression}' " +
2483
- "is not valid in relation to Blanks/NonBlanks'"
2654
+ "is not valid in relation to Blanks/NonBlanks'"
2484
2655
  end
2485
2656
 
2486
2657
  token.downcase!
@@ -2488,25 +2659,19 @@ module Writexlsx
2488
2659
  # The operator should always be 2 (=) to flag a "simple" equality in
2489
2660
  # the binary record. Therefore we convert <> to =.
2490
2661
  if token == 'blanks'
2491
- if operator == 5
2492
- token = ' '
2493
- end
2662
+ token = ' ' if operator == 5
2663
+ elsif operator == 5
2664
+ operator = 2
2665
+ token = 'blanks'
2494
2666
  else
2495
- if operator == 5
2496
- operator = 2
2497
- token = 'blanks'
2498
- else
2499
- operator = 5
2500
- token = ' '
2501
- end
2667
+ operator = 5
2668
+ token = ' '
2502
2669
  end
2503
2670
  end
2504
2671
 
2505
2672
  # if the string token contains an Excel match character then change the
2506
2673
  # operator type to indicate a non "simple" equality.
2507
- if (operator == 2 and token.to_s =~ /[*?]/)
2508
- operator = 22
2509
- end
2674
+ operator = 22 if operator == 2 and token.to_s =~ /[*?]/
2510
2675
 
2511
2676
  [operator, token]
2512
2677
  end
@@ -2518,7 +2683,7 @@ module Writexlsx
2518
2683
  # 2. Sorts the list.
2519
2684
  # 3. Removes 0 from the list if present.
2520
2685
  #
2521
- def sort_pagebreaks(*args) #:nodoc:
2686
+ def sort_pagebreaks(*args) # :nodoc:
2522
2687
  return [] if args.empty?
2523
2688
 
2524
2689
  breaks = args.uniq.sort
@@ -2538,17 +2703,17 @@ module Writexlsx
2538
2703
  # Calculate the vertices that define the position of a graphical object within
2539
2704
  # the worksheet in EMUs.
2540
2705
  #
2541
- def position_object_emus(col_start, row_start, x1, y1, width, height, anchor = nil) #:nodoc:
2706
+ def position_object_emus(col_start, row_start, x1, y1, width, height, anchor = nil) # :nodoc:
2542
2707
  col_start, row_start, x1, y1, col_end, row_end, x2, y2, x_abs, y_abs =
2543
2708
  position_object_pixels(col_start, row_start, x1, y1, width, height, anchor)
2544
2709
 
2545
2710
  # Convert the pixel values to EMUs. See above.
2546
- x1 = (0.5 + 9_525 * x1).to_i
2547
- y1 = (0.5 + 9_525 * y1).to_i
2548
- x2 = (0.5 + 9_525 * x2).to_i
2549
- y2 = (0.5 + 9_525 * y2).to_i
2550
- x_abs = (0.5 + 9_525 * x_abs).to_i
2551
- y_abs = (0.5 + 9_525 * y_abs).to_i
2711
+ x1 = (0.5 + (9_525 * x1)).to_i
2712
+ y1 = (0.5 + (9_525 * y1)).to_i
2713
+ x2 = (0.5 + (9_525 * x2)).to_i
2714
+ y2 = (0.5 + (9_525 * y2)).to_i
2715
+ x_abs = (0.5 + (9_525 * x_abs)).to_i
2716
+ y_abs = (0.5 + (9_525 * y_abs)).to_i
2552
2717
 
2553
2718
  [col_start, row_start, x1, y1, col_end, row_end, x2, y2, x_abs, y_abs]
2554
2719
  end
@@ -2559,19 +2724,19 @@ module Writexlsx
2559
2724
  # we use the default value. A hidden column is treated as having a width of
2560
2725
  # zero unless it has the special "object_position" of 4 (size with cells).
2561
2726
  #
2562
- def size_col(col, anchor = 0) #:nodoc:
2727
+ def size_col(col, anchor = 0) # :nodoc:
2563
2728
  # Look up the cell value to see if it has been changed.
2564
2729
  if @col_sizes[col]
2565
2730
  width, hidden = @col_sizes[col]
2566
2731
 
2567
2732
  # Convert to pixels.
2568
- if hidden == 1 && anchor != 4
2569
- pixels = 0
2570
- elsif width < 1
2571
- pixels = (width * (MAX_DIGIT_WIDTH + PADDING) + 0.5).to_i
2572
- else
2573
- pixels = (width * MAX_DIGIT_WIDTH + 0.5).to_i + PADDING
2574
- end
2733
+ pixels = if hidden == 1 && anchor != 4
2734
+ 0
2735
+ elsif width < 1
2736
+ ((width * (MAX_DIGIT_WIDTH + PADDING)) + 0.5).to_i
2737
+ else
2738
+ ((width * MAX_DIGIT_WIDTH) + 0.5).to_i + PADDING
2739
+ end
2575
2740
  else
2576
2741
  pixels = @default_col_pixels
2577
2742
  end
@@ -2584,16 +2749,16 @@ module Writexlsx
2584
2749
  # treated as having a height of zero unless it has the special
2585
2750
  # "object_position" of 4 (size with cells).
2586
2751
  #
2587
- def size_row(row, anchor = 0) #:nodoc:
2752
+ def size_row(row, anchor = 0) # :nodoc:
2588
2753
  # Look up the cell value to see if it has been changed
2589
2754
  if @row_sizes[row]
2590
2755
  height, hidden = @row_sizes[row]
2591
2756
 
2592
- if hidden == 1 && anchor != 4
2593
- pixels = 0
2594
- else
2595
- pixels = (4 / 3.0 * height).to_i
2596
- end
2757
+ pixels = if hidden == 1 && anchor != 4
2758
+ 0
2759
+ else
2760
+ (4 / 3.0 * height).to_i
2761
+ end
2597
2762
  else
2598
2763
  pixels = (4 / 3.0 * @default_row_height).to_i
2599
2764
  end
@@ -2608,12 +2773,10 @@ module Writexlsx
2608
2773
  padding = 5.0
2609
2774
 
2610
2775
  if pixels <= 12
2611
- width = pixels / (max_digit_width + padding)
2776
+ pixels / (max_digit_width + padding)
2612
2777
  else
2613
- width = (pixels - padding) / max_digit_width
2778
+ (pixels - padding) / max_digit_width
2614
2779
  end
2615
-
2616
- width
2617
2780
  end
2618
2781
 
2619
2782
  #
@@ -2621,19 +2784,19 @@ module Writexlsx
2621
2784
  #
2622
2785
  def pixels_to_height(pixels)
2623
2786
  height = 0.75 * pixels
2624
- height = height.to_i if ( height - height.to_i).abs < 0.1
2787
+ height = height.to_i if (height - height.to_i).abs < 0.1
2625
2788
  height
2626
2789
  end
2627
2790
 
2628
2791
  #
2629
2792
  # Set up image/drawings.
2630
2793
  #
2631
- def prepare_image(index, image_id, drawing_id, width, height, name, image_type, x_dpi = 96, y_dpi = 96, md5 = nil) #:nodoc:
2794
+ def prepare_image(index, image_id, drawing_id, width, height, name, image_type, x_dpi = 96, y_dpi = 96, md5 = nil) # :nodoc:
2632
2795
  x_dpi ||= 96
2633
2796
  y_dpi ||= 96
2634
2797
  drawing_type = 2
2635
2798
 
2636
- row, col, image, x_offset, y_offset,
2799
+ row, col, _image, x_offset, y_offset,
2637
2800
  x_scale, y_scale, url, tip, anchor, description, decorative = @images[index]
2638
2801
 
2639
2802
  width *= x_scale
@@ -2649,29 +2812,25 @@ module Writexlsx
2649
2812
  height = (0.5 + (height * 9_525)).to_i
2650
2813
 
2651
2814
  # Create a Drawing object to use with worksheet unless one already exists.
2652
- drawing = Drawing.new(drawing_type, dimensions, width, height, name, nil, anchor, 0, 0, tip, decorative)
2653
- if !drawings?
2815
+ drawing = Drawing.new(drawing_type, dimensions, width, height, nil, anchor, 0, 0, tip, name, description, decorative)
2816
+ if drawings?
2817
+ drawings = @drawings
2818
+ else
2654
2819
  drawings = Drawings.new
2655
2820
  drawings.embedded = 1
2656
2821
 
2657
2822
  @drawings = drawings
2658
2823
 
2659
2824
  @external_drawing_links << ['/drawing', "../drawings/drawing#{drawing_id}.xml"]
2660
- else
2661
- drawings = @drawings
2662
2825
  end
2663
2826
  drawings.add_drawing_object(drawing)
2664
2827
 
2665
- if description
2666
- drawing.description = description
2667
- end
2828
+ drawing.description = name unless description
2668
2829
 
2669
2830
  if url
2670
2831
  rel_type = '/hyperlink'
2671
2832
  target_mode = 'External'
2672
- if url =~ %r!^[fh]tt?ps?://! || url =~ /^mailto:/
2673
- target = escape_url(url)
2674
- end
2833
+ target = escape_url(url) if url =~ %r{^[fh]tt?ps?://} || url =~ /^mailto:/
2675
2834
  if url =~ /^external:/
2676
2835
  target = escape_url(url.sub(/^external:/, ''))
2677
2836
 
@@ -2679,11 +2838,11 @@ module Writexlsx
2679
2838
  target = target.gsub(/#/, '%23')
2680
2839
 
2681
2840
  # Prefix absolute paths (not relative) with file:///
2682
- if target =~ /^\w:/ || target =~ /^\\\\/
2683
- target = "file:///#{target}"
2684
- else
2685
- target = target.gsub(/\\/, '/')
2686
- end
2841
+ target = if target =~ /^\w:/ || target =~ /^\\\\/
2842
+ "file:///#{target}"
2843
+ else
2844
+ target.gsub(/\\/, '/')
2845
+ end
2687
2846
  end
2688
2847
 
2689
2848
  if url =~ /^internal:/
@@ -2697,15 +2856,11 @@ Ignoring URL #{target} where link or anchor > 255 characters since it exceeds Ex
2697
2856
  EOS
2698
2857
  end
2699
2858
 
2700
- if target && !@drawing_rels[url]
2701
- @drawing_links << [rel_type, target, target_mode]
2702
- end
2859
+ @drawing_links << [rel_type, target, target_mode] if target && !@drawing_rels[url]
2703
2860
  drawing.url_rel_index = drawing_rel_index(url)
2704
2861
  end
2705
2862
 
2706
- if !@drawing_rels[md5]
2707
- @drawing_links << ['/image', "../media/image#{image_id}.#{image_type}"]
2708
- end
2863
+ @drawing_links << ['/image', "../media/image#{image_id}.#{image_type}"] unless @drawing_rels[md5]
2709
2864
  drawing.rel_index = drawing_rel_index(md5)
2710
2865
  end
2711
2866
  public :prepare_image
@@ -2713,11 +2868,9 @@ EOS
2713
2868
  def prepare_header_image(image_id, width, height, name, image_type, position, x_dpi, y_dpi, md5)
2714
2869
  # Strip the extension from the filename.
2715
2870
  body = name.dup
2716
- body[/\.[^\.]+$/, 0] = ''
2871
+ body[/\.[^.]+$/, 0] = ''
2717
2872
 
2718
- if !@vml_drawing_rels[md5]
2719
- @vml_drawing_links << ['/image', "../media/image#{image_id}.#{image_type}" ]
2720
- end
2873
+ @vml_drawing_links << ['/image', "../media/image#{image_id}.#{image_type}"] unless @vml_drawing_rels[md5]
2721
2874
 
2722
2875
  ref_id = get_vml_drawing_rel_index(md5)
2723
2876
  @header_images_array << [width, height, body, position, x_dpi, y_dpi, ref_id]
@@ -2745,7 +2898,7 @@ EOS
2745
2898
 
2746
2899
  #
2747
2900
  # :call-seq:
2748
- # insert_shape(row, col, shape [ , x, y, x_scale, y_scale ] )
2901
+ # insert_shape(row, col, shape [ , x, y, x_scale, y_scale ])
2749
2902
  #
2750
2903
  # Insert a shape into the worksheet.
2751
2904
  #
@@ -2753,9 +2906,7 @@ EOS
2753
2906
  # Check for a cell reference in A1 notation and substitute row and column.
2754
2907
  row_start, column_start, shape, x_offset, y_offset, x_scale, y_scale, anchor =
2755
2908
  row_col_notation(args)
2756
- if [row_start, column_start, shape].include?(nil)
2757
- raise "Insufficient arguments in insert_shape()"
2758
- end
2909
+ raise "Insufficient arguments in insert_shape()" if [row_start, column_start, shape].include?(nil)
2759
2910
 
2760
2911
  shape.set_position(
2761
2912
  row_start, column_start, x_offset, y_offset,
@@ -2778,14 +2929,14 @@ EOS
2778
2929
  # Allow lookup of entry into shape array by shape ID.
2779
2930
  @shape_hash[shape.id] = shape.element = @shapes.size
2780
2931
 
2781
- if ptrue?(shape.stencil)
2782
- # Insert a copy of the shape, not a reference so that the shape is
2783
- # used as a stencil. Previously stamped copies don't get modified
2784
- # if the stencil is modified.
2785
- insert = shape.dup
2786
- else
2787
- insert = shape
2788
- end
2932
+ insert = if ptrue?(shape.stencil)
2933
+ # Insert a copy of the shape, not a reference so that the shape is
2934
+ # used as a stencil. Previously stamped copies don't get modified
2935
+ # if the stencil is modified.
2936
+ shape.dup
2937
+ else
2938
+ shape
2939
+ end
2789
2940
 
2790
2941
  # For connectors change x/y coords based on location of connected shapes.
2791
2942
  insert.auto_locate_connectors(@shapes, @shape_hash)
@@ -2818,7 +2969,7 @@ EOS
2818
2969
  drawing_type = 3
2819
2970
  drawing = Drawing.new(
2820
2971
  drawing_type, shape.dimensions, shape.width_emu, shape.height_emu,
2821
- shape.name, shape, shape.anchor, drawing_rel_index, 0, nil, 0
2972
+ shape, shape.anchor, drawing_rel_index, 0, shape.name, nil, 0
2822
2973
  )
2823
2974
  drawings.add_drawing_object(drawing)
2824
2975
  end
@@ -2839,29 +2990,28 @@ EOS
2839
2990
  button.font = { :_caption => caption }
2840
2991
 
2841
2992
  # Set the macro name.
2842
- if params[:macro]
2843
- button.macro = "[0]!#{params[:macro]}"
2844
- else
2845
- button.macro = "[0]!Button#{button_number}_Click"
2846
- end
2993
+ button.macro = if params[:macro]
2994
+ "[0]!#{params[:macro]}"
2995
+ else
2996
+ "[0]!Button#{button_number}_Click"
2997
+ end
2998
+
2999
+ # Set the alt text for the button.
3000
+ button.description = params[:description]
2847
3001
 
2848
3002
  # Ensure that a width and height have been set.
2849
3003
  default_width = @default_col_pixels
2850
3004
  default_height = @default_row_pixels
2851
- params[:width] = default_width if !params[:width]
2852
- params[:height] = default_height if !params[:height]
3005
+ params[:width] = default_width unless params[:width]
3006
+ params[:height] = default_height unless params[:height]
2853
3007
 
2854
3008
  # Set the x/y offsets.
2855
- params[:x_offset] = 0 if !params[:x_offset]
2856
- params[:y_offset] = 0 if !params[:y_offset]
3009
+ params[:x_offset] = 0 unless params[:x_offset]
3010
+ params[:y_offset] = 0 unless params[:y_offset]
2857
3011
 
2858
3012
  # Scale the size of the button box if required.
2859
- if params[:x_scale]
2860
- params[:width] = params[:width] * params[:x_scale]
2861
- end
2862
- if params[:y_scale]
2863
- params[:height] = params[:height] * params[:y_scale]
2864
- end
3013
+ params[:width] = params[:width] * params[:x_scale] if params[:x_scale]
3014
+ params[:height] = params[:height] * params[:y_scale] if params[:y_scale]
2865
3015
 
2866
3016
  # Round the dimensions to the nearest pixel.
2867
3017
  params[:width] = (0.5 + params[:width]).to_i
@@ -2891,7 +3041,7 @@ EOS
2891
3041
  #
2892
3042
  # Based on the algorithm provided by Daniel Rentz of OpenOffice.
2893
3043
  #
2894
- def encode_password(password) #:nodoc:
3044
+ def encode_password(password) # :nodoc:
2895
3045
  i = 0
2896
3046
  chars = password.split(//)
2897
3047
  count = chars.size
@@ -2900,12 +3050,12 @@ EOS
2900
3050
  i += 1
2901
3051
  char = char.ord << i
2902
3052
  low_15 = char & 0x7fff
2903
- high_15 = char & 0x7fff << 15
3053
+ high_15 = char & (0x7fff << 15)
2904
3054
  high_15 = high_15 >> 15
2905
3055
  char = low_15 | high_15
2906
3056
  end
2907
3057
 
2908
- encoded_password = 0x0000
3058
+ encoded_password = 0x0000
2909
3059
  chars.each { |c| encoded_password ^= c }
2910
3060
  encoded_password ^= count
2911
3061
  encoded_password ^= 0xCE4B
@@ -2916,7 +3066,7 @@ EOS
2916
3066
  #
2917
3067
  # Write the <worksheet> element. This is the root element of Worksheet.
2918
3068
  #
2919
- def write_worksheet_attributes #:nodoc:
3069
+ def write_worksheet_attributes # :nodoc:
2920
3070
  schema = 'http://schemas.openxmlformats.org/'
2921
3071
  attributes = [
2922
3072
  ['xmlns', "#{schema}spreadsheetml/2006/main"],
@@ -2934,7 +3084,7 @@ EOS
2934
3084
  #
2935
3085
  # Write the <sheetPr> element for Sheet level properties.
2936
3086
  #
2937
- def write_sheet_pr #:nodoc:
3087
+ def write_sheet_pr # :nodoc:
2938
3088
  return unless tab_outline_fit? || vba_codename? || filter_on?
2939
3089
 
2940
3090
  attributes = []
@@ -2959,14 +3109,14 @@ EOS
2959
3109
  #
2960
3110
  # Write the <pageSetUpPr> element.
2961
3111
  #
2962
- def write_page_set_up_pr #:nodoc:
2963
- @writer.empty_tag('pageSetUpPr', [ ['fitToPage', 1] ]) if fit_page?
3112
+ def write_page_set_up_pr # :nodoc:
3113
+ @writer.empty_tag('pageSetUpPr', [['fitToPage', 1]]) if fit_page?
2964
3114
  end
2965
3115
 
2966
3116
  # Write the <dimension> element. This specifies the range of cells in the
2967
3117
  # worksheet. As a special case, empty spreadsheets use 'A1' as a range.
2968
3118
  #
2969
- def write_dimension #:nodoc:
3119
+ def write_dimension # :nodoc:
2970
3120
  if !@dim_rowmin && !@dim_colmin
2971
3121
  # If the min dims are undefined then no dimensions have been set
2972
3122
  # and we use the default 'A1'.
@@ -2992,16 +3142,17 @@ EOS
2992
3142
  cell_2 = xl_rowcol_to_cell(@dim_rowmax, @dim_colmax)
2993
3143
  ref = cell_1 + ':' + cell_2
2994
3144
  end
2995
- @writer.empty_tag('dimension', [ ['ref', ref] ])
3145
+ @writer.empty_tag('dimension', [['ref', ref]])
2996
3146
  end
3147
+
2997
3148
  #
2998
3149
  # Write the <sheetViews> element.
2999
3150
  #
3000
- def write_sheet_views #:nodoc:
3151
+ def write_sheet_views # :nodoc:
3001
3152
  @writer.tag_elements('sheetViews', []) { write_sheet_view }
3002
3153
  end
3003
3154
 
3004
- def write_sheet_view #:nodoc:
3155
+ def write_sheet_view # :nodoc:
3005
3156
  attributes = []
3006
3157
  # Hide screen gridlines if required.
3007
3158
  attributes << ['showGridLines', 0] unless @screen_gridlines
@@ -3023,7 +3174,10 @@ EOS
3023
3174
 
3024
3175
  # Set the page view/layout mode if required.
3025
3176
  # TODO. Add pageBreakPreview mode when requested.
3026
- attributes << ['view', 'pageLayout'] if page_view?
3177
+ attributes << %w[view pageLayout] if page_view?
3178
+
3179
+ # Set the first visible cell.
3180
+ attributes << ['topLeftCell', @top_left_cell] if ptrue?(@top_left_cell)
3027
3181
 
3028
3182
  # Set the zoom level.
3029
3183
  if @zoom != 100
@@ -3046,14 +3200,14 @@ EOS
3046
3200
  #
3047
3201
  # Write the <selection> elements.
3048
3202
  #
3049
- def write_selections #:nodoc:
3203
+ def write_selections # :nodoc:
3050
3204
  @selections.each { |selection| write_selection(*selection) }
3051
3205
  end
3052
3206
 
3053
3207
  #
3054
3208
  # Write the <selection> element.
3055
3209
  #
3056
- def write_selection(pane, active_cell, sqref) #:nodoc:
3210
+ def write_selection(pane, active_cell, sqref) # :nodoc:
3057
3211
  attributes = []
3058
3212
  attributes << ['pane', pane] if pane
3059
3213
  attributes << ['activeCell', active_cell] if active_cell
@@ -3065,44 +3219,36 @@ EOS
3065
3219
  #
3066
3220
  # Write the <sheetFormatPr> element.
3067
3221
  #
3068
- def write_sheet_format_pr #:nodoc:
3069
- base_col_width = 10
3070
-
3222
+ def write_sheet_format_pr # :nodoc:
3071
3223
  attributes = [
3072
3224
  ['defaultRowHeight', @default_row_height]
3073
3225
  ]
3074
- if @default_row_height != @original_row_height
3075
- attributes << ['customHeight', 1]
3076
- end
3226
+ attributes << ['customHeight', 1] if @default_row_height != @original_row_height
3077
3227
 
3078
- if ptrue?(@default_row_zeroed)
3079
- attributes << ['zeroHeight', 1]
3080
- end
3228
+ attributes << ['zeroHeight', 1] if ptrue?(@default_row_zeroed)
3081
3229
 
3082
3230
  attributes << ['outlineLevelRow', @outline_row_level] if @outline_row_level > 0
3083
3231
  attributes << ['outlineLevelCol', @outline_col_level] if @outline_col_level > 0
3084
- if @excel_version == 2010
3085
- attributes << ['x14ac:dyDescent', '0.25']
3086
- end
3232
+ attributes << ['x14ac:dyDescent', '0.25'] if @excel_version == 2010
3087
3233
  @writer.empty_tag('sheetFormatPr', attributes)
3088
3234
  end
3089
3235
 
3090
3236
  #
3091
3237
  # Write the <cols> element and <col> sub elements.
3092
3238
  #
3093
- def write_cols #:nodoc:
3239
+ def write_cols # :nodoc:
3094
3240
  # Exit unless some column have been formatted.
3095
3241
  return if @colinfo.empty?
3096
3242
 
3097
3243
  @writer.tag_elements('cols') do
3098
- @colinfo.keys.sort.each {|col| write_col_info(@colinfo[col]) }
3244
+ @colinfo.keys.sort.each { |col| write_col_info(@colinfo[col]) }
3099
3245
  end
3100
3246
  end
3101
3247
 
3102
3248
  #
3103
3249
  # Write the <col> element.
3104
3250
  #
3105
- def write_col_info(args) #:nodoc:
3251
+ def write_col_info(args) # :nodoc:
3106
3252
  @writer.empty_tag('col', col_info_attributes(args))
3107
3253
  end
3108
3254
 
@@ -3120,16 +3266,14 @@ EOS
3120
3266
  custom_width = false if width.nil? && hidden == 0
3121
3267
  custom_width = false if width == 8.43
3122
3268
 
3123
- width = hidden == 0 ? @default_col_width : 0 unless width
3269
+ width ||= hidden == 0 ? @default_col_width : 0
3124
3270
 
3125
3271
  # Convert column width from user units to character width.
3126
- if width && width < 1
3127
- width =
3128
- ((width * (MAX_DIGIT_WIDTH + PADDING) + 0.5).to_i / MAX_DIGIT_WIDTH.to_f * 256).to_i / 256.0
3129
- else
3130
- width =
3131
- (((width * MAX_DIGIT_WIDTH + 0.5).to_i + PADDING).to_i/ MAX_DIGIT_WIDTH.to_f * 256).to_i / 256.0
3132
- end
3272
+ width = if width && width < 1
3273
+ (((width * (MAX_DIGIT_WIDTH + PADDING)) + 0.5).to_i / MAX_DIGIT_WIDTH.to_f * 256).to_i / 256.0
3274
+ else
3275
+ ((((width * MAX_DIGIT_WIDTH) + 0.5).to_i + PADDING).to_i / MAX_DIGIT_WIDTH.to_f * 256).to_i / 256.0
3276
+ end
3133
3277
  width = width.to_i if width - width.to_i == 0
3134
3278
 
3135
3279
  attributes = [
@@ -3149,22 +3293,22 @@ EOS
3149
3293
  #
3150
3294
  # Write the <sheetData> element.
3151
3295
  #
3152
- def write_sheet_data #:nodoc:
3153
- if !@dim_rowmin
3296
+ def write_sheet_data # :nodoc:
3297
+ if @dim_rowmin
3298
+ @writer.tag_elements('sheetData') { write_rows }
3299
+ else
3154
3300
  # If the dimensions aren't defined then there is no data to write.
3155
3301
  @writer.empty_tag('sheetData')
3156
- else
3157
- @writer.tag_elements('sheetData') { write_rows }
3158
3302
  end
3159
3303
  end
3160
3304
 
3161
3305
  #
3162
3306
  # Write out the worksheet data as a series of rows and cells.
3163
3307
  #
3164
- def write_rows #:nodoc:
3308
+ def write_rows # :nodoc:
3165
3309
  calculate_spans
3166
3310
 
3167
- (@dim_rowmin .. @dim_rowmax).each do |row_num|
3311
+ (@dim_rowmin..@dim_rowmax).each do |row_num|
3168
3312
  # Skip row if it doesn't contain row formatting or cell data.
3169
3313
  next if not_contain_formatting_or_data?(row_num)
3170
3314
 
@@ -3177,8 +3321,6 @@ EOS
3177
3321
  write_row_element(row_num, span, *args) do
3178
3322
  write_cell_column_dimension(row_num)
3179
3323
  end
3180
- elsif @comments[row_num]
3181
- write_empty_row(row_num, span, *(@set_rows[row_num]))
3182
3324
  else
3183
3325
  # Row attributes only.
3184
3326
  write_empty_row(row_num, span, *(@set_rows[row_num]))
@@ -3191,29 +3333,27 @@ EOS
3191
3333
  end
3192
3334
 
3193
3335
  def write_cell_column_dimension(row_num) # :nodoc:
3194
- (@dim_colmin .. @dim_colmax).each do |col_num|
3195
- @cell_data_table[row_num][col_num].write_cell if @cell_data_table[row_num][col_num]
3336
+ (@dim_colmin..@dim_colmax).each do |col_num|
3337
+ @cell_data_table[row_num][col_num].write_cell(self, row_num, col_num) if @cell_data_table[row_num][col_num]
3196
3338
  end
3197
3339
  end
3198
3340
 
3199
3341
  #
3200
3342
  # Write the <row> element.
3201
3343
  #
3202
- def write_row_element(*args) # :nodoc:
3203
- @writer.tag_elements('row', row_attributes(args)) do
3204
- yield
3205
- end
3344
+ def write_row_element(*args, &block) # :nodoc:
3345
+ @writer.tag_elements('row', row_attributes(args), &block)
3206
3346
  end
3207
3347
 
3208
3348
  #
3209
3349
  # Write and empty <row> element, i.e., attributes only, no cell data.
3210
3350
  #
3211
- def write_empty_row(*args) #:nodoc:
3351
+ def write_empty_row(*args) # :nodoc:
3212
3352
  @writer.empty_tag('row', row_attributes(args))
3213
3353
  end
3214
3354
 
3215
3355
  def row_attributes(args)
3216
- r, spans, height, format, hidden, level, collapsed, empty_row = args
3356
+ r, spans, height, format, hidden, level, collapsed, _empty_row = args
3217
3357
  height ||= @default_row_height
3218
3358
  hidden ||= 0
3219
3359
  level ||= 0
@@ -3230,36 +3370,34 @@ EOS
3230
3370
  attributes << ['outlineLevel', level] if ptrue?(level)
3231
3371
  attributes << ['collapsed', 1] if ptrue?(collapsed)
3232
3372
 
3233
- if @excel_version == 2010
3234
- attributes << ['x14ac:dyDescent', '0.25']
3235
- end
3373
+ attributes << ['x14ac:dyDescent', '0.25'] if @excel_version == 2010
3236
3374
  attributes
3237
3375
  end
3238
3376
 
3239
3377
  #
3240
3378
  # Write the frozen or split <pane> elements.
3241
3379
  #
3242
- def write_panes #:nodoc:
3380
+ def write_panes # :nodoc:
3243
3381
  return if @panes.empty?
3244
3382
 
3245
3383
  if @panes[4] == 2
3246
3384
  write_split_panes
3247
3385
  else
3248
- write_freeze_panes(*(@panes))
3386
+ write_freeze_panes(*@panes)
3249
3387
  end
3250
3388
  end
3251
3389
 
3252
3390
  #
3253
3391
  # Write the <pane> element for freeze panes.
3254
3392
  #
3255
- def write_freeze_panes(row, col, top_row, left_col, type) #:nodoc:
3393
+ def write_freeze_panes(row, col, top_row, left_col, type) # :nodoc:
3256
3394
  y_split = row
3257
3395
  x_split = col
3258
3396
  top_left_cell = xl_rowcol_to_cell(top_row, left_col)
3259
3397
 
3260
3398
  # Move user cell selection to the panes.
3261
3399
  unless @selections.empty?
3262
- dummy, active_cell, sqref = @selections[0]
3400
+ _dummy, active_cell, sqref = @selections[0]
3263
3401
  @selections = []
3264
3402
  end
3265
3403
 
@@ -3268,13 +3406,13 @@ EOS
3268
3406
  active_pane = set_active_pane_and_cell_selections(row, col, row, col, active_cell, sqref)
3269
3407
 
3270
3408
  # Set the pane type.
3271
- if type == 0
3272
- state = 'frozen'
3273
- elsif type == 1
3274
- state = 'frozenSplit'
3275
- else
3276
- state = 'split'
3277
- end
3409
+ state = if type == 0
3410
+ 'frozen'
3411
+ elsif type == 1
3412
+ 'frozenSplit'
3413
+ else
3414
+ 'split'
3415
+ end
3278
3416
 
3279
3417
  attributes = []
3280
3418
  attributes << ['xSplit', x_split] if x_split > 0
@@ -3291,35 +3429,35 @@ EOS
3291
3429
  #
3292
3430
  # See also, implementers note for split_panes().
3293
3431
  #
3294
- def write_split_panes #:nodoc:
3432
+ def write_split_panes # :nodoc:
3295
3433
  row, col, top_row, left_col = @panes
3296
3434
  has_selection = false
3297
3435
  y_split = row
3298
3436
  x_split = col
3299
3437
 
3300
3438
  # Move user cell selection to the panes.
3301
- if !@selections.empty?
3302
- dummy, active_cell, sqref = @selections[0]
3439
+ unless @selections.empty?
3440
+ _dummy, active_cell, sqref = @selections[0]
3303
3441
  @selections = []
3304
3442
  has_selection = true
3305
3443
  end
3306
3444
 
3307
3445
  # Convert the row and col to 1/20 twip units with padding.
3308
- y_split = (20 * y_split + 300).to_i if y_split > 0
3446
+ y_split = ((20 * y_split) + 300).to_i if y_split > 0
3309
3447
  x_split = calculate_x_split_width(x_split) if x_split > 0
3310
3448
 
3311
3449
  # For non-explicit topLeft definitions, estimate the cell offset based
3312
3450
  # on the pixels dimensions. This is only a workaround and doesn't take
3313
3451
  # adjusted cell dimensions into account.
3314
3452
  if top_row == row && left_col == col
3315
- top_row = (0.5 + (y_split - 300) / 20 / 15).to_i
3316
- left_col = (0.5 + (x_split - 390) / 20 / 3 * 4 / 64).to_i
3453
+ top_row = (0.5 + ((y_split - 300) / 20 / 15)).to_i
3454
+ left_col = (0.5 + ((x_split - 390) / 20 / 3 * 4 / 64)).to_i
3317
3455
  end
3318
3456
 
3319
3457
  top_left_cell = xl_rowcol_to_cell(top_row, left_col)
3320
3458
 
3321
3459
  # If there is no selection set the active cell to the top left cell.
3322
- if !has_selection
3460
+ unless has_selection
3323
3461
  active_cell = top_left_cell
3324
3462
  sqref = top_left_cell
3325
3463
  end
@@ -3339,13 +3477,13 @@ EOS
3339
3477
  #
3340
3478
  # Convert column width from user units to pane split width.
3341
3479
  #
3342
- def calculate_x_split_width(width) #:nodoc:
3480
+ def calculate_x_split_width(width) # :nodoc:
3343
3481
  # Convert to pixels.
3344
- if width < 1
3345
- pixels = int(width * 12 + 0.5)
3346
- else
3347
- pixels = (width * MAX_DIGIT_WIDTH + 0.5).to_i + PADDING
3348
- end
3482
+ pixels = if width < 1
3483
+ int((width * 12) + 0.5)
3484
+ else
3485
+ ((width * MAX_DIGIT_WIDTH) + 0.5).to_i + PADDING
3486
+ end
3349
3487
 
3350
3488
  # Convert to points.
3351
3489
  points = pixels * 3 / 4
@@ -3360,17 +3498,17 @@ EOS
3360
3498
  #
3361
3499
  # Write the <sheetCalcPr> element for the worksheet calculation properties.
3362
3500
  #
3363
- def write_sheet_calc_pr #:nodoc:
3364
- @writer.empty_tag('sheetCalcPr', [ ['fullCalcOnLoad', 1] ])
3501
+ def write_sheet_calc_pr # :nodoc:
3502
+ @writer.empty_tag('sheetCalcPr', [['fullCalcOnLoad', 1]])
3365
3503
  end
3366
3504
 
3367
3505
  #
3368
3506
  # Write the <phoneticPr> element.
3369
3507
  #
3370
- def write_phonetic_pr #:nodoc:
3508
+ def write_phonetic_pr # :nodoc:
3371
3509
  attributes = [
3372
3510
  ['fontId', 0],
3373
- ['type', 'noConversion']
3511
+ %w[type noConversion]
3374
3512
  ]
3375
3513
 
3376
3514
  @writer.empty_tag('phoneticPr', attributes)
@@ -3379,82 +3517,80 @@ EOS
3379
3517
  #
3380
3518
  # Write the <pageMargins> element.
3381
3519
  #
3382
- def write_page_margins #:nodoc:
3520
+ def write_page_margins # :nodoc:
3383
3521
  @page_setup.write_page_margins(@writer)
3384
3522
  end
3385
3523
 
3386
3524
  #
3387
3525
  # Write the <pageSetup> element.
3388
3526
  #
3389
- def write_page_setup #:nodoc:
3527
+ def write_page_setup # :nodoc:
3390
3528
  @page_setup.write_page_setup(@writer)
3391
3529
  end
3392
3530
 
3393
3531
  #
3394
3532
  # Write the <mergeCells> element.
3395
3533
  #
3396
- def write_merge_cells #:nodoc:
3534
+ def write_merge_cells # :nodoc:
3397
3535
  write_some_elements('mergeCells', @merge) do
3398
3536
  @merge.each { |merged_range| write_merge_cell(merged_range) }
3399
3537
  end
3400
3538
  end
3401
3539
 
3402
- def write_some_elements(tag, container)
3540
+ def write_some_elements(tag, container, &block)
3403
3541
  return if container.empty?
3404
3542
 
3405
- @writer.tag_elements(tag, [ ['count', container.size] ]) do
3406
- yield
3407
- end
3543
+ @writer.tag_elements(tag, [['count', container.size]], &block)
3408
3544
  end
3409
3545
 
3410
3546
  #
3411
3547
  # Write the <mergeCell> element.
3412
3548
  #
3413
- def write_merge_cell(merged_range) #:nodoc:
3549
+ def write_merge_cell(merged_range) # :nodoc:
3414
3550
  row_min, col_min, row_max, col_max = merged_range
3415
3551
 
3416
3552
  # Convert the merge dimensions to a cell range.
3417
3553
  cell_1 = xl_rowcol_to_cell(row_min, col_min)
3418
3554
  cell_2 = xl_rowcol_to_cell(row_max, col_max)
3419
3555
 
3420
- @writer.empty_tag('mergeCell', [ ['ref', "#{cell_1}:#{cell_2}"] ])
3556
+ @writer.empty_tag('mergeCell', [['ref', "#{cell_1}:#{cell_2}"]])
3421
3557
  end
3422
3558
 
3423
3559
  #
3424
3560
  # Write the <printOptions> element.
3425
3561
  #
3426
- def write_print_options #:nodoc:
3562
+ def write_print_options # :nodoc:
3427
3563
  @page_setup.write_print_options(@writer)
3428
3564
  end
3429
3565
 
3430
3566
  #
3431
3567
  # Write the <headerFooter> element.
3432
3568
  #
3433
- def write_header_footer #:nodoc:
3569
+ def write_header_footer # :nodoc:
3434
3570
  @page_setup.write_header_footer(@writer, excel2003_style?)
3435
3571
  end
3436
3572
 
3437
3573
  #
3438
3574
  # Write the <rowBreaks> element.
3439
3575
  #
3440
- def write_row_breaks #:nodoc:
3576
+ def write_row_breaks # :nodoc:
3441
3577
  write_breaks('rowBreaks')
3442
3578
  end
3443
3579
 
3444
3580
  #
3445
3581
  # Write the <colBreaks> element.
3446
3582
  #
3447
- def write_col_breaks #:nodoc:
3583
+ def write_col_breaks # :nodoc:
3448
3584
  write_breaks('colBreaks')
3449
3585
  end
3450
3586
 
3451
3587
  def write_breaks(tag) # :nodoc:
3452
3588
  case tag
3453
3589
  when 'rowBreaks'
3454
- page_breaks = sort_pagebreaks(*(@page_setup.hbreaks))
3590
+ page_breaks = sort_pagebreaks(*@page_setup.hbreaks)
3455
3591
  max = 16383
3456
3592
  when 'colBreaks'
3457
- page_breaks = sort_pagebreaks(*(@page_setup.vbreaks))
3593
+ page_breaks = sort_pagebreaks(*@page_setup.vbreaks)
3458
3594
  max = 1048575
3459
3595
  else
3460
3596
  raise "Invalid parameter '#{tag}' in write_breaks."
@@ -3472,10 +3608,11 @@ EOS
3472
3608
  page_breaks.each { |num| write_brk(num, max) }
3473
3609
  end
3474
3610
  end
3611
+
3475
3612
  #
3476
3613
  # Write the <brk> element.
3477
3614
  #
3478
- def write_brk(id, max) #:nodoc:
3615
+ def write_brk(id, max) # :nodoc:
3479
3616
  attributes = [
3480
3617
  ['id', id],
3481
3618
  ['max', max],
@@ -3488,7 +3625,7 @@ EOS
3488
3625
  #
3489
3626
  # Write the <autoFilter> element.
3490
3627
  #
3491
- def write_auto_filter #:nodoc:
3628
+ def write_auto_filter # :nodoc:
3492
3629
  return unless autofilter_ref?
3493
3630
 
3494
3631
  attributes = [
@@ -3510,10 +3647,10 @@ EOS
3510
3647
  # Function to iterate through the columns that form part of an autofilter
3511
3648
  # range and write the appropriate filters.
3512
3649
  #
3513
- def write_autofilters #:nodoc:
3650
+ def write_autofilters # :nodoc:
3514
3651
  col1, col2 = @filter_range
3515
3652
 
3516
- (col1 .. col2).each do |col|
3653
+ (col1..col2).each do |col|
3517
3654
  # Skip if column doesn't have an active filter.
3518
3655
  next unless @filter_cols[col]
3519
3656
 
@@ -3529,8 +3666,8 @@ EOS
3529
3666
  #
3530
3667
  # Write the <filterColumn> element.
3531
3668
  #
3532
- def write_filter_column(col_id, type, *filters) #:nodoc:
3533
- @writer.tag_elements('filterColumn', [ ['colId', col_id] ]) do
3669
+ def write_filter_column(col_id, type, *filters) # :nodoc:
3670
+ @writer.tag_elements('filterColumn', [['colId', col_id]]) do
3534
3671
  if type == 1
3535
3672
  # Type == 1 is the new XLSX style filter.
3536
3673
  write_filters(*filters)
@@ -3544,13 +3681,11 @@ EOS
3544
3681
  #
3545
3682
  # Write the <filters> element.
3546
3683
  #
3547
- def write_filters(*filters) #:nodoc:
3684
+ def write_filters(*filters) # :nodoc:
3548
3685
  non_blanks = filters.reject { |filter| filter.to_s =~ /^blanks$/i }
3549
3686
  attributes = []
3550
3687
 
3551
- if filters != non_blanks
3552
- attributes = [ ['blank', 1] ]
3553
- end
3688
+ attributes = [['blank', 1]] if filters != non_blanks
3554
3689
 
3555
3690
  if filters.size == 1 && non_blanks.empty?
3556
3691
  # Special case for blank cells only.
@@ -3566,14 +3701,14 @@ EOS
3566
3701
  #
3567
3702
  # Write the <filter> element.
3568
3703
  #
3569
- def write_filter(val) #:nodoc:
3570
- @writer.empty_tag('filter', [ ['val', val] ])
3704
+ def write_filter(val) # :nodoc:
3705
+ @writer.empty_tag('filter', [['val', val]])
3571
3706
  end
3572
3707
 
3573
3708
  #
3574
3709
  # Write the <customFilters> element.
3575
3710
  #
3576
- def write_custom_filters(*tokens) #:nodoc:
3711
+ def write_custom_filters(*tokens) # :nodoc:
3577
3712
  if tokens.size == 2
3578
3713
  # One filter expression only.
3579
3714
  @writer.tag_elements('customFilters') { write_custom_filter(*tokens) }
@@ -3581,11 +3716,11 @@ EOS
3581
3716
  # Two filter expressions.
3582
3717
 
3583
3718
  # Check if the "join" operand is "and" or "or".
3584
- if tokens[2] == 0
3585
- attributes = [ ['and', 1] ]
3586
- else
3587
- attributes = [ ['and', 0] ]
3588
- end
3719
+ attributes = if tokens[2] == 0
3720
+ [['and', 1]]
3721
+ else
3722
+ [['and', 0]]
3723
+ end
3589
3724
 
3590
3725
  # Write the two custom filters.
3591
3726
  @writer.tag_elements('customFilters', attributes) do
@@ -3598,7 +3733,7 @@ EOS
3598
3733
  #
3599
3734
  # Write the <customFilter> element.
3600
3735
  #
3601
- def write_custom_filter(operator, val) #:nodoc:
3736
+ def write_custom_filter(operator, val) # :nodoc:
3602
3737
  operators = {
3603
3738
  1 => 'lessThan',
3604
3739
  2 => 'equal',
@@ -3628,8 +3763,9 @@ EOS
3628
3763
  # Process any sored hyperlinks in row/col order and write the <hyperlinks>
3629
3764
  # element. The attributes are different for internal and external links.
3630
3765
  #
3631
- def write_hyperlinks #:nodoc:
3766
+ def write_hyperlinks # :nodoc:
3632
3767
  return unless @hyperlinks
3768
+
3633
3769
  hlink_attributes = []
3634
3770
  @hyperlinks.keys.sort.each do |row_num|
3635
3771
  # Sort the hyperlinks into column order.
@@ -3642,11 +3778,9 @@ EOS
3642
3778
  # If the cell isn't a string then we have to add the url as
3643
3779
  # the string to display
3644
3780
  if ptrue?(@cell_data_table) &&
3645
- ptrue?(@cell_data_table[row_num]) &&
3646
- ptrue?(@cell_data_table[row_num][col_num])
3647
- if @cell_data_table[row_num][col_num].display_url_string?
3648
- link.display_on
3649
- end
3781
+ ptrue?(@cell_data_table[row_num]) &&
3782
+ ptrue?(@cell_data_table[row_num][col_num]) && @cell_data_table[row_num][col_num].display_url_string?
3783
+ link.display_on
3650
3784
  end
3651
3785
 
3652
3786
  if link.respond_to?(:external_hyper_link)
@@ -3672,7 +3806,7 @@ EOS
3672
3806
  #
3673
3807
  # Write the <tabColor> element.
3674
3808
  #
3675
- def write_tab_color #:nodoc:
3809
+ def write_tab_color # :nodoc:
3676
3810
  return unless tab_color?
3677
3811
 
3678
3812
  @writer.empty_tag(
@@ -3701,7 +3835,7 @@ EOS
3701
3835
  #
3702
3836
  # Write the <sheetProtection> element.
3703
3837
  #
3704
- def write_sheet_protection #:nodoc:
3838
+ def write_sheet_protection # :nodoc:
3705
3839
  return unless protect?
3706
3840
 
3707
3841
  attributes = []
@@ -3759,14 +3893,14 @@ EOS
3759
3893
  #
3760
3894
  # Write the <drawing> elements.
3761
3895
  #
3762
- def write_drawings #:nodoc:
3896
+ def write_drawings # :nodoc:
3763
3897
  increment_rel_id_and_write_r_id('drawing') if drawings?
3764
3898
  end
3765
3899
 
3766
3900
  #
3767
3901
  # Write the <legacyDrawing> element.
3768
3902
  #
3769
- def write_legacy_drawing #:nodoc:
3903
+ def write_legacy_drawing # :nodoc:
3770
3904
  increment_rel_id_and_write_r_id('legacyDrawing') if has_vml?
3771
3905
  end
3772
3906
 
@@ -3779,7 +3913,7 @@ EOS
3779
3913
  # Increment the relationship id for any drawings or comments.
3780
3914
  @rel_count += 1
3781
3915
 
3782
- attributes = [ ['r:id', "rId#{@rel_count}"] ]
3916
+ attributes = [['r:id', "rId#{@rel_count}"]]
3783
3917
  @writer.empty_tag('legacyDrawingHF', attributes)
3784
3918
  end
3785
3919
 
@@ -3801,7 +3935,7 @@ EOS
3801
3935
  #
3802
3936
  # Write the underline font element.
3803
3937
  #
3804
- def write_underline(writer, underline) #:nodoc:
3938
+ def write_underline(writer, underline) # :nodoc:
3805
3939
  writer.empty_tag('u', underline_attributes(underline))
3806
3940
  end
3807
3941
 
@@ -3811,7 +3945,7 @@ EOS
3811
3945
  def write_table_parts
3812
3946
  return if @tables.empty?
3813
3947
 
3814
- @writer.tag_elements('tableParts', [ ['count', tables_count] ]) do
3948
+ @writer.tag_elements('tableParts', [['count', tables_count]]) do
3815
3949
  tables_count.times { increment_rel_id_and_write_r_id('tablePart') }
3816
3950
  end
3817
3951
  end
@@ -3850,7 +3984,6 @@ EOS
3850
3984
  def write_ext_list_data_bars
3851
3985
  # Write the ext element.
3852
3986
  write_ext('{78C0D931-6437-407d-A8EE-F0AAD7539E65}') do
3853
-
3854
3987
  @writer.tag_elements('x14:conditionalFormattings') do
3855
3988
  # Write each of the Excel 2010 conditional formatting data bar elements.
3856
3989
  @data_bars_2010.each do |data_bar|
@@ -3860,16 +3993,16 @@ EOS
3860
3993
  end
3861
3994
  end
3862
3995
  end
3996
+
3863
3997
  #
3864
3998
  # Write the <x14:conditionalFormatting> element.
3865
3999
  #
3866
4000
  def write_conditional_formatting_2010(data_bar)
3867
4001
  xmlns_xm = 'http://schemas.microsoft.com/office/excel/2006/main'
3868
4002
 
3869
- attributes = [ ['xmlns:xm', xmlns_xm] ]
4003
+ attributes = [['xmlns:xm', xmlns_xm]]
3870
4004
 
3871
4005
  @writer.tag_elements('x14:conditionalFormatting', attributes) do
3872
-
3873
4006
  # Write the '<x14:cfRule element.
3874
4007
  write_x14_cf_rule(data_bar)
3875
4008
 
@@ -3881,26 +4014,21 @@ EOS
3881
4014
  write_x14_cfvo(data_bar[:x14_max_type], data_bar[:max_value])
3882
4015
 
3883
4016
  # Write the x14:borderColor element.
3884
- if !ptrue?(data_bar[:bar_no_border])
3885
- write_x14_border_color(data_bar[:bar_border_color])
3886
- end
4017
+ write_x14_border_color(data_bar[:bar_border_color]) unless ptrue?(data_bar[:bar_no_border])
3887
4018
 
3888
4019
  # Write the x14:negativeFillColor element.
3889
- if !ptrue?(data_bar[:bar_negative_color_same])
3890
- write_x14_negative_fill_color(data_bar[:bar_negative_color])
3891
- end
4020
+ write_x14_negative_fill_color(data_bar[:bar_negative_color]) unless ptrue?(data_bar[:bar_negative_color_same])
3892
4021
 
3893
4022
  # Write the x14:negativeBorderColor element.
3894
4023
  if !ptrue?(data_bar[:bar_no_border]) &&
3895
4024
  !ptrue?(data_bar[:bar_negative_border_color_same])
3896
4025
  write_x14_negative_border_color(
3897
- data_bar[:bar_negative_border_color])
4026
+ data_bar[:bar_negative_border_color]
4027
+ )
3898
4028
  end
3899
4029
 
3900
4030
  # Write the x14:axisColor element.
3901
- if data_bar[:bar_axis_position] != 'none'
3902
- write_x14_axis_color(data_bar[:bar_axis_color])
3903
- end
4031
+ write_x14_axis_color(data_bar[:bar_axis_color]) if data_bar[:bar_axis_position] != 'none'
3904
4032
 
3905
4033
  # Write closing elements.
3906
4034
  @writer.end_tag('x14:dataBar')
@@ -3915,9 +4043,9 @@ EOS
3915
4043
  # Write the <cfvo> element.
3916
4044
  #
3917
4045
  def write_x14_cfvo(type, value)
3918
- attributes = [ ['type', type ] ]
4046
+ attributes = [['type', type]]
3919
4047
 
3920
- if %w(min max autoMin autoMax).include?(type)
4048
+ if %w[min max autoMin autoMax].include?(type)
3921
4049
  @writer.empty_tag('x14:cfvo', attributes)
3922
4050
  else
3923
4051
  @writer.tag_elements('x14:cfvo', attributes) do
@@ -3939,7 +4067,6 @@ EOS
3939
4067
  ]
3940
4068
 
3941
4069
  @writer.start_tag('x14:cfRule', attributes)
3942
-
3943
4070
  end
3944
4071
 
3945
4072
  #
@@ -3954,32 +4081,22 @@ EOS
3954
4081
  ['maxLength', max_length]
3955
4082
  ]
3956
4083
 
3957
- attributes << ['border', 1] if !ptrue?(data_bar[:bar_no_border])
4084
+ attributes << ['border', 1] unless ptrue?(data_bar[:bar_no_border])
3958
4085
  attributes << ['gradient', 0] if ptrue?(data_bar[:bar_solid])
3959
4086
 
3960
- if data_bar[:bar_direction] == 'left'
3961
- attributes << ['direction', 'leftToRight']
3962
- end
3963
- if data_bar[:bar_direction] == 'right'
3964
- attributes << ['direction', 'rightToLeft']
3965
- end
4087
+ attributes << %w[direction leftToRight] if data_bar[:bar_direction] == 'left'
4088
+ attributes << %w[direction rightToLeft] if data_bar[:bar_direction] == 'right'
3966
4089
 
3967
- if ptrue?(data_bar[:bar_negative_color_same])
3968
- attributes << ['negativeBarColorSameAsPositive', 1]
3969
- end
4090
+ attributes << ['negativeBarColorSameAsPositive', 1] if ptrue?(data_bar[:bar_negative_color_same])
3970
4091
 
3971
4092
  if !ptrue?(data_bar[:bar_no_border]) &&
3972
4093
  !ptrue?(data_bar[:bar_negative_border_color_same])
3973
4094
  attributes << ['negativeBarBorderColorSameAsPositive', 0]
3974
4095
  end
3975
4096
 
3976
- if data_bar[:bar_axis_position] == 'middle'
3977
- attributes << ['axisPosition', 'middle']
3978
- end
4097
+ attributes << %w[axisPosition middle] if data_bar[:bar_axis_position] == 'middle'
3979
4098
 
3980
- if data_bar[:bar_axis_position] == 'none'
3981
- attributes << ['axisPosition', 'none']
3982
- end
4099
+ attributes << %w[axisPosition none] if data_bar[:bar_axis_position] == 'none'
3983
4100
 
3984
4101
  @writer.start_tag('x14:dataBar', attributes)
3985
4102
  end
@@ -3988,7 +4105,7 @@ EOS
3988
4105
  # Write the <x14:borderColor> element.
3989
4106
  #
3990
4107
  def write_x14_border_color(rgb)
3991
- attributes = [ ['rgb', rgb] ]
4108
+ attributes = [['rgb', rgb]]
3992
4109
 
3993
4110
  @writer.empty_tag('x14:borderColor', attributes)
3994
4111
  end
@@ -3997,7 +4114,7 @@ EOS
3997
4114
  # Write the <x14:negativeFillColor> element.
3998
4115
  #
3999
4116
  def write_x14_negative_fill_color(rgb)
4000
- attributes = [ ['rgb', rgb] ]
4117
+ attributes = [['rgb', rgb]]
4001
4118
 
4002
4119
  @writer.empty_tag('x14:negativeFillColor', attributes)
4003
4120
  end
@@ -4006,7 +4123,7 @@ EOS
4006
4123
  # Write the <x14:negativeBorderColor> element.
4007
4124
  #
4008
4125
  def write_x14_negative_border_color(rgb)
4009
- attributes = [ ['rgb', rgb] ]
4126
+ attributes = [['rgb', rgb]]
4010
4127
 
4011
4128
  @writer.empty_tag('x14:negativeBorderColor', attributes)
4012
4129
  end
@@ -4015,7 +4132,7 @@ EOS
4015
4132
  # Write the <x14:axisColor> element.
4016
4133
  #
4017
4134
  def write_x14_axis_color(rgb)
4018
- attributes = [ ['rgb', rgb] ]
4135
+ attributes = [['rgb', rgb]]
4019
4136
 
4020
4137
  @writer.empty_tag('x14:axisColor', attributes)
4021
4138
  end
@@ -4026,7 +4143,6 @@ EOS
4026
4143
  def write_ext_list_sparklines
4027
4144
  # Write the ext element.
4028
4145
  write_ext('{05C60535-1F16-4fd2-B633-F4F36F0B64E0}') do
4029
-
4030
4146
  # Write the x14:sparklineGroups element.
4031
4147
  write_sparkline_groups
4032
4148
  end
@@ -4038,7 +4154,7 @@ EOS
4038
4154
  def write_sparklines(sparkline)
4039
4155
  # Write the sparkline elements.
4040
4156
  @writer.tag_elements('x14:sparklines') do
4041
- (0..sparkline[:count]-1).each do |i|
4157
+ (0..sparkline[:count] - 1).each do |i|
4042
4158
  range = sparkline[:ranges][i]
4043
4159
  location = sparkline[:locations][i]
4044
4160
 
@@ -4052,14 +4168,14 @@ EOS
4052
4168
 
4053
4169
  def sparkline_groups_attributes # :nodoc:
4054
4170
  [
4055
- ['xmlns:xm', "#{OFFICE_URL}excel/2006/main"]
4171
+ ['xmlns:xm', "#{OFFICE_URL}excel/2006/main"]
4056
4172
  ]
4057
4173
  end
4058
4174
 
4059
4175
  #
4060
4176
  # Write the <dataValidations> element.
4061
4177
  #
4062
- def write_data_validations #:nodoc:
4178
+ def write_data_validations # :nodoc:
4063
4179
  write_some_elements('dataValidations', @validations) do
4064
4180
  @validations.each { |validation| validation.write_data_validation(@writer) }
4065
4181
  end
@@ -4068,7 +4184,7 @@ EOS
4068
4184
  #
4069
4185
  # Write the Worksheet conditional formats.
4070
4186
  #
4071
- def write_conditional_formats #:nodoc:
4187
+ def write_conditional_formats # :nodoc:
4072
4188
  @cond_formats.keys.sort.each do |range|
4073
4189
  write_conditional_formatting(range, @cond_formats[range])
4074
4190
  end
@@ -4077,18 +4193,17 @@ EOS
4077
4193
  #
4078
4194
  # Write the <conditionalFormatting> element.
4079
4195
  #
4080
- def write_conditional_formatting(range, cond_formats) #:nodoc:
4081
- @writer.tag_elements('conditionalFormatting', [ ['sqref', range] ]) do
4196
+ def write_conditional_formatting(range, cond_formats) # :nodoc:
4197
+ @writer.tag_elements('conditionalFormatting', [['sqref', range]]) do
4082
4198
  cond_formats.each { |cond_format| cond_format.write_cf_rule }
4083
4199
  end
4084
4200
  end
4085
4201
 
4086
- def store_data_to_table(cell_data) #:nodoc:
4087
- row, col = cell_data.row, cell_data.col
4202
+ def store_data_to_table(cell_data, row, col) # :nodoc:
4088
4203
  if @cell_data_table[row]
4089
4204
  @cell_data_table[row][col] = cell_data
4090
4205
  else
4091
- @cell_data_table[row] = {}
4206
+ @cell_data_table[row] = []
4092
4207
  @cell_data_table[row][col] = cell_data
4093
4208
  end
4094
4209
  end
@@ -4103,44 +4218,40 @@ EOS
4103
4218
  # optimisation and isn't strictly required. However, it makes comparing
4104
4219
  # files easier.
4105
4220
  #
4106
- def calculate_spans #:nodoc:
4221
+ def calculate_spans # :nodoc:
4107
4222
  span_min = nil
4108
4223
  span_max = 0
4109
4224
  spans = []
4110
4225
 
4111
- (@dim_rowmin .. @dim_rowmax).each do |row_num|
4112
- if @cell_data_table[row_num]
4113
- span_min, span_max = calc_spans(@cell_data_table, row_num, span_min, span_max)
4114
- end
4226
+ (@dim_rowmin..@dim_rowmax).each do |row_num|
4227
+ span_min, span_max = calc_spans(@cell_data_table, row_num, span_min, span_max) if @cell_data_table[row_num]
4115
4228
 
4116
4229
  # Calculate spans for comments.
4117
- if @comments[row_num]
4118
- span_min, span_max = calc_spans(@comments, row_num, span_min, span_max)
4119
- end
4230
+ span_min, span_max = calc_spans(@comments, row_num, span_min, span_max) if @comments[row_num]
4120
4231
 
4121
- if ((row_num + 1) % 16 == 0) || (row_num == @dim_rowmax)
4122
- span_index = row_num / 16
4123
- if span_min
4124
- span_min += 1
4125
- span_max += 1
4126
- spans[span_index] = "#{span_min}:#{span_max}"
4127
- span_min = nil
4128
- end
4129
- end
4232
+ next unless ((row_num + 1) % 16 == 0) || (row_num == @dim_rowmax)
4233
+
4234
+ span_index = row_num / 16
4235
+ next unless span_min
4236
+
4237
+ span_min += 1
4238
+ span_max += 1
4239
+ spans[span_index] = "#{span_min}:#{span_max}"
4240
+ span_min = nil
4130
4241
  end
4131
4242
 
4132
4243
  @row_spans = spans
4133
4244
  end
4134
4245
 
4135
4246
  def calc_spans(data, row_num, span_min, span_max)
4136
- (@dim_colmin .. @dim_colmax).each do |col_num|
4247
+ (@dim_colmin..@dim_colmax).each do |col_num|
4137
4248
  if data[row_num][col_num]
4138
- if !span_min
4139
- span_min = col_num
4140
- span_max = col_num
4141
- else
4249
+ if span_min
4142
4250
  span_min = col_num if col_num < span_min
4143
4251
  span_max = col_num if col_num > span_max
4252
+ else
4253
+ span_min = col_num
4254
+ span_max = col_num
4144
4255
  end
4145
4256
  end
4146
4257
  end
@@ -4151,7 +4262,7 @@ EOS
4151
4262
  # Add a string to the shared string table, if it isn't already there, and
4152
4263
  # return the string index.
4153
4264
  #
4154
- def shared_string_index(str) #:nodoc:
4265
+ def shared_string_index(str) # :nodoc:
4155
4266
  @workbook.shared_string_index(str)
4156
4267
  end
4157
4268
 
@@ -4161,7 +4272,7 @@ EOS
4161
4272
  # Convert zero indexed rows and columns to the format required by worksheet
4162
4273
  # named ranges, eg, "Sheet1!$A$1:$C$13".
4163
4274
  #
4164
- def convert_name_area(row_num_1, col_num_1, row_num_2, col_num_2) #:nodoc:
4275
+ def convert_name_area(row_num_1, col_num_1, row_num_2, col_num_2) # :nodoc:
4165
4276
  range1 = ''
4166
4277
  range2 = ''
4167
4278
  row_col_only = false
@@ -4187,25 +4298,25 @@ EOS
4187
4298
  end
4188
4299
 
4189
4300
  # A repeated range is only written once (if it isn't a special case).
4190
- if range1 == range2 && !row_col_only
4191
- area = range1
4192
- else
4193
- area = "#{range1}:#{range2}"
4194
- end
4301
+ area = if range1 == range2 && !row_col_only
4302
+ range1
4303
+ else
4304
+ "#{range1}:#{range2}"
4305
+ end
4195
4306
 
4196
4307
  # Build up the print area range "Sheet1!$A$1:$C$13".
4197
4308
  "#{quote_sheetname(@name)}!#{area}"
4198
4309
  end
4199
4310
 
4200
- def fit_page? #:nodoc:
4311
+ def fit_page? # :nodoc:
4201
4312
  @page_setup.fit_page
4202
4313
  end
4203
4314
 
4204
- def filter_on? #:nodoc:
4315
+ def filter_on? # :nodoc:
4205
4316
  ptrue?(@filter_on)
4206
4317
  end
4207
4318
 
4208
- def tab_color? #:nodoc:
4319
+ def tab_color? # :nodoc:
4209
4320
  ptrue?(@tab_color)
4210
4321
  end
4211
4322
 
@@ -4217,37 +4328,37 @@ EOS
4217
4328
  ptrue?(@vba_codename)
4218
4329
  end
4219
4330
 
4220
- def zoom_scale_normal? #:nodoc:
4331
+ def zoom_scale_normal? # :nodoc:
4221
4332
  ptrue?(@zoom_scale_normal)
4222
4333
  end
4223
4334
 
4224
- def page_view? #:nodoc:
4335
+ def page_view? # :nodoc:
4225
4336
  !!@page_view
4226
4337
  end
4227
4338
 
4228
- def right_to_left? #:nodoc:
4339
+ def right_to_left? # :nodoc:
4229
4340
  !!@right_to_left
4230
4341
  end
4231
4342
 
4232
- def show_zeros? #:nodoc:
4343
+ def show_zeros? # :nodoc:
4233
4344
  !!@show_zeros
4234
4345
  end
4235
4346
 
4236
- def protect? #:nodoc:
4347
+ def protect? # :nodoc:
4237
4348
  !!@protect
4238
4349
  end
4239
4350
 
4240
- def autofilter_ref? #:nodoc:
4351
+ def autofilter_ref? # :nodoc:
4241
4352
  !!@autofilter_ref
4242
4353
  end
4243
4354
 
4244
- def drawings? #:nodoc:
4355
+ def drawings? # :nodoc:
4245
4356
  !!@drawings
4246
4357
  end
4247
4358
 
4248
- def remove_white_space(margin) #:nodoc:
4359
+ def remove_white_space(margin) # :nodoc:
4249
4360
  if margin.respond_to?(:gsub)
4250
- margin.gsub(/[^\d\.]/, '')
4361
+ margin.gsub(/[^\d.]/, '')
4251
4362
  else
4252
4363
  margin
4253
4364
  end
@@ -4260,15 +4371,15 @@ EOS
4260
4371
  col_cell = xl_rowcol_to_cell(0, left_col)
4261
4372
 
4262
4373
  @selections <<
4263
- [ 'topRight', col_cell, col_cell ] <<
4264
- [ 'bottomLeft', row_cell, row_cell ] <<
4265
- [ 'bottomRight', active_cell, sqref ]
4374
+ ['topRight', col_cell, col_cell] <<
4375
+ ['bottomLeft', row_cell, row_cell] <<
4376
+ ['bottomRight', active_cell, sqref]
4266
4377
  elsif col > 0
4267
4378
  active_pane = 'topRight'
4268
- @selections << [ 'topRight', active_cell, sqref ]
4379
+ @selections << ['topRight', active_cell, sqref]
4269
4380
  else
4270
4381
  active_pane = 'bottomLeft'
4271
- @selections << [ 'bottomLeft', active_cell, sqref ]
4382
+ @selections << ['bottomLeft', active_cell, sqref]
4272
4383
  end
4273
4384
  active_pane
4274
4385
  end
@@ -4279,16 +4390,15 @@ EOS
4279
4390
  col_letter = col
4280
4391
 
4281
4392
  # Convert col ref to a cell ref and then to a col number.
4282
- dummy, col = substitute_cellref("#{col}1")
4393
+ _dummy, col = substitute_cellref("#{col}1")
4283
4394
  raise "Invalid column '#{col_letter}'" if col >= COL_MAX
4284
4395
  end
4285
4396
 
4286
4397
  col_first, col_last = @filter_range
4287
4398
 
4288
4399
  # Reject column if it is outside filter range.
4289
- if col < col_first or col > col_last
4290
- raise "Column '#{col}' outside autofilter column range (#{col_first} .. #{col_last})"
4291
- end
4400
+ raise "Column '#{col}' outside autofilter column range (#{col_first} .. #{col_last})" if col < col_first or col > col_last
4401
+
4292
4402
  col
4293
4403
  end
4294
4404
 
@@ -4300,7 +4410,7 @@ EOS
4300
4410
 
4301
4411
  ignore = @ignore_errors
4302
4412
 
4303
- @writer.tag_elements('ignoredErrors' ) do
4413
+ @writer.tag_elements('ignoredErrors') do
4304
4414
  {
4305
4415
  :number_stored_as_text => 'numberStoredAsText',
4306
4416
  :eval_error => 'evalError',
@@ -4312,9 +4422,7 @@ EOS
4312
4422
  :calculated_column => 'calculatedColumn',
4313
4423
  :two_digit_text_year => 'twoDigitTextYear'
4314
4424
  }.each do |key, value|
4315
- if ignore[key]
4316
- write_ignored_error(value, ignore[key])
4317
- end
4425
+ write_ignored_error(value, ignore[key]) if ignore[key]
4318
4426
  end
4319
4427
  end
4320
4428
  end