write_xlsx 0.0.4 → 0.51.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 (688) hide show
  1. data/Gemfile +4 -2
  2. data/README.rdoc +14 -12
  3. data/Rakefile +8 -8
  4. data/VERSION +1 -1
  5. data/examples/chart_secondary_axis.rb +55 -0
  6. data/examples/date_time.rb +84 -0
  7. data/examples/panes.rb +108 -0
  8. data/examples/regions.rb +49 -0
  9. data/examples/shape1.rb +36 -0
  10. data/examples/shape2.rb +53 -0
  11. data/examples/shape3.rb +32 -0
  12. data/examples/shape4.rb +55 -0
  13. data/examples/shape5.rb +48 -0
  14. data/examples/shape6.rb +48 -0
  15. data/examples/shape7.rb +74 -0
  16. data/examples/shape8.rb +73 -0
  17. data/examples/shape_all.rb +241 -0
  18. data/examples/stats.rb +69 -0
  19. data/examples/stats_ext.rb +77 -0
  20. data/examples/stocks.rb +73 -0
  21. data/examples/tables.rb +360 -0
  22. data/lib/write_xlsx.rb +25 -1
  23. data/lib/write_xlsx/chart.rb +656 -260
  24. data/lib/write_xlsx/chart/area.rb +41 -7
  25. data/lib/write_xlsx/chart/bar.rb +16 -17
  26. data/lib/write_xlsx/chart/column.rb +5 -15
  27. data/lib/write_xlsx/chart/line.rb +15 -6
  28. data/lib/write_xlsx/chart/pie.rb +7 -21
  29. data/lib/write_xlsx/chart/scatter.rb +90 -20
  30. data/lib/write_xlsx/chart/stock.rb +24 -43
  31. data/lib/write_xlsx/chartsheet.rb +29 -11
  32. data/lib/write_xlsx/drawing.rb +354 -35
  33. data/lib/write_xlsx/format.rb +72 -21
  34. data/lib/write_xlsx/package/app.rb +2 -5
  35. data/lib/write_xlsx/package/comments.rb +5 -1
  36. data/lib/write_xlsx/package/content_types.rb +10 -0
  37. data/lib/write_xlsx/package/packager.rb +41 -7
  38. data/lib/write_xlsx/package/relationships.rb +1 -1
  39. data/lib/write_xlsx/package/shared_strings.rb +36 -8
  40. data/lib/write_xlsx/package/styles.rb +12 -9
  41. data/lib/write_xlsx/package/table.rb +194 -0
  42. data/lib/write_xlsx/package/vml.rb +26 -27
  43. data/lib/write_xlsx/package/xml_writer_simple.rb +25 -4
  44. data/lib/write_xlsx/shape.rb +172 -0
  45. data/lib/write_xlsx/utility.rb +20 -0
  46. data/lib/write_xlsx/workbook.rb +499 -141
  47. data/lib/write_xlsx/worksheet.rb +1162 -153
  48. data/test/chart/test_add_series.rb +43 -4
  49. data/test/chart/test_write_d_lbls.rb +274 -0
  50. data/test/chart/test_write_major_gridlines.rb +1 -1
  51. data/test/chartsheet/test_chartsheet01.rb +31 -0
  52. data/test/drawing/test_drawing_shape_01.rb +68 -0
  53. data/test/drawing/test_drawing_shape_02.rb +73 -0
  54. data/test/drawing/test_drawing_shape_03.rb +38 -0
  55. data/test/drawing/test_drawing_shape_04.rb +121 -0
  56. data/test/drawing/test_drawing_shape_05.rb +45 -0
  57. data/test/drawing/test_drawing_shape_06.rb +42 -0
  58. data/test/drawing/test_drawing_shape_07.rb +47 -0
  59. data/test/drawing/test_write_a_graphic_frame_locks.rb +18 -0
  60. data/test/drawing/test_write_c_chart.rb +18 -0
  61. data/test/drawing/test_write_c_nv_graphic_frame_pr.rb +28 -0
  62. data/test/drawing/test_write_c_nv_pr.rb +18 -0
  63. data/test/drawing/test_write_col.rb +18 -0
  64. data/test/drawing/test_write_col_off.rb +18 -0
  65. data/test/drawing/test_write_ext.rb +18 -0
  66. data/test/drawing/test_write_pos.rb +18 -0
  67. data/test/drawing/test_write_row.rb +18 -0
  68. data/test/drawing/test_write_row_off.rb +18 -0
  69. data/test/drawing/test_write_xfrm_extension.rb +18 -0
  70. data/test/drawing/test_write_xfrm_offset.rb +18 -0
  71. data/test/helper.rb +93 -50
  72. data/test/package/shared_strings/test_write_si.rb +10 -1
  73. data/test/package/table/test_table01.rb +42 -0
  74. data/test/package/table/test_table02.rb +44 -0
  75. data/test/package/table/test_table03.rb +48 -0
  76. data/test/package/table/test_table04.rb +46 -0
  77. data/test/package/table/test_table05.rb +46 -0
  78. data/test/package/table/test_table06.rb +52 -0
  79. data/test/package/table/test_table07.rb +47 -0
  80. data/test/package/table/test_table08.rb +53 -0
  81. data/test/package/table/test_table09.rb +65 -0
  82. data/test/package/table/test_table10.rb +45 -0
  83. data/test/package/table/test_table11.rb +60 -0
  84. data/test/package/table/test_table12.rb +60 -0
  85. data/test/package/table/test_write_auto_filter.rb +16 -0
  86. data/test/package/table/test_write_table_column.rb +15 -0
  87. data/test/package/table/test_write_table_style_info.rb +25 -0
  88. data/test/package/table/test_write_xml_declaration.rb +15 -0
  89. data/test/perl_output/a_simple.xlsx +0 -0
  90. data/test/perl_output/array_formula.xlsx +0 -0
  91. data/test/perl_output/chart_secondary_axis.xlsx +0 -0
  92. data/test/perl_output/data_validate.xlsx +0 -0
  93. data/test/perl_output/date_time.xlsx +0 -0
  94. data/test/perl_output/demo.xlsx +0 -0
  95. data/test/perl_output/formats.xlsx +0 -0
  96. data/test/perl_output/headers.xlsx +0 -0
  97. data/test/perl_output/outline_collapsed.xlsx +0 -0
  98. data/test/perl_output/panes.xlsx +0 -0
  99. data/test/perl_output/regions.xlsx +0 -0
  100. data/test/perl_output/shape1.xlsx +0 -0
  101. data/test/perl_output/shape2.xlsx +0 -0
  102. data/test/perl_output/shape3.xlsx +0 -0
  103. data/test/perl_output/shape4.xlsx +0 -0
  104. data/test/perl_output/shape5.xlsx +0 -0
  105. data/test/perl_output/shape6.xlsx +0 -0
  106. data/test/perl_output/shape7.xlsx +0 -0
  107. data/test/perl_output/shape8.xlsx +0 -0
  108. data/test/perl_output/shape_all.xlsx +0 -0
  109. data/test/perl_output/stats.xlsx +0 -0
  110. data/test/perl_output/stats_ext.xlsx +0 -0
  111. data/test/perl_output/stocks.xlsx +0 -0
  112. data/test/perl_output/tables.xlsx +0 -0
  113. data/test/regression/images/blue.jpg +0 -0
  114. data/test/regression/images/blue.png +0 -0
  115. data/test/regression/images/grey.jpg +0 -0
  116. data/test/regression/images/grey.png +0 -0
  117. data/test/regression/images/red.bmp +0 -0
  118. data/test/regression/images/red.jpg +0 -0
  119. data/test/regression/images/red.png +0 -0
  120. data/test/regression/images/yellow.jpg +0 -0
  121. data/test/regression/images/yellow.png +0 -0
  122. data/test/regression/test_array_formula01.rb +31 -0
  123. data/test/regression/test_array_formula02.rb +32 -0
  124. data/test/regression/test_autofilter00.rb +84 -0
  125. data/test/regression/test_autofilter01.rb +86 -0
  126. data/test/regression/test_autofilter02.rb +104 -0
  127. data/test/regression/test_autofilter03.rb +104 -0
  128. data/test/regression/test_autofilter04.rb +107 -0
  129. data/test/regression/test_autofilter05.rb +108 -0
  130. data/test/regression/test_autofilter06.rb +108 -0
  131. data/test/regression/test_autofilter07.rb +107 -0
  132. data/test/regression/test_chart_area01.rb +45 -0
  133. data/test/regression/test_chart_area02.rb +45 -0
  134. data/test/regression/test_chart_area03.rb +45 -0
  135. data/test/regression/test_chart_axis01.rb +46 -0
  136. data/test/regression/test_chart_axis02.rb +46 -0
  137. data/test/regression/test_chart_axis03.rb +68 -0
  138. data/test/regression/test_chart_axis04.rb +53 -0
  139. data/test/regression/test_chart_axis05.rb +48 -0
  140. data/test/regression/test_chart_axis06.rb +50 -0
  141. data/test/regression/test_chart_axis07.rb +54 -0
  142. data/test/regression/test_chart_axis08.rb +53 -0
  143. data/test/regression/test_chart_axis09.rb +47 -0
  144. data/test/regression/test_chart_axis10.rb +53 -0
  145. data/test/regression/test_chart_axis11.rb +47 -0
  146. data/test/regression/test_chart_axis12.rb +47 -0
  147. data/test/regression/test_chart_axis13.rb +53 -0
  148. data/test/regression/test_chart_axis14.rb +67 -0
  149. data/test/regression/test_chart_axis15.rb +48 -0
  150. data/test/regression/test_chart_axis16.rb +70 -0
  151. data/test/regression/test_chart_axis17.rb +46 -0
  152. data/test/regression/test_chart_axis18.rb +44 -0
  153. data/test/regression/test_chart_axis19.rb +46 -0
  154. data/test/regression/test_chart_axis20.rb +46 -0
  155. data/test/regression/test_chart_axis21.rb +50 -0
  156. data/test/regression/test_chart_bar01.rb +44 -0
  157. data/test/regression/test_chart_bar02.rb +55 -0
  158. data/test/regression/test_chart_bar03.rb +67 -0
  159. data/test/regression/test_chart_bar04.rb +70 -0
  160. data/test/regression/test_chart_bar05.rb +43 -0
  161. data/test/regression/test_chart_bar06.rb +50 -0
  162. data/test/regression/test_chart_bar07.rb +54 -0
  163. data/test/regression/test_chart_bar08.rb +44 -0
  164. data/test/regression/test_chart_bar09.rb +43 -0
  165. data/test/regression/test_chart_bar10.rb +47 -0
  166. data/test/regression/test_chart_bar11.rb +71 -0
  167. data/test/regression/test_chart_bar12.rb +43 -0
  168. data/test/regression/test_chart_bar13.rb +53 -0
  169. data/test/regression/test_chart_bar14.rb +63 -0
  170. data/test/regression/test_chart_bar15.rb +53 -0
  171. data/test/regression/test_chart_bar16.rb +51 -0
  172. data/test/regression/test_chart_bar17.rb +47 -0
  173. data/test/regression/test_chart_bar18.rb +58 -0
  174. data/test/regression/test_chart_bar19.rb +50 -0
  175. data/test/regression/test_chart_bar20.rb +47 -0
  176. data/test/regression/test_chart_bar21.rb +53 -0
  177. data/test/regression/test_chart_bar22.rb +68 -0
  178. data/test/regression/test_chart_bar23.rb +62 -0
  179. data/test/regression/test_chart_bar24.rb +46 -0
  180. data/test/regression/test_chart_blank01.rb +41 -0
  181. data/test/regression/test_chart_blank02.rb +41 -0
  182. data/test/regression/test_chart_blank03.rb +41 -0
  183. data/test/regression/test_chart_blank04.rb +41 -0
  184. data/test/regression/test_chart_blank05.rb +46 -0
  185. data/test/regression/test_chart_blank06.rb +41 -0
  186. data/test/regression/test_chart_column01.rb +43 -0
  187. data/test/regression/test_chart_column02.rb +45 -0
  188. data/test/regression/test_chart_column03.rb +45 -0
  189. data/test/regression/test_chart_column04.rb +45 -0
  190. data/test/regression/test_chart_column05.rb +39 -0
  191. data/test/regression/test_chart_column06.rb +46 -0
  192. data/test/regression/test_chart_crossing01.rb +50 -0
  193. data/test/regression/test_chart_crossing02.rb +48 -0
  194. data/test/regression/test_chart_crossing03.rb +53 -0
  195. data/test/regression/test_chart_crossing04.rb +53 -0
  196. data/test/regression/test_chart_format01.rb +44 -0
  197. data/test/regression/test_chart_format02.rb +45 -0
  198. data/test/regression/test_chart_format03.rb +46 -0
  199. data/test/regression/test_chart_format04.rb +45 -0
  200. data/test/regression/test_chart_format05.rb +45 -0
  201. data/test/regression/test_chart_format06.rb +52 -0
  202. data/test/regression/test_chart_format07.rb +57 -0
  203. data/test/regression/test_chart_format08.rb +52 -0
  204. data/test/regression/test_chart_format09.rb +56 -0
  205. data/test/regression/test_chart_format10.rb +59 -0
  206. data/test/regression/test_chart_format11.rb +63 -0
  207. data/test/regression/test_chart_format12.rb +60 -0
  208. data/test/regression/test_chart_format13.rb +52 -0
  209. data/test/regression/test_chart_format14.rb +56 -0
  210. data/test/regression/test_chart_format15.rb +54 -0
  211. data/test/regression/test_chart_format16.rb +57 -0
  212. data/test/regression/test_chart_format17.rb +40 -0
  213. data/test/regression/test_chart_format18.rb +44 -0
  214. data/test/regression/test_chart_line01.rb +39 -0
  215. data/test/regression/test_chart_line02.rb +45 -0
  216. data/test/regression/test_chart_name01.rb +46 -0
  217. data/test/regression/test_chart_name02.rb +58 -0
  218. data/test/regression/test_chart_name03.rb +58 -0
  219. data/test/regression/test_chart_pie01.rb +36 -0
  220. data/test/regression/test_chart_scatter01.rb +45 -0
  221. data/test/regression/test_chart_scatter02.rb +49 -0
  222. data/test/regression/test_chart_scatter03.rb +49 -0
  223. data/test/regression/test_chart_scatter04.rb +49 -0
  224. data/test/regression/test_chart_scatter05.rb +49 -0
  225. data/test/regression/test_chart_scatter06.rb +51 -0
  226. data/test/regression/test_chart_scatter07.rb +60 -0
  227. data/test/regression/test_chart_sparse01.rb +54 -0
  228. data/test/regression/test_chart_stock01.rb +72 -0
  229. data/test/regression/test_chart_stock02.rb +73 -0
  230. data/test/regression/test_chart_str01.rb +48 -0
  231. data/test/regression/test_chart_str02.rb +52 -0
  232. data/test/regression/test_chartsheet01.rb +46 -0
  233. data/test/regression/test_chartsheet02.rb +50 -0
  234. data/test/regression/test_chartsheet03.rb +48 -0
  235. data/test/regression/test_chartsheet04.rb +48 -0
  236. data/test/regression/test_chartsheet05.rb +48 -0
  237. data/test/regression/test_chartsheet06.rb +48 -0
  238. data/test/regression/test_chartsheet07.rb +57 -0
  239. data/test/regression/test_chartsheet08.rb +61 -0
  240. data/test/regression/test_chartsheet09.rb +52 -0
  241. data/test/regression/test_comment01.rb +27 -0
  242. data/test/regression/test_comment02.rb +28 -0
  243. data/test/regression/test_comment03.rb +32 -0
  244. data/test/regression/test_comment04.rb +37 -0
  245. data/test/regression/test_comment06.rb +34 -0
  246. data/test/regression/test_comment07.rb +36 -0
  247. data/test/regression/test_comment08.rb +36 -0
  248. data/test/regression/test_comment09.rb +32 -0
  249. data/test/regression/test_comment10.rb +31 -0
  250. data/test/regression/test_cond_format01.rb +46 -0
  251. data/test/regression/test_cond_format02.rb +41 -0
  252. data/test/regression/test_cond_format03.rb +52 -0
  253. data/test/regression/test_cond_format04.rb +51 -0
  254. data/test/regression/test_cond_format05.rb +41 -0
  255. data/test/regression/test_cond_format06.rb +45 -0
  256. data/test/regression/test_cond_format07.rb +62 -0
  257. data/test/regression/test_cond_format08.rb +46 -0
  258. data/test/regression/test_cond_format10.rb +43 -0
  259. data/test/regression/test_cond_format11.rb +47 -0
  260. data/test/regression/test_cond_format12.rb +47 -0
  261. data/test/regression/test_custom_colors01.rb +33 -0
  262. data/test/regression/test_date_1904_01.rb +36 -0
  263. data/test/regression/test_date_1904_02.rb +39 -0
  264. data/test/regression/test_defined_name01.rb +47 -0
  265. data/test/regression/test_escapes01.rb +37 -0
  266. data/test/regression/test_escapes02.rb +33 -0
  267. data/test/regression/test_escapes03.rb +34 -0
  268. data/test/regression/test_fit_to_pages01.rb +37 -0
  269. data/test/regression/test_fit_to_pages02.rb +37 -0
  270. data/test/regression/test_fit_to_pages03.rb +37 -0
  271. data/test/regression/test_fit_to_pages04.rb +37 -0
  272. data/test/regression/test_fit_to_pages05.rb +37 -0
  273. data/test/regression/test_format01.rb +35 -0
  274. data/test/regression/test_format02.rb +47 -0
  275. data/test/regression/test_format03.rb +31 -0
  276. data/test/regression/test_format04.rb +41 -0
  277. data/test/regression/test_gridlines01.rb +36 -0
  278. data/test/regression/test_hyperlink01.rb +23 -0
  279. data/test/regression/test_hyperlink02.rb +27 -0
  280. data/test/regression/test_hyperlink03.rb +32 -0
  281. data/test/regression/test_hyperlink04.rb +31 -0
  282. data/test/regression/test_hyperlink05.rb +26 -0
  283. data/test/regression/test_hyperlink06.rb +25 -0
  284. data/test/regression/test_hyperlink07.rb +24 -0
  285. data/test/regression/test_hyperlink08.rb +24 -0
  286. data/test/regression/test_hyperlink09.rb +25 -0
  287. data/test/regression/test_hyperlink10.rb +24 -0
  288. data/test/regression/test_hyperlink11.rb +24 -0
  289. data/test/regression/test_hyperlink12.rb +25 -0
  290. data/test/regression/test_hyperlink13.rb +24 -0
  291. data/test/regression/test_hyperlink14.rb +24 -0
  292. data/test/regression/test_hyperlink15.rb +26 -0
  293. data/test/regression/test_hyperlink16.rb +26 -0
  294. data/test/regression/test_hyperlink17.rb +27 -0
  295. data/test/regression/test_hyperlink18.rb +27 -0
  296. data/test/regression/test_image01.rb +23 -0
  297. data/test/regression/test_image02.rb +23 -0
  298. data/test/regression/test_image03.rb +23 -0
  299. data/test/regression/test_image04.rb +23 -0
  300. data/test/regression/test_image05.rb +26 -0
  301. data/test/regression/test_image06.rb +36 -0
  302. data/test/regression/test_image07.rb +25 -0
  303. data/test/regression/test_outline01.rb +86 -0
  304. data/test/regression/test_outline02.rb +89 -0
  305. data/test/regression/test_outline03.rb +59 -0
  306. data/test/regression/test_outline04.rb +55 -0
  307. data/test/regression/test_outline05.rb +90 -0
  308. data/test/regression/test_outline06.rb +89 -0
  309. data/test/regression/test_page_breaks01.rb +36 -0
  310. data/test/regression/test_page_breaks02.rb +36 -0
  311. data/test/regression/test_page_breaks03.rb +36 -0
  312. data/test/regression/test_page_breaks04.rb +36 -0
  313. data/test/regression/test_page_breaks05.rb +36 -0
  314. data/test/regression/test_page_breaks06.rb +37 -0
  315. data/test/regression/test_page_view01.rb +36 -0
  316. data/test/regression/test_panes01.rb +66 -0
  317. data/test/regression/test_print_across01.rb +37 -0
  318. data/test/regression/test_print_area01.rb +36 -0
  319. data/test/regression/test_print_area02.rb +36 -0
  320. data/test/regression/test_print_area03.rb +36 -0
  321. data/test/regression/test_print_area04.rb +36 -0
  322. data/test/regression/test_print_area05.rb +36 -0
  323. data/test/regression/test_print_area06.rb +36 -0
  324. data/test/regression/test_print_area07.rb +37 -0
  325. data/test/regression/test_print_options01.rb +36 -0
  326. data/test/regression/test_print_options02.rb +36 -0
  327. data/test/regression/test_print_options03.rb +36 -0
  328. data/test/regression/test_print_options04.rb +36 -0
  329. data/test/regression/test_print_options05.rb +39 -0
  330. data/test/regression/test_print_options06.rb +37 -0
  331. data/test/regression/test_print_scale01.rb +37 -0
  332. data/test/regression/test_print_scale02.rb +37 -0
  333. data/test/regression/test_properties01.rb +40 -0
  334. data/test/regression/test_repeat01.rb +36 -0
  335. data/test/regression/test_repeat02.rb +36 -0
  336. data/test/regression/test_repeat03.rb +37 -0
  337. data/test/regression/test_repeat04.rb +36 -0
  338. data/test/regression/test_repeat05.rb +43 -0
  339. data/test/regression/test_rich_string01.rb +28 -0
  340. data/test/regression/test_rich_string02.rb +28 -0
  341. data/test/regression/test_rich_string03.rb +28 -0
  342. data/test/regression/test_rich_string04.rb +28 -0
  343. data/test/regression/test_rich_string05.rb +30 -0
  344. data/test/regression/test_rich_string06.rb +27 -0
  345. data/test/regression/test_rich_string07.rb +33 -0
  346. data/test/regression/test_rich_string08.rb +29 -0
  347. data/test/regression/test_rich_string09.rb +31 -0
  348. data/test/regression/test_rich_string10.rb +30 -0
  349. data/test/regression/test_rich_string11.rb +29 -0
  350. data/test/regression/test_row_col_format01.rb +24 -0
  351. data/test/regression/test_row_col_format02.rb +25 -0
  352. data/test/regression/test_row_col_format03.rb +24 -0
  353. data/test/regression/test_row_col_format04.rb +25 -0
  354. data/test/regression/test_row_col_format05.rb +26 -0
  355. data/test/regression/test_row_col_format06.rb +29 -0
  356. data/test/regression/test_row_col_format07.rb +24 -0
  357. data/test/regression/test_row_col_format08.rb +34 -0
  358. data/test/regression/test_row_col_format09.rb +33 -0
  359. data/test/regression/test_row_col_format10.rb +24 -0
  360. data/test/regression/test_row_col_format11.rb +23 -0
  361. data/test/regression/test_row_col_format12.rb +23 -0
  362. data/test/regression/test_row_col_format13.rb +28 -0
  363. data/test/regression/test_row_col_format14.rb +28 -0
  364. data/test/regression/test_shape_connect01.rb +46 -0
  365. data/test/regression/test_shape_connect02.rb +42 -0
  366. data/test/regression/test_shape_connect03.rb +78 -0
  367. data/test/regression/test_shape_connect04.rb +75 -0
  368. data/test/regression/test_shape_scale01.rb +47 -0
  369. data/test/regression/test_shape_stencil01.rb +44 -0
  370. data/test/regression/test_shared_strings01.rb +34 -0
  371. data/test/regression/test_shared_strings02.rb +47 -0
  372. data/test/regression/test_simple01.rb +24 -0
  373. data/test/regression/test_simple02.rb +32 -0
  374. data/test/regression/test_tab_color01.rb +29 -0
  375. data/test/regression/test_table01.rb +27 -0
  376. data/test/regression/test_table02.rb +37 -0
  377. data/test/regression/test_table03.rb +30 -0
  378. data/test/regression/test_table04.rb +34 -0
  379. data/test/regression/test_table05.rb +38 -0
  380. data/test/regression/test_table06.rb +41 -0
  381. data/test/regression/test_table07.rb +29 -0
  382. data/test/regression/test_table08.rb +48 -0
  383. data/test/regression/test_table09.rb +65 -0
  384. data/test/regression/test_table10.rb +68 -0
  385. data/test/regression/test_table11.rb +37 -0
  386. data/test/regression/test_table12.rb +36 -0
  387. data/test/regression/test_table13.rb +51 -0
  388. data/test/regression/test_table14.rb +51 -0
  389. data/test/regression/xlsx_files/array_formula01.xlsx +0 -0
  390. data/test/regression/xlsx_files/array_formula02.xlsx +0 -0
  391. data/test/regression/xlsx_files/autofilter00.xlsx +0 -0
  392. data/test/regression/xlsx_files/autofilter01.xlsx +0 -0
  393. data/test/regression/xlsx_files/autofilter02.xlsx +0 -0
  394. data/test/regression/xlsx_files/autofilter03.xlsx +0 -0
  395. data/test/regression/xlsx_files/autofilter04.xlsx +0 -0
  396. data/test/regression/xlsx_files/autofilter05.xlsx +0 -0
  397. data/test/regression/xlsx_files/autofilter06.xlsx +0 -0
  398. data/test/regression/xlsx_files/autofilter07.xlsx +0 -0
  399. data/test/regression/xlsx_files/chart_area01.xlsx +0 -0
  400. data/test/regression/xlsx_files/chart_area02.xlsx +0 -0
  401. data/test/regression/xlsx_files/chart_area03.xlsx +0 -0
  402. data/test/regression/xlsx_files/chart_area04.xlsx +0 -0
  403. data/test/regression/xlsx_files/chart_axis01.xlsx +0 -0
  404. data/test/regression/xlsx_files/chart_axis02.xlsx +0 -0
  405. data/test/regression/xlsx_files/chart_axis03.xlsx +0 -0
  406. data/test/regression/xlsx_files/chart_axis04.xlsx +0 -0
  407. data/test/regression/xlsx_files/chart_axis05.xlsx +0 -0
  408. data/test/regression/xlsx_files/chart_axis06.xlsx +0 -0
  409. data/test/regression/xlsx_files/chart_axis07.xlsx +0 -0
  410. data/test/regression/xlsx_files/chart_axis08.xlsx +0 -0
  411. data/test/regression/xlsx_files/chart_axis09.xlsx +0 -0
  412. data/test/regression/xlsx_files/chart_axis10.xlsx +0 -0
  413. data/test/regression/xlsx_files/chart_axis11.xlsx +0 -0
  414. data/test/regression/xlsx_files/chart_axis12.xlsx +0 -0
  415. data/test/regression/xlsx_files/chart_axis13.xlsx +0 -0
  416. data/test/regression/xlsx_files/chart_axis14.xlsx +0 -0
  417. data/test/regression/xlsx_files/chart_axis15.xlsx +0 -0
  418. data/test/regression/xlsx_files/chart_axis16.xlsx +0 -0
  419. data/test/regression/xlsx_files/chart_axis17.xlsx +0 -0
  420. data/test/regression/xlsx_files/chart_axis18.xlsx +0 -0
  421. data/test/regression/xlsx_files/chart_axis19.xlsx +0 -0
  422. data/test/regression/xlsx_files/chart_axis20.xlsx +0 -0
  423. data/test/regression/xlsx_files/chart_axis21.xlsx +0 -0
  424. data/test/regression/xlsx_files/chart_bar01.xlsx +0 -0
  425. data/test/regression/xlsx_files/chart_bar02.xlsx +0 -0
  426. data/test/regression/xlsx_files/chart_bar03.xlsx +0 -0
  427. data/test/regression/xlsx_files/chart_bar04.xlsx +0 -0
  428. data/test/regression/xlsx_files/chart_bar05.xlsx +0 -0
  429. data/test/regression/xlsx_files/chart_bar06.xlsx +0 -0
  430. data/test/regression/xlsx_files/chart_bar07.xlsx +0 -0
  431. data/test/regression/xlsx_files/chart_bar08.xlsx +0 -0
  432. data/test/regression/xlsx_files/chart_bar09.xlsx +0 -0
  433. data/test/regression/xlsx_files/chart_bar10.xlsx +0 -0
  434. data/test/regression/xlsx_files/chart_bar11.xlsx +0 -0
  435. data/test/regression/xlsx_files/chart_bar12.xlsx +0 -0
  436. data/test/regression/xlsx_files/chart_bar13.xlsx +0 -0
  437. data/test/regression/xlsx_files/chart_bar14.xlsx +0 -0
  438. data/test/regression/xlsx_files/chart_bar15.xlsx +0 -0
  439. data/test/regression/xlsx_files/chart_bar16.xlsx +0 -0
  440. data/test/regression/xlsx_files/chart_bar17.xlsx +0 -0
  441. data/test/regression/xlsx_files/chart_bar18.xlsx +0 -0
  442. data/test/regression/xlsx_files/chart_bar19.xlsx +0 -0
  443. data/test/regression/xlsx_files/chart_bar20.xlsx +0 -0
  444. data/test/regression/xlsx_files/chart_bar21.xlsx +0 -0
  445. data/test/regression/xlsx_files/chart_bar22.xlsx +0 -0
  446. data/test/regression/xlsx_files/chart_bar23.xlsx +0 -0
  447. data/test/regression/xlsx_files/chart_bar24.xlsx +0 -0
  448. data/test/regression/xlsx_files/chart_blank01.xlsx +0 -0
  449. data/test/regression/xlsx_files/chart_blank02.xlsx +0 -0
  450. data/test/regression/xlsx_files/chart_blank03.xlsx +0 -0
  451. data/test/regression/xlsx_files/chart_blank04.xlsx +0 -0
  452. data/test/regression/xlsx_files/chart_blank05.xlsx +0 -0
  453. data/test/regression/xlsx_files/chart_blank06.xlsx +0 -0
  454. data/test/regression/xlsx_files/chart_column01.xlsx +0 -0
  455. data/test/regression/xlsx_files/chart_column02.xlsx +0 -0
  456. data/test/regression/xlsx_files/chart_column03.xlsx +0 -0
  457. data/test/regression/xlsx_files/chart_column04.xlsx +0 -0
  458. data/test/regression/xlsx_files/chart_column05.xlsx +0 -0
  459. data/test/regression/xlsx_files/chart_column06.xlsx +0 -0
  460. data/test/regression/xlsx_files/chart_crossing01.xlsx +0 -0
  461. data/test/regression/xlsx_files/chart_crossing02.xlsx +0 -0
  462. data/test/regression/xlsx_files/chart_crossing03.xlsx +0 -0
  463. data/test/regression/xlsx_files/chart_crossing04.xlsx +0 -0
  464. data/test/regression/xlsx_files/chart_format01.xlsx +0 -0
  465. data/test/regression/xlsx_files/chart_format02.xlsx +0 -0
  466. data/test/regression/xlsx_files/chart_format03.xlsx +0 -0
  467. data/test/regression/xlsx_files/chart_format04.xlsx +0 -0
  468. data/test/regression/xlsx_files/chart_format05.xlsx +0 -0
  469. data/test/regression/xlsx_files/chart_format06.xlsx +0 -0
  470. data/test/regression/xlsx_files/chart_format07.xlsx +0 -0
  471. data/test/regression/xlsx_files/chart_format08.xlsx +0 -0
  472. data/test/regression/xlsx_files/chart_format09.xlsx +0 -0
  473. data/test/regression/xlsx_files/chart_format10.xlsx +0 -0
  474. data/test/regression/xlsx_files/chart_format11.xlsx +0 -0
  475. data/test/regression/xlsx_files/chart_format12.xlsx +0 -0
  476. data/test/regression/xlsx_files/chart_format13.xlsx +0 -0
  477. data/test/regression/xlsx_files/chart_format14.xlsx +0 -0
  478. data/test/regression/xlsx_files/chart_format15.xlsx +0 -0
  479. data/test/regression/xlsx_files/chart_format16.xlsx +0 -0
  480. data/test/regression/xlsx_files/chart_format17.xlsx +0 -0
  481. data/test/regression/xlsx_files/chart_format18.xlsx +0 -0
  482. data/test/regression/xlsx_files/chart_line01.xlsx +0 -0
  483. data/test/regression/xlsx_files/chart_line02.xlsx +0 -0
  484. data/test/regression/xlsx_files/chart_name01.xlsx +0 -0
  485. data/test/regression/xlsx_files/chart_name02.xlsx +0 -0
  486. data/test/regression/xlsx_files/chart_name03.xlsx +0 -0
  487. data/test/regression/xlsx_files/chart_pie01.xlsx +0 -0
  488. data/test/regression/xlsx_files/chart_scatter01.xlsx +0 -0
  489. data/test/regression/xlsx_files/chart_scatter02.xlsx +0 -0
  490. data/test/regression/xlsx_files/chart_scatter03.xlsx +0 -0
  491. data/test/regression/xlsx_files/chart_scatter04.xlsx +0 -0
  492. data/test/regression/xlsx_files/chart_scatter05.xlsx +0 -0
  493. data/test/regression/xlsx_files/chart_scatter06.xlsx +0 -0
  494. data/test/regression/xlsx_files/chart_scatter07.xlsx +0 -0
  495. data/test/regression/xlsx_files/chart_sparse01.xlsx +0 -0
  496. data/test/regression/xlsx_files/chart_stock01.xlsx +0 -0
  497. data/test/regression/xlsx_files/chart_stock02.xlsx +0 -0
  498. data/test/regression/xlsx_files/chart_str01.xlsx +0 -0
  499. data/test/regression/xlsx_files/chart_str02.xlsx +0 -0
  500. data/test/regression/xlsx_files/chartsheet01.xlsx +0 -0
  501. data/test/regression/xlsx_files/chartsheet02.xlsx +0 -0
  502. data/test/regression/xlsx_files/chartsheet03.xlsx +0 -0
  503. data/test/regression/xlsx_files/chartsheet04.xlsx +0 -0
  504. data/test/regression/xlsx_files/chartsheet05.xlsx +0 -0
  505. data/test/regression/xlsx_files/chartsheet06.xlsx +0 -0
  506. data/test/regression/xlsx_files/chartsheet07.xlsx +0 -0
  507. data/test/regression/xlsx_files/chartsheet08.xlsx +0 -0
  508. data/test/regression/xlsx_files/chartsheet09.xlsx +0 -0
  509. data/test/regression/xlsx_files/comment01.xlsx +0 -0
  510. data/test/regression/xlsx_files/comment02.xlsx +0 -0
  511. data/test/regression/xlsx_files/comment03.xlsx +0 -0
  512. data/test/regression/xlsx_files/comment04.xlsx +0 -0
  513. data/test/regression/xlsx_files/comment05.xlsx +0 -0
  514. data/test/regression/xlsx_files/comment06.xlsx +0 -0
  515. data/test/regression/xlsx_files/comment07.xlsx +0 -0
  516. data/test/regression/xlsx_files/comment08.xlsx +0 -0
  517. data/test/regression/xlsx_files/comment09.xlsx +0 -0
  518. data/test/regression/xlsx_files/comment10.xlsx +0 -0
  519. data/test/regression/xlsx_files/cond_format01.xlsx +0 -0
  520. data/test/regression/xlsx_files/cond_format02.xlsx +0 -0
  521. data/test/regression/xlsx_files/cond_format03.xlsx +0 -0
  522. data/test/regression/xlsx_files/cond_format04.xlsx +0 -0
  523. data/test/regression/xlsx_files/cond_format05.xlsx +0 -0
  524. data/test/regression/xlsx_files/cond_format06.xlsx +0 -0
  525. data/test/regression/xlsx_files/cond_format07.xlsx +0 -0
  526. data/test/regression/xlsx_files/cond_format08.xlsx +0 -0
  527. data/test/regression/xlsx_files/cond_format10.xlsx +0 -0
  528. data/test/regression/xlsx_files/cond_format11.xlsx +0 -0
  529. data/test/regression/xlsx_files/cond_format12.xlsx +0 -0
  530. data/test/regression/xlsx_files/custom_colors01.xlsx +0 -0
  531. data/test/regression/xlsx_files/date_1904_01.xlsx +0 -0
  532. data/test/regression/xlsx_files/date_1904_02.xlsx +0 -0
  533. data/test/regression/xlsx_files/defined_name01.xlsx +0 -0
  534. data/test/regression/xlsx_files/escapes01.xlsx +0 -0
  535. data/test/regression/xlsx_files/escapes02.xlsx +0 -0
  536. data/test/regression/xlsx_files/escapes03.xlsx +0 -0
  537. data/test/regression/xlsx_files/filehandle01.xlsx +0 -0
  538. data/test/regression/xlsx_files/fit_to_pages01.xlsx +0 -0
  539. data/test/regression/xlsx_files/fit_to_pages02.xlsx +0 -0
  540. data/test/regression/xlsx_files/fit_to_pages03.xlsx +0 -0
  541. data/test/regression/xlsx_files/fit_to_pages04.xlsx +0 -0
  542. data/test/regression/xlsx_files/fit_to_pages05.xlsx +0 -0
  543. data/test/regression/xlsx_files/format01.xlsx +0 -0
  544. data/test/regression/xlsx_files/format02.xlsx +0 -0
  545. data/test/regression/xlsx_files/format03.xlsx +0 -0
  546. data/test/regression/xlsx_files/format04.xlsx +0 -0
  547. data/test/regression/xlsx_files/gridlines01.xlsx +0 -0
  548. data/test/regression/xlsx_files/hyperlink01.xlsx +0 -0
  549. data/test/regression/xlsx_files/hyperlink02.xlsx +0 -0
  550. data/test/regression/xlsx_files/hyperlink03.xlsx +0 -0
  551. data/test/regression/xlsx_files/hyperlink04.xlsx +0 -0
  552. data/test/regression/xlsx_files/hyperlink05.xlsx +0 -0
  553. data/test/regression/xlsx_files/hyperlink06.xlsx +0 -0
  554. data/test/regression/xlsx_files/hyperlink07.xlsx +0 -0
  555. data/test/regression/xlsx_files/hyperlink08.xlsx +0 -0
  556. data/test/regression/xlsx_files/hyperlink09.xlsx +0 -0
  557. data/test/regression/xlsx_files/hyperlink10.xlsx +0 -0
  558. data/test/regression/xlsx_files/hyperlink11.xlsx +0 -0
  559. data/test/regression/xlsx_files/hyperlink12.xlsx +0 -0
  560. data/test/regression/xlsx_files/hyperlink13.xlsx +0 -0
  561. data/test/regression/xlsx_files/hyperlink14.xlsx +0 -0
  562. data/test/regression/xlsx_files/hyperlink15.xlsx +0 -0
  563. data/test/regression/xlsx_files/hyperlink16.xlsx +0 -0
  564. data/test/regression/xlsx_files/hyperlink17.xlsx +0 -0
  565. data/test/regression/xlsx_files/hyperlink18.xlsx +0 -0
  566. data/test/regression/xlsx_files/image01.xlsx +0 -0
  567. data/test/regression/xlsx_files/image02.xlsx +0 -0
  568. data/test/regression/xlsx_files/image03.xlsx +0 -0
  569. data/test/regression/xlsx_files/image04.xlsx +0 -0
  570. data/test/regression/xlsx_files/image05.xlsx +0 -0
  571. data/test/regression/xlsx_files/image06.xlsx +0 -0
  572. data/test/regression/xlsx_files/image07.xlsx +0 -0
  573. data/test/regression/xlsx_files/outline01.xlsx +0 -0
  574. data/test/regression/xlsx_files/outline02.xlsx +0 -0
  575. data/test/regression/xlsx_files/outline03.xlsx +0 -0
  576. data/test/regression/xlsx_files/outline04.xlsx +0 -0
  577. data/test/regression/xlsx_files/outline05.xlsx +0 -0
  578. data/test/regression/xlsx_files/outline06.xlsx +0 -0
  579. data/test/regression/xlsx_files/page_breaks01.xlsx +0 -0
  580. data/test/regression/xlsx_files/page_breaks02.xlsx +0 -0
  581. data/test/regression/xlsx_files/page_breaks03.xlsx +0 -0
  582. data/test/regression/xlsx_files/page_breaks04.xlsx +0 -0
  583. data/test/regression/xlsx_files/page_breaks05.xlsx +0 -0
  584. data/test/regression/xlsx_files/page_breaks06.xlsx +0 -0
  585. data/test/regression/xlsx_files/page_view01.xlsx +0 -0
  586. data/test/regression/xlsx_files/panes01.xlsx +0 -0
  587. data/test/regression/xlsx_files/print_across01.xlsx +0 -0
  588. data/test/regression/xlsx_files/print_area01.xlsx +0 -0
  589. data/test/regression/xlsx_files/print_area02.xlsx +0 -0
  590. data/test/regression/xlsx_files/print_area03.xlsx +0 -0
  591. data/test/regression/xlsx_files/print_area04.xlsx +0 -0
  592. data/test/regression/xlsx_files/print_area05.xlsx +0 -0
  593. data/test/regression/xlsx_files/print_area06.xlsx +0 -0
  594. data/test/regression/xlsx_files/print_area07.xlsx +0 -0
  595. data/test/regression/xlsx_files/print_options01.xlsx +0 -0
  596. data/test/regression/xlsx_files/print_options02.xlsx +0 -0
  597. data/test/regression/xlsx_files/print_options03.xlsx +0 -0
  598. data/test/regression/xlsx_files/print_options04.xlsx +0 -0
  599. data/test/regression/xlsx_files/print_options05.xlsx +0 -0
  600. data/test/regression/xlsx_files/print_options06.xlsx +0 -0
  601. data/test/regression/xlsx_files/print_scale01.xlsx +0 -0
  602. data/test/regression/xlsx_files/print_scale02.xlsx +0 -0
  603. data/test/regression/xlsx_files/properties01.xlsx +0 -0
  604. data/test/regression/xlsx_files/repeat01.xlsx +0 -0
  605. data/test/regression/xlsx_files/repeat02.xlsx +0 -0
  606. data/test/regression/xlsx_files/repeat03.xlsx +0 -0
  607. data/test/regression/xlsx_files/repeat04.xlsx +0 -0
  608. data/test/regression/xlsx_files/repeat05.xlsx +0 -0
  609. data/test/regression/xlsx_files/rich_string01.xlsx +0 -0
  610. data/test/regression/xlsx_files/rich_string02.xlsx +0 -0
  611. data/test/regression/xlsx_files/rich_string03.xlsx +0 -0
  612. data/test/regression/xlsx_files/rich_string04.xlsx +0 -0
  613. data/test/regression/xlsx_files/rich_string05.xlsx +0 -0
  614. data/test/regression/xlsx_files/rich_string06.xlsx +0 -0
  615. data/test/regression/xlsx_files/rich_string07.xlsx +0 -0
  616. data/test/regression/xlsx_files/rich_string08.xlsx +0 -0
  617. data/test/regression/xlsx_files/rich_string09.xlsx +0 -0
  618. data/test/regression/xlsx_files/rich_string10.xlsx +0 -0
  619. data/test/regression/xlsx_files/rich_string11.xlsx +0 -0
  620. data/test/regression/xlsx_files/row_col_format01.xlsx +0 -0
  621. data/test/regression/xlsx_files/row_col_format02.xlsx +0 -0
  622. data/test/regression/xlsx_files/row_col_format03.xlsx +0 -0
  623. data/test/regression/xlsx_files/row_col_format04.xlsx +0 -0
  624. data/test/regression/xlsx_files/row_col_format05.xlsx +0 -0
  625. data/test/regression/xlsx_files/row_col_format06.xlsx +0 -0
  626. data/test/regression/xlsx_files/row_col_format07.xlsx +0 -0
  627. data/test/regression/xlsx_files/row_col_format08.xlsx +0 -0
  628. data/test/regression/xlsx_files/row_col_format09.xlsx +0 -0
  629. data/test/regression/xlsx_files/row_col_format10.xlsx +0 -0
  630. data/test/regression/xlsx_files/row_col_format11.xlsx +0 -0
  631. data/test/regression/xlsx_files/row_col_format12.xlsx +0 -0
  632. data/test/regression/xlsx_files/row_col_format13.xlsx +0 -0
  633. data/test/regression/xlsx_files/row_col_format14.xlsx +0 -0
  634. data/test/regression/xlsx_files/shape_connect01.xlsx +0 -0
  635. data/test/regression/xlsx_files/shape_connect02.xlsx +0 -0
  636. data/test/regression/xlsx_files/shape_connect03.xlsx +0 -0
  637. data/test/regression/xlsx_files/shape_connect04.xlsx +0 -0
  638. data/test/regression/xlsx_files/shape_scale01.xlsx +0 -0
  639. data/test/regression/xlsx_files/shape_stencil01.xlsx +0 -0
  640. data/test/regression/xlsx_files/shared_strings01.xlsx +0 -0
  641. data/test/regression/xlsx_files/shared_strings02.xlsx +0 -0
  642. data/test/regression/xlsx_files/simple01.xlsx +0 -0
  643. data/test/regression/xlsx_files/simple02.xlsx +0 -0
  644. data/test/regression/xlsx_files/tab_color01.xlsx +0 -0
  645. data/test/regression/xlsx_files/table01.xlsx +0 -0
  646. data/test/regression/xlsx_files/table02.xlsx +0 -0
  647. data/test/regression/xlsx_files/table03.xlsx +0 -0
  648. data/test/regression/xlsx_files/table04.xlsx +0 -0
  649. data/test/regression/xlsx_files/table05.xlsx +0 -0
  650. data/test/regression/xlsx_files/table06.xlsx +0 -0
  651. data/test/regression/xlsx_files/table07.xlsx +0 -0
  652. data/test/regression/xlsx_files/table08.xlsx +0 -0
  653. data/test/regression/xlsx_files/table09.xlsx +0 -0
  654. data/test/regression/xlsx_files/table10.xlsx +0 -0
  655. data/test/regression/xlsx_files/table11.xlsx +0 -0
  656. data/test/regression/xlsx_files/table12.xlsx +0 -0
  657. data/test/regression/xlsx_files/table13.xlsx +0 -0
  658. data/test/regression/xlsx_files/table14.xlsx +0 -0
  659. data/test/test_example_match.rb +2386 -889
  660. data/test/workbook/test_write_defined_names.rb +1 -1
  661. data/test/worksheet/test_cond_format_01.rb +82 -0
  662. data/test/worksheet/test_cond_format_02.rb +87 -0
  663. data/test/worksheet/test_cond_format_03.rb +97 -0
  664. data/test/worksheet/test_cond_format_04.rb +85 -0
  665. data/test/worksheet/test_cond_format_05.rb +96 -0
  666. data/test/worksheet/test_cond_format_06.rb +106 -0
  667. data/test/worksheet/test_cond_format_07.rb +116 -0
  668. data/test/worksheet/test_cond_format_08.rb +115 -0
  669. data/test/worksheet/test_cond_format_09.rb +108 -0
  670. data/test/worksheet/test_cond_format_10.rb +83 -0
  671. data/test/worksheet/test_cond_format_11.rb +85 -0
  672. data/test/worksheet/test_cond_format_12.rb +133 -0
  673. data/test/worksheet/test_cond_format_13.rb +135 -0
  674. data/test/worksheet/test_cond_format_14.rb +132 -0
  675. data/test/worksheet/test_cond_format_15.rb +93 -0
  676. data/test/worksheet/test_cond_format_16.rb +138 -0
  677. data/test/worksheet/test_cond_format_17.rb +141 -0
  678. data/test/worksheet/test_cond_format_18.rb +135 -0
  679. data/test/worksheet/test_cond_format_19.rb +139 -0
  680. data/test/worksheet/test_write_array_formula_01.rb +3 -4
  681. data/test/worksheet/test_write_data_validation_01.rb +1 -1
  682. data/test/worksheet/test_write_data_validation_02.rb +2 -2
  683. data/test/worksheet/test_write_methods.rb +6 -1
  684. data/test/worksheet/test_write_page_setup.rb +1 -1
  685. data/test/worksheet/test_write_sheet_view.rb +1 -1
  686. data/write_xlsx.gemspec +644 -9
  687. metadata +649 -22
  688. data/test/chart/test_write_chart_space.rb +0 -15
@@ -5,16 +5,16 @@
5
5
  class TestExampleMatch < Test::Unit::TestCase
6
6
  def setup
7
7
  setup_dir_var
8
- Writexlsx::Utility.delete_files(@expected_dir) if File.exist?(@expected_dir)
9
- Writexlsx::Utility.delete_files(@result_dir) if File.exist?(@result_dir)
10
- raise "cannot create test working directory." if File.exist?(@expected_dir) || File.exist?(@result_dir)
11
- @obj = Writexlsx::Package::XMLWriterSimple.new
8
+ end
9
+
10
+ def teardown
11
+ File.delete(@xlsx) if File.exist?(@xlsx)
12
12
  end
13
13
 
14
14
  def test_a_simple
15
- xlsx = 'a_simple.xlsx'
15
+ @xlsx = 'a_simple.xlsx'
16
16
  # Create a new workbook called simple.xls and add a worksheet
17
- workbook = WriteXLSX.new(xlsx)
17
+ workbook = WriteXLSX.new(@xlsx)
18
18
  worksheet = workbook.add_worksheet
19
19
 
20
20
  # The general syntax is write(row, column, token). Note that row and
@@ -43,12 +43,12 @@ def test_a_simple
43
43
  worksheet.write(10, 0, 'http://www.ruby-lang.org/', hyperlink_format)
44
44
 
45
45
  workbook.close
46
- compare_xlsx(@expected_dir, @result_dir, xlsx)
46
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
47
47
  end
48
48
 
49
49
  def test_array_formula
50
- xlsx = 'array_formula.xlsx'
51
- workbook = WriteXLSX.new(xlsx)
50
+ @xlsx = 'array_formula.xlsx'
51
+ workbook = WriteXLSX.new(@xlsx)
52
52
  worksheet = workbook.add_worksheet
53
53
 
54
54
  # Write some test data.
@@ -65,12 +65,276 @@ def test_array_formula
65
65
  worksheet.write_array_formula('A5:A7', '{=TREND(C5:C7,B5:B7)}')
66
66
 
67
67
  workbook.close
68
- compare_xlsx(@expected_dir, @result_dir, xlsx)
68
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
69
+ end
70
+
71
+ def test_autofilter
72
+ @xlsx = 'autofilter.xlsx'
73
+ workbook = WriteXLSX.new(@xlsx)
74
+
75
+ worksheet1 = workbook.add_worksheet
76
+ worksheet2 = workbook.add_worksheet
77
+ worksheet3 = workbook.add_worksheet
78
+ worksheet4 = workbook.add_worksheet
79
+ worksheet5 = workbook.add_worksheet
80
+ worksheet6 = workbook.add_worksheet
81
+
82
+ bold = workbook.add_format(:bold => 1 )
83
+
84
+ # Extract the data embedded at the end of this file.
85
+ data_array = autofilter_data.split("\n")
86
+ headings = data_array.shift.split
87
+ data = []
88
+ data_array.each { |line| data << line.split }
89
+
90
+ # Set up several sheets with the same data.
91
+ workbook.worksheets.each do |worksheet|
92
+ worksheet.set_column('A:D', 12 )
93
+ worksheet.set_row(0, 20, bold )
94
+ worksheet.write('A1', headings )
95
+ end
96
+
97
+
98
+ ###############################################################################
99
+ #
100
+ # Example 1. Autofilter without conditions.
101
+ #
102
+
103
+ worksheet1.autofilter('A1:D51' )
104
+ worksheet1.write('A2', [ data ] )
105
+
106
+ ###############################################################################
107
+ #
108
+ #
109
+ # Example 2. Autofilter with a filter condition in the first column.
110
+ #
111
+
112
+ # The range in this example is the same as above but in row-column notation.
113
+ worksheet2.autofilter(0, 0, 50, 3 )
114
+
115
+ # The placeholder "Region" in the filter is ignored and can be any string
116
+ # that adds clarity to the expression.
117
+ #
118
+ worksheet2.filter_column(0, 'Region eq East' )
119
+
120
+ #
121
+ # Hide the rows that don't match the filter criteria.
122
+ #
123
+ row = 1
124
+
125
+ data.each do |row_data|
126
+ region = row_data[0]
127
+
128
+ worksheet2.set_row(row, nil, nil, 1) unless region == 'East'
129
+ worksheet2.write(row, 0, row_data)
130
+ row += 1
131
+ end
132
+
133
+ ###############################################################################
134
+ #
135
+ #
136
+ # Example 3. Autofilter with a dual filter condition in one of the columns.
137
+ #
138
+
139
+ worksheet3.autofilter('A1:D51' )
140
+
141
+ worksheet3.filter_column('A', 'x eq East or x eq South' )
142
+
143
+ #
144
+ # Hide the rows that don't match the filter criteria.
145
+ #
146
+ row = 1
147
+
148
+ data.each do |row_data|
149
+ region = row_data[0]
150
+
151
+ worksheet3.set_row(row, nil, nil, 1) unless region == 'East' || region == 'South'
152
+ worksheet3.write(row, 0,row_data)
153
+ row += 1
154
+ end
155
+
156
+
157
+ ###############################################################################
158
+ #
159
+ #
160
+ # Example 4. Autofilter with filter conditions in two columns.
161
+ #
162
+
163
+ worksheet4.autofilter('A1:D51')
164
+
165
+ worksheet4.filter_column('A', 'x eq East')
166
+ worksheet4.filter_column('C', 'x > 3000 and x < 8000')
167
+
168
+ #
169
+ # Hide the rows that don't match the filter criteria.
170
+ #
171
+ row = 1
172
+
173
+ data.each do |row_data|
174
+ region = row_data[0]
175
+ volume = row_data[2]
176
+
177
+ unless region == 'East' && volume.to_i > 3000 && volume.to_i < 8000
178
+ # Hide row.
179
+ worksheet4.set_row(row, nil, nil, 1)
180
+ end
181
+
182
+ worksheet4.write(row, 0, row_data)
183
+ row += 1
184
+ end
185
+
186
+
187
+ ###############################################################################
188
+ #
189
+ #
190
+ # Example 5. Autofilter with filter for blanks.
191
+ #
192
+
193
+ # Create a blank cell in our test data.
194
+ data[5][0] = ''
195
+
196
+ worksheet5.autofilter('A1:D51')
197
+ worksheet5.filter_column('A', 'x eq Blanks')
198
+
199
+ #
200
+ # Hide the rows that don't match the filter criteria.
201
+ #
202
+ row = 1
203
+
204
+ data.each do |row_data|
205
+ region = row_data[0]
206
+
207
+ worksheet5.set_row(row, nil, nil, 1) unless region == ''
208
+
209
+ worksheet5.write(row, 0, row_data)
210
+ row += 1
211
+ end
212
+
213
+
214
+ ###############################################################################
215
+ #
216
+ #
217
+ # Example 6. Autofilter with filter for non-blanks.
218
+ #
219
+
220
+
221
+ worksheet6.autofilter('A1:D51')
222
+ worksheet6.filter_column('A', 'x eq NonBlanks')
223
+
224
+ #
225
+ # Hide the rows that don't match the filter criteria.
226
+ #
227
+ row = 1
228
+
229
+ data.each do |row_data|
230
+ region = row_data[0]
231
+
232
+ worksheet6.set_row(row, nil, nil, 1) unless region != ''
233
+
234
+ worksheet6.write(row, 0, row_data)
235
+ row += 1
236
+ end
237
+
238
+ workbook.close
239
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
240
+ end
241
+
242
+ def test_chart_scatter06
243
+ @xlsx = 'chart_scatter06.xlsx'
244
+ workbook = WriteXLSX.new(@xlsx)
245
+ worksheet = workbook.add_worksheet
246
+ chart = workbook.add_chart(:type => 'scatter', :embedded => 1)
247
+
248
+ # For testing, copy the randomly generated axis ids in the target xlsx file.
249
+ chart.instance_variable_set(:@axis_ids, [57708544, 44297600])
250
+
251
+ data = [
252
+ [ 1, 2, 3, 4, 5 ],
253
+ [ 2, 4, 6, 8, 10 ],
254
+ [ 3, 6, 9, 12, 15 ]
255
+
256
+ ]
257
+
258
+ worksheet.write('A1', data)
259
+
260
+ chart.add_series(
261
+ :categories => '=Sheet1!$A$1:$A$5',
262
+ :values => '=Sheet1!$B$1:$B$5'
263
+ )
264
+
265
+ chart.add_series(
266
+ :categories => '=Sheet1!$A$1:$A$5',
267
+ :values => '=Sheet1!$C$1:$C$5'
268
+ )
269
+
270
+ chart.set_x_axis(:minor_unit => 1, :major_unit => 3)
271
+ chart.set_y_axis(:minor_unit => 2, :major_unit => 4)
272
+
273
+ worksheet.insert_chart('E9', chart)
274
+
275
+ workbook.close
276
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
277
+ end
278
+
279
+ def autofilter_data
280
+ <<EOS
281
+ Region Item Volume Month
282
+ East Apple 9000 July
283
+ East Apple 5000 July
284
+ South Orange 9000 September
285
+ North Apple 2000 November
286
+ West Apple 9000 November
287
+ South Pear 7000 October
288
+ North Pear 9000 August
289
+ West Orange 1000 December
290
+ West Grape 1000 November
291
+ South Pear 10000 April
292
+ West Grape 6000 January
293
+ South Orange 3000 May
294
+ North Apple 3000 December
295
+ South Apple 7000 February
296
+ West Grape 1000 December
297
+ East Grape 8000 February
298
+ South Grape 10000 June
299
+ West Pear 7000 December
300
+ South Apple 2000 October
301
+ East Grape 7000 December
302
+ North Grape 6000 April
303
+ East Pear 8000 February
304
+ North Apple 7000 August
305
+ North Orange 7000 July
306
+ North Apple 6000 June
307
+ South Grape 8000 September
308
+ West Apple 3000 October
309
+ South Orange 10000 November
310
+ West Grape 4000 July
311
+ North Orange 5000 August
312
+ East Orange 1000 November
313
+ East Orange 4000 October
314
+ North Grape 5000 August
315
+ East Apple 1000 December
316
+ South Apple 10000 March
317
+ East Grape 7000 October
318
+ West Grape 1000 September
319
+ East Grape 10000 October
320
+ South Orange 8000 March
321
+ North Apple 4000 July
322
+ South Orange 5000 July
323
+ West Apple 4000 June
324
+ East Apple 5000 April
325
+ North Pear 3000 August
326
+ East Grape 9000 November
327
+ North Orange 8000 October
328
+ East Apple 10000 June
329
+ South Pear 1000 December
330
+ North Grape 10000 July
331
+ East Grape 6000 February
332
+ EOS
69
333
  end
70
334
 
71
335
  def test_chart_area
72
- xlsx = 'chart_area.xlsx'
73
- workbook = WriteXLSX.new(xlsx)
336
+ @xlsx = 'chart_area.xlsx'
337
+ workbook = WriteXLSX.new(@xlsx)
74
338
  worksheet = workbook.add_worksheet
75
339
  bold = workbook.add_format(:bold => 1)
76
340
 
@@ -115,12 +379,12 @@ def test_chart_area
115
379
  worksheet.insert_chart('D2', chart, 25, 10)
116
380
 
117
381
  workbook.close
118
- compare_xlsx(@expected_dir, @result_dir, xlsx)
382
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
119
383
  end
120
384
 
121
385
  def test_chart_bar
122
- xlsx = 'chart_bar.xlsx'
123
- workbook = WriteXLSX.new(xlsx)
386
+ @xlsx = 'chart_bar.xlsx'
387
+ workbook = WriteXLSX.new(@xlsx)
124
388
  worksheet = workbook.add_worksheet
125
389
  bold = workbook.add_format(:bold => 1)
126
390
 
@@ -165,12 +429,12 @@ def test_chart_bar
165
429
  worksheet.insert_chart('D2', chart, 25, 10)
166
430
 
167
431
  workbook.close
168
- compare_xlsx(@expected_dir, @result_dir, xlsx)
432
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
169
433
  end
170
434
 
171
435
  def test_chart_column
172
- xlsx = 'chart_column.xlsx'
173
- workbook = WriteXLSX.new(xlsx)
436
+ @xlsx = 'chart_column.xlsx'
437
+ workbook = WriteXLSX.new(@xlsx)
174
438
  worksheet = workbook.add_worksheet
175
439
  bold = workbook.add_format(:bold => 1)
176
440
 
@@ -215,12 +479,12 @@ def test_chart_column
215
479
  worksheet.insert_chart('D2', chart, 25, 10)
216
480
 
217
481
  workbook.close
218
- compare_xlsx(@expected_dir, @result_dir, xlsx)
482
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
219
483
  end
220
484
 
221
485
  def test_chart_line
222
- xlsx = 'chart_line.xlsx'
223
- workbook = WriteXLSX.new(xlsx)
486
+ @xlsx = 'chart_line.xlsx'
487
+ workbook = WriteXLSX.new(@xlsx)
224
488
  worksheet = workbook.add_worksheet
225
489
  bold = workbook.add_format(:bold => 1)
226
490
 
@@ -265,12 +529,12 @@ def test_chart_line
265
529
  worksheet.insert_chart('D2', chart, 25, 10)
266
530
 
267
531
  workbook.close
268
- compare_xlsx(@expected_dir, @result_dir, xlsx)
532
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
269
533
  end
270
534
 
271
535
  def test_chart_pie
272
- xlsx = 'chart_pie.xlsx'
273
- workbook = WriteXLSX.new(xlsx)
536
+ @xlsx = 'chart_pie.xlsx'
537
+ workbook = WriteXLSX.new(@xlsx)
274
538
  worksheet = workbook.add_worksheet
275
539
  bold = workbook.add_format(:bold => 1)
276
540
 
@@ -305,12 +569,12 @@ def test_chart_pie
305
569
  worksheet.insert_chart('C2', chart, 25, 10)
306
570
 
307
571
  workbook.close
308
- compare_xlsx(@expected_dir, @result_dir, xlsx)
572
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
309
573
  end
310
574
 
311
575
  def test_chart_scatter
312
- xlsx = 'chart_scatter.xlsx'
313
- workbook = WriteXLSX.new(xlsx)
576
+ @xlsx = 'chart_scatter.xlsx'
577
+ workbook = WriteXLSX.new(@xlsx)
314
578
  worksheet = workbook.add_worksheet
315
579
  bold = workbook.add_format(:bold => 1)
316
580
 
@@ -355,12 +619,12 @@ def test_chart_scatter
355
619
  worksheet.insert_chart('D2', chart, 25, 10)
356
620
 
357
621
  workbook.close
358
- compare_xlsx(@expected_dir, @result_dir, xlsx)
622
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
359
623
  end
360
624
 
361
625
  def test_chart_stock
362
- xlsx = 'chart_stock.xlsx'
363
- workbook = WriteXLSX.new(xlsx)
626
+ @xlsx = 'chart_stock.xlsx'
627
+ workbook = WriteXLSX.new(@xlsx)
364
628
  worksheet = workbook.add_worksheet
365
629
  bold = workbook.add_format(:bold => 1)
366
630
  date_format = workbook.add_format(:num_format => 'dd/mm/yyyy')
@@ -411,19 +675,412 @@ def test_chart_stock
411
675
  worksheet.insert_chart('E9', chart)
412
676
 
413
677
  workbook.close
414
- compare_xlsx(@expected_dir, @result_dir, xlsx)
678
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
415
679
  end
416
680
 
417
- def test_conditional_format
418
- xlsx = 'conditional_format.xlsx'
419
- workbook = WriteXLSX.new(xlsx)
420
- worksheet1 = workbook.add_worksheet
681
+ def test_chart_secondary_axis
682
+ @xlsx = 'chart_secondary_axis.xlsx'
683
+ workbook = WriteXLSX.new(@xlsx)
684
+ worksheet = workbook.add_worksheet
685
+ bold = workbook.add_format(:bold => 1)
421
686
 
422
- # Light red fill with dark red text.
423
- format1 = workbook.add_format(
424
- :bg_color => '#FFC7CE',
425
- :color => '#9C0006'
426
- )
687
+ # Add the worksheet data that the charts will refer to.
688
+ headings = [ 'Aliens', 'Humans']
689
+ data = [
690
+ [ 2, 3, 4, 5, 6, 7 ],
691
+ [ 10, 40, 50, 20, 10, 50 ]
692
+ ]
693
+
694
+ worksheet.write('A1', headings, bold)
695
+ worksheet.write('A2', data)
696
+
697
+ # Create a new chart object. In this case an embedded chart.
698
+ chart = workbook.add_chart(:type => 'line', :embedded => 1)
699
+
700
+ # Configure the first series.
701
+ chart.add_series(
702
+ :name => '=Sheet1!$A$1',
703
+ :values => '=Sheet1!$A$2:$A$7',
704
+ :y2_axis => 1
705
+ )
706
+
707
+ chart.add_series(
708
+ :name => '=Sheet1!$B$1',
709
+ :values => '=Sheet1!$B$2:$B$7'
710
+ )
711
+
712
+ chart.set_legend(:position => 'right')
713
+
714
+ # Add a chart title and some axis labels.
715
+ chart.set_title(:name => 'Survey results')
716
+ chart.set_x_axis(:name => 'Days')
717
+ chart.set_y_axis(:name => 'Population', :major_gridlines => {:show => 0})
718
+ chart.set_y2_axis(:name => 'Laser wounds')
719
+
720
+ # Insert the chart into the worksheet (with an offset).
721
+ worksheet.insert_chart('D2', chart, 25, 10)
722
+
723
+ workbook.close
724
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
725
+ end
726
+
727
+ def test_comments1
728
+ @xlsx = 'comments1.xlsx'
729
+ workbook = WriteXLSX.new(@xlsx)
730
+ worksheet = workbook.add_worksheet
731
+
732
+ worksheet.write('A1', 'Hello')
733
+ worksheet.write_comment('A1', 'This is a comment')
734
+
735
+ workbook.close
736
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
737
+ end
738
+
739
+ def test_comments2
740
+ @xlsx = 'comments2.xlsx'
741
+ workbook = WriteXLSX.new(@xlsx)
742
+
743
+ text_wrap = workbook.add_format( :text_wrap => 1, :valign => 'top' )
744
+ worksheet1 = workbook.add_worksheet
745
+ worksheet2 = workbook.add_worksheet
746
+ worksheet3 = workbook.add_worksheet
747
+ worksheet4 = workbook.add_worksheet
748
+ worksheet5 = workbook.add_worksheet
749
+ worksheet6 = workbook.add_worksheet
750
+ worksheet7 = workbook.add_worksheet
751
+ worksheet8 = workbook.add_worksheet
752
+
753
+
754
+ # Variables that we will use in each example.
755
+ cell_text = ''
756
+ comment = ''
757
+
758
+
759
+ ###############################################################################
760
+ #
761
+ # Example 1. Demonstrates a simple cell comments without formatting.
762
+ # comments.
763
+ #
764
+
765
+ # Set up some formatting.
766
+ worksheet1.set_column( 'C:C', 25 )
767
+ worksheet1.set_row( 2, 50 )
768
+ worksheet1.set_row( 5, 50 )
769
+
770
+
771
+ # Simple ascii string.
772
+ cell_text = 'Hold the mouse over this cell to see the comment.'
773
+
774
+ comment = 'This is a comment.'
775
+
776
+ worksheet1.write( 'C3', cell_text, text_wrap )
777
+ worksheet1.write_comment( 'C3', comment )
778
+
779
+ cell_text = 'This is a UTF-8 string.'
780
+ comment = '☺'
781
+
782
+ worksheet1.write( 'C6', cell_text, text_wrap )
783
+ worksheet1.write_comment( 'C6', comment )
784
+
785
+
786
+
787
+ ###############################################################################
788
+ #
789
+ # Example 2. Demonstrates visible and hidden comments.
790
+ #
791
+
792
+ # Set up some formatting.
793
+ worksheet2.set_column( 'C:C', 25 )
794
+ worksheet2.set_row( 2, 50 )
795
+ worksheet2.set_row( 5, 50 )
796
+
797
+
798
+ cell_text = 'This cell comment is visible.'
799
+
800
+ comment = 'Hello.'
801
+
802
+ worksheet2.write( 'C3', cell_text, text_wrap )
803
+ worksheet2.write_comment( 'C3', comment, :visible => 1 )
804
+
805
+
806
+ cell_text = "This cell comment isn't visible (the default)."
807
+
808
+ comment = 'Hello.'
809
+
810
+ worksheet2.write( 'C6', cell_text, text_wrap )
811
+ worksheet2.write_comment( 'C6', comment )
812
+
813
+
814
+ ###############################################################################
815
+ #
816
+ # Example 3. Demonstrates visible and hidden comments set at the worksheet
817
+ # level.
818
+ #
819
+
820
+ # Set up some formatting.
821
+ worksheet3.set_column( 'C:C', 25 )
822
+ worksheet3.set_row( 2, 50 )
823
+ worksheet3.set_row( 5, 50 )
824
+ worksheet3.set_row( 8, 50 )
825
+
826
+ # Make all comments on the worksheet visible.
827
+ worksheet3.show_comments
828
+
829
+ cell_text = 'This cell comment is visible, explicitly.'
830
+
831
+ comment = 'Hello.'
832
+
833
+ worksheet3.write( 'C3', cell_text, text_wrap )
834
+ worksheet3.write_comment( 'C3', comment, :visible => 1 )
835
+
836
+
837
+ cell_text =
838
+ 'This cell comment is also visible because we used show_comments().'
839
+
840
+ comment = 'Hello.'
841
+
842
+ worksheet3.write( 'C6', cell_text, text_wrap )
843
+ worksheet3.write_comment( 'C6', comment )
844
+
845
+
846
+ cell_text = 'However, we can still override it locally.'
847
+
848
+ comment = 'Hello.'
849
+
850
+ worksheet3.write( 'C9', cell_text, text_wrap )
851
+ worksheet3.write_comment( 'C9', comment, :visible => 0 )
852
+
853
+
854
+ ###############################################################################
855
+ #
856
+ # Example 4. Demonstrates changes to the comment box dimensions.
857
+ #
858
+
859
+ # Set up some formatting.
860
+ worksheet4.set_column( 'C:C', 25 )
861
+ worksheet4.set_row( 2, 50 )
862
+ worksheet4.set_row( 5, 50 )
863
+ worksheet4.set_row( 8, 50 )
864
+ worksheet4.set_row( 15, 50 )
865
+
866
+ worksheet4.show_comments
867
+
868
+ cell_text = 'This cell comment is default size.'
869
+
870
+ comment = 'Hello.'
871
+
872
+ worksheet4.write( 'C3', cell_text, text_wrap )
873
+ worksheet4.write_comment( 'C3', comment )
874
+
875
+
876
+ cell_text = 'This cell comment is twice as wide.'
877
+
878
+ comment = 'Hello.'
879
+
880
+ worksheet4.write( 'C6', cell_text, text_wrap )
881
+ worksheet4.write_comment( 'C6', comment, :x_scale => 2 )
882
+
883
+
884
+ cell_text = 'This cell comment is twice as high.'
885
+
886
+ comment = 'Hello.'
887
+
888
+ worksheet4.write( 'C9', cell_text, text_wrap )
889
+ worksheet4.write_comment( 'C9', comment, :y_scale => 2 )
890
+
891
+
892
+ cell_text = 'This cell comment is scaled in both directions.'
893
+
894
+ comment = 'Hello.'
895
+
896
+ worksheet4.write( 'C16', cell_text, text_wrap )
897
+ worksheet4.write_comment( 'C16', comment, :x_scale => 1.2, :y_scale => 0.8 )
898
+
899
+
900
+ cell_text = 'This cell comment has width and height specified in pixels.'
901
+
902
+ comment = 'Hello.'
903
+
904
+ worksheet4.write( 'C19', cell_text, text_wrap )
905
+ worksheet4.write_comment( 'C19', comment, :width => 200, :height => 20 )
906
+
907
+
908
+ ###############################################################################
909
+ #
910
+ # Example 5. Demonstrates changes to the cell comment position.
911
+ #
912
+
913
+ worksheet5.set_column( 'C:C', 25 )
914
+ worksheet5.set_row( 2, 50 )
915
+ worksheet5.set_row( 5, 50 )
916
+ worksheet5.set_row( 8, 50 )
917
+ worksheet5.set_row( 11, 50 )
918
+
919
+ worksheet5.show_comments
920
+
921
+ cell_text = 'This cell comment is in the default position.'
922
+
923
+ comment = 'Hello.'
924
+
925
+ worksheet5.write( 'C3', cell_text, text_wrap )
926
+ worksheet5.write_comment( 'C3', comment )
927
+
928
+
929
+ cell_text = 'This cell comment has been moved to another cell.'
930
+
931
+ comment = 'Hello.'
932
+
933
+ worksheet5.write( 'C6', cell_text, text_wrap )
934
+ worksheet5.write_comment( 'C6', comment, :start_cell => 'E4' )
935
+
936
+
937
+ cell_text = 'This cell comment has been moved to another cell.'
938
+
939
+ comment = 'Hello.'
940
+
941
+ worksheet5.write( 'C9', cell_text, text_wrap )
942
+ worksheet5.write_comment( 'C9', comment, :start_row => 8, :start_col => 4 )
943
+
944
+
945
+ cell_text = 'This cell comment has been shifted within its default cell.'
946
+
947
+ comment = 'Hello.'
948
+
949
+ worksheet5.write( 'C12', cell_text, text_wrap )
950
+ worksheet5.write_comment( 'C12', comment, :x_offset => 30, :y_offset => 12 )
951
+
952
+
953
+ ###############################################################################
954
+ #
955
+ # Example 6. Demonstrates changes to the comment background colour.
956
+ #
957
+
958
+ worksheet6.set_column( 'C:C', 25 )
959
+ worksheet6.set_row( 2, 50 )
960
+ worksheet6.set_row( 5, 50 )
961
+ worksheet6.set_row( 8, 50 )
962
+
963
+ worksheet6.show_comments
964
+
965
+ cell_text = 'This cell comment has a different colour.'
966
+
967
+ comment = 'Hello.'
968
+
969
+ worksheet6.write( 'C3', cell_text, text_wrap )
970
+ worksheet6.write_comment( 'C3', comment, :color => 'green' )
971
+
972
+
973
+ cell_text = 'This cell comment has the default colour.'
974
+
975
+ comment = 'Hello.'
976
+
977
+ worksheet6.write( 'C6', cell_text, text_wrap )
978
+ worksheet6.write_comment( 'C6', comment )
979
+
980
+
981
+ cell_text = 'This cell comment has a different colour.'
982
+
983
+ comment = 'Hello.'
984
+
985
+ worksheet6.write( 'C9', cell_text, text_wrap )
986
+ worksheet6.write_comment( 'C9', comment, :color => 0x35 )
987
+
988
+
989
+ ###############################################################################
990
+ #
991
+ # Example 7. Demonstrates how to set the cell comment author.
992
+ #
993
+
994
+ worksheet7.set_column( 'C:C', 30 )
995
+ worksheet7.set_row( 2, 50 )
996
+ worksheet7.set_row( 5, 50 )
997
+ worksheet7.set_row( 8, 50 )
998
+
999
+ author = ''
1000
+ cell = 'C3'
1001
+
1002
+ cell_text = "Move the mouse over this cell and you will see 'Cell commented " +
1003
+ "by #{author}' (blank) in the status bar at the bottom"
1004
+
1005
+ comment = 'Hello.'
1006
+
1007
+ worksheet7.write( cell, cell_text, text_wrap )
1008
+ worksheet7.write_comment( cell, comment )
1009
+
1010
+
1011
+ author = 'Ruby'
1012
+ cell = 'C6'
1013
+ cell_text = "Move the mouse over this cell and you will see 'Cell commented " +
1014
+ "by #{author}' in the status bar at the bottom"
1015
+
1016
+ comment = 'Hello.'
1017
+
1018
+ worksheet7.write( cell, cell_text, text_wrap )
1019
+ worksheet7.write_comment( cell, comment, :author => author )
1020
+
1021
+
1022
+ author = '€'
1023
+ cell = 'C9'
1024
+ cell_text = "Move the mouse over this cell and you will see 'Cell commented " +
1025
+ "by #{author}' in the status bar at the bottom"
1026
+ comment = 'Hello.'
1027
+
1028
+ worksheet7.write( cell, cell_text, text_wrap )
1029
+ worksheet7.write_comment( cell, comment, :author => author )
1030
+
1031
+
1032
+
1033
+
1034
+ ###############################################################################
1035
+ #
1036
+ # Example 8. Demonstrates the need to explicitly set the row height.
1037
+ #
1038
+
1039
+ # Set up some formatting.
1040
+ worksheet8.set_column( 'C:C', 25 )
1041
+ worksheet8.set_row( 2, 80 )
1042
+
1043
+ worksheet8.show_comments
1044
+
1045
+
1046
+ cell_text =
1047
+ 'The height of this row has been adjusted explicitly using ' +
1048
+ 'set_row(). The size of the comment box is adjusted ' +
1049
+ 'accordingly by WriteXLSX.'
1050
+
1051
+ comment = 'Hello.'
1052
+
1053
+ worksheet8.write( 'C3', cell_text, text_wrap )
1054
+ worksheet8.write_comment( 'C3', comment )
1055
+
1056
+
1057
+ cell_text =
1058
+ 'The height of this row has been adjusted by Excel due to the ' +
1059
+ 'text wrap property being set. Unfortunately this means that ' +
1060
+ 'the height of the row is unknown to WriteXLSX at ' +
1061
+ "run time and thus the comment box is stretched as well.\n\n" +
1062
+ 'Use set_row() to specify the row height explicitly to avoid ' +
1063
+ 'this problem.'
1064
+
1065
+ comment = 'Hello.'
1066
+
1067
+ worksheet8.write( 'C6', cell_text, text_wrap )
1068
+ worksheet8.write_comment( 'C6', comment )
1069
+
1070
+ workbook.close
1071
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
1072
+ end
1073
+
1074
+ def test_conditional_format
1075
+ @xlsx = 'conditional_format.xlsx'
1076
+ workbook = WriteXLSX.new(@xlsx)
1077
+ worksheet1 = workbook.add_worksheet
1078
+
1079
+ # Light red fill with dark red text.
1080
+ format1 = workbook.add_format(
1081
+ :bg_color => '#FFC7CE',
1082
+ :color => '#9C0006'
1083
+ )
427
1084
 
428
1085
  # Green fill with dark green text.
429
1086
  format2 = workbook.add_format(
@@ -477,12 +1134,12 @@ def test_conditional_format
477
1134
  )
478
1135
 
479
1136
  workbook.close
480
- compare_xlsx(@expected_dir, @result_dir, xlsx)
1137
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
481
1138
  end
482
1139
 
483
1140
  def test_data_validate
484
- xlsx = 'data_validate.xlsx'
485
- workbook = WriteXLSX.new(xlsx)
1141
+ @xlsx = 'data_validate.xlsx'
1142
+ workbook = WriteXLSX.new(@xlsx)
486
1143
  worksheet = workbook.add_worksheet
487
1144
 
488
1145
  # Add a format for the header cells.
@@ -744,12 +1401,86 @@ def test_data_validate
744
1401
  })
745
1402
 
746
1403
  workbook.close
747
- compare_xlsx(@expected_dir, @result_dir, xlsx)
1404
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
1405
+ end
1406
+
1407
+ def test_date_time
1408
+ @xlsx = 'date_time.xlsx'
1409
+ workbook = WriteXLSX.new(@xlsx)
1410
+ worksheet = workbook.add_worksheet
1411
+ bold = workbook.add_format(:bold => 1)
1412
+
1413
+ # Expand the first column so that the date is visible.
1414
+ worksheet.set_column('A:B', 30)
1415
+
1416
+ # Write the column headers.
1417
+ worksheet.write('A1', 'Formatted date', bold)
1418
+ worksheet.write('B1', 'Format', bold)
1419
+
1420
+ # Examples date and time formats. In the outpu file compare how changing
1421
+ # the format codes change the appearance of the date.
1422
+ #
1423
+ date_formats = [
1424
+ 'dd/mm/yy',
1425
+ 'mm/dd/yy',
1426
+ '',
1427
+ 'd mm yy',
1428
+ 'dd mm yy',
1429
+ '',
1430
+ 'dd m yy',
1431
+ 'dd mm yy',
1432
+ 'dd mmm yy',
1433
+ 'dd mmmm yy',
1434
+ '',
1435
+ 'dd mm y',
1436
+ 'dd mm yyy',
1437
+ 'dd mm yyyy',
1438
+ '',
1439
+ 'd mmmm yyyy',
1440
+ '',
1441
+ 'dd/mm/yy',
1442
+ 'dd/mm/yy hh:mm',
1443
+ 'dd/mm/yy hh:mm:ss',
1444
+ 'dd/mm/yy hh:mm:ss.000',
1445
+ '',
1446
+ 'hh:mm',
1447
+ 'hh:mm:ss',
1448
+ 'hh:mm:ss.000'
1449
+ ]
1450
+
1451
+ # Write the same date and time using each of the above formats. The empty
1452
+ # string formats create a blank line to make the example clearer.
1453
+ #
1454
+ row = 0
1455
+ date_formats.each do |date_format|
1456
+ row += 1
1457
+ next if date_format == ''
1458
+
1459
+ # Create a format for the date or time.
1460
+ format = workbook.add_format(
1461
+ :num_format => date_format,
1462
+ :align => 'left'
1463
+ )
1464
+
1465
+ # Write the same date using different formats.
1466
+ worksheet.write_date_time(row, 0, '2004-08-01T12:30:45.123', format)
1467
+ worksheet.write(row, 1, date_format)
1468
+ end
1469
+
1470
+ # The following is an example of an invalid date. It is writen as a string
1471
+ # instead of a number. This is also Excel's default behaviour.
1472
+ #
1473
+ row += 2
1474
+ worksheet.write_date_time(row, 0, '2004-13-01T12:30:45.123')
1475
+ worksheet.write(row, 1, 'Invalid date. Written as string.', bold)
1476
+
1477
+ workbook.close
1478
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
748
1479
  end
749
1480
 
750
1481
  def test_defined_name
751
- xlsx = 'defined_name.xlsx'
752
- workbook = WriteXLSX.new(xlsx)
1482
+ @xlsx = 'defined_name.xlsx'
1483
+ workbook = WriteXLSX.new(@xlsx)
753
1484
  worksheet1 = workbook.add_worksheet
754
1485
  worksheet2 = workbook.add_worksheet
755
1486
 
@@ -771,12 +1502,12 @@ def test_defined_name
771
1502
  end
772
1503
 
773
1504
  workbook.close
774
- compare_xlsx(@expected_dir, @result_dir, xlsx)
1505
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
775
1506
  end
776
1507
 
777
1508
  def test_demo
778
- xlsx = 'demo.xlsx'
779
- workbook = WriteXLSX.new(xlsx)
1509
+ @xlsx = 'demo.xlsx'
1510
+ workbook = WriteXLSX.new(@xlsx)
780
1511
  worksheet = workbook.add_worksheet('Demo')
781
1512
  worksheet2 = workbook.add_worksheet('Another sheet')
782
1513
  worksheet3 = workbook.add_worksheet('And another')
@@ -872,12 +1603,12 @@ def test_demo
872
1603
  worksheet.write('A19', "Multiple worksheets")
873
1604
 
874
1605
  workbook.close
875
- compare_xlsx(@expected_dir, @result_dir, xlsx)
1606
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
876
1607
  end
877
1608
 
878
1609
  def test_diag_border
879
- xlsx = 'diag_border.xlsx'
880
- workbook = WriteXLSX.new(xlsx)
1610
+ @xlsx = 'diag_border.xlsx'
1611
+ workbook = WriteXLSX.new(@xlsx)
881
1612
  worksheet = workbook.add_worksheet()
882
1613
 
883
1614
 
@@ -897,12 +1628,12 @@ def test_diag_border
897
1628
  worksheet.write('B12', 'Text', format4)
898
1629
 
899
1630
  workbook.close
900
- compare_xlsx(@expected_dir, @result_dir, xlsx)
1631
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
901
1632
  end
902
1633
 
903
1634
  def test_fit_to_pages
904
- xlsx = 'fit_to_pages.xlsx'
905
- workbook = WriteXLSX.new(xlsx)
1635
+ @xlsx = 'fit_to_pages.xlsx'
1636
+ workbook = WriteXLSX.new(@xlsx)
906
1637
  worksheet1 = workbook.add_worksheet
907
1638
  worksheet2 = workbook.add_worksheet
908
1639
  worksheet3 = workbook.add_worksheet
@@ -922,12 +1653,12 @@ def test_fit_to_pages
922
1653
  worksheet4.fit_to_pages(1, 0) # 1 page wide and as long as necessary
923
1654
 
924
1655
  workbook.close
925
- compare_xlsx(@expected_dir, @result_dir, xlsx)
1656
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
926
1657
  end
927
1658
 
928
1659
  def test_formats
929
- xlsx = 'formats.xlsx'
930
- workbook = WriteXLSX.new(xlsx)
1660
+ @xlsx = 'formats.xlsx'
1661
+ workbook = WriteXLSX.new(@xlsx)
931
1662
 
932
1663
  # Some common formats
933
1664
  center = workbook.add_format(:align => 'center')
@@ -1404,12 +2135,12 @@ def misc(workbook, center, heading, colors)
1404
2135
  alignment(workbook, center, heading, colors)
1405
2136
  misc(workbook, center, heading, colors)
1406
2137
  workbook.close
1407
- compare_xlsx(@expected_dir, @result_dir, xlsx)
2138
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
1408
2139
  end
1409
2140
 
1410
2141
  def test_headers
1411
- xlsx = 'headers.xlsx'
1412
- workbook = WriteXLSX.new(xlsx)
2142
+ @xlsx = 'headers.xlsx'
2143
+ workbook = WriteXLSX.new(@xlsx)
1413
2144
  preview = 'Select Print Preview to see the header and footer'
1414
2145
 
1415
2146
 
@@ -1486,12 +2217,12 @@ def test_headers
1486
2217
  worksheet5.write('A1', preview)
1487
2218
 
1488
2219
  workbook.close
1489
- compare_xlsx(@expected_dir, @result_dir, xlsx)
2220
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
1490
2221
  end
1491
2222
 
1492
2223
  def test_hide_sheet
1493
- xlsx = 'hide_sheet.xlsx'
1494
- workbook = WriteXLSX.new(xlsx)
2224
+ @xlsx = 'hide_sheet.xlsx'
2225
+ workbook = WriteXLSX.new(@xlsx)
1495
2226
  worksheet1 = workbook.add_worksheet
1496
2227
  worksheet2 = workbook.add_worksheet
1497
2228
  worksheet3 = workbook.add_worksheet
@@ -1508,13 +2239,13 @@ def test_hide_sheet
1508
2239
  worksheet3.write(0, 0, 'Sheet2 is hidden')
1509
2240
 
1510
2241
  workbook.close
1511
- compare_xlsx(@expected_dir, @result_dir, xlsx)
2242
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
1512
2243
  end
1513
2244
 
1514
2245
  def test_hyperlink
1515
- xlsx = 'hyperlink.xlsx'
2246
+ @xlsx = 'hyperlink.xlsx'
1516
2247
  # Create a new workbook and add a worksheet
1517
- workbook = WriteXLSX.new(xlsx)
2248
+ workbook = WriteXLSX.new(@xlsx)
1518
2249
 
1519
2250
  worksheet = workbook.add_worksheet('Hyperlinks')
1520
2251
 
@@ -1555,218 +2286,30 @@ def test_hyperlink
1555
2286
  worksheet.write_string('A11', 'http://www.perl.com/')
1556
2287
 
1557
2288
  workbook.close
1558
- compare_xlsx(@expected_dir, @result_dir, xlsx)
1559
- end
1560
-
1561
- def test_indent
1562
- xlsx = 'indent.xlsx'
1563
- workbook = WriteXLSX.new(xlsx)
1564
-
1565
- worksheet = workbook.add_worksheet
1566
- indent1 = workbook.add_format(:indent => 1)
1567
- indent2 = workbook.add_format(:indent => 2)
1568
-
1569
- worksheet.set_column('A:A', 40)
1570
-
1571
- worksheet.write('A1', "This text is indented 1 level", indent1)
1572
- worksheet.write('A2', "This text is indented 2 levels", indent2)
1573
-
1574
- workbook.close
1575
- compare_xlsx(@expected_dir, @result_dir, xlsx)
1576
- end
1577
-
1578
- def test_outline
1579
- xlsx = 'outline.xlsx'
1580
- # Create a new workbook and add some worksheets
1581
- workbook = WriteXLSX.new(xlsx)
1582
- worksheet1 = workbook.add_worksheet('Outlined Rows')
1583
- worksheet2 = workbook.add_worksheet('Collapsed Rows')
1584
- worksheet3 = workbook.add_worksheet('Outline Columns')
1585
- worksheet4 = workbook.add_worksheet('Outline levels')
1586
-
1587
- # Add a general format
1588
- bold = workbook.add_format(:bold => 1)
1589
-
1590
-
1591
- ###############################################################################
1592
- #
1593
- # Example 1: Create a worksheet with outlined rows. It also includes SUBTOTAL()
1594
- # functions so that it looks like the type of automatic outlines that are
1595
- # generated when you use the Excel Data.SubTotals menu item.
1596
- #
1597
-
1598
-
1599
- # For outlines the important parameters are $hidden and $level. Rows with the
1600
- # same $level are grouped together. The group will be collapsed if $hidden is
1601
- # non-zero. $height and $XF are assigned default values if they are nil.
1602
- #
1603
- # The syntax is: set_row($row, $height, $XF, $hidden, $level, $collapsed)
1604
- #
1605
- worksheet1.set_row(1, nil, nil, 0, 2)
1606
- worksheet1.set_row(2, nil, nil, 0, 2)
1607
- worksheet1.set_row(3, nil, nil, 0, 2)
1608
- worksheet1.set_row(4, nil, nil, 0, 2)
1609
- worksheet1.set_row(5, nil, nil, 0, 1)
1610
-
1611
- worksheet1.set_row(6, nil, nil, 0, 2)
1612
- worksheet1.set_row(7, nil, nil, 0, 2)
1613
- worksheet1.set_row(8, nil, nil, 0, 2)
1614
- worksheet1.set_row(9, nil, nil, 0, 2)
1615
- worksheet1.set_row(10, nil, nil, 0, 1)
1616
-
1617
-
1618
- # Add a column format for clarity
1619
- worksheet1.set_column('A:A', 20)
1620
-
1621
- # Add the data, labels and formulas
1622
- worksheet1.write('A1', 'Region', bold)
1623
- worksheet1.write('A2', 'North')
1624
- worksheet1.write('A3', 'North')
1625
- worksheet1.write('A4', 'North')
1626
- worksheet1.write('A5', 'North')
1627
- worksheet1.write('A6', 'North Total', bold)
1628
-
1629
- worksheet1.write('B1', 'Sales', bold)
1630
- worksheet1.write('B2', 1000)
1631
- worksheet1.write('B3', 1200)
1632
- worksheet1.write('B4', 900)
1633
- worksheet1.write('B5', 1200)
1634
- worksheet1.write('B6', '=SUBTOTAL(9,B2:B5)', bold)
1635
-
1636
- worksheet1.write('A7', 'South')
1637
- worksheet1.write('A8', 'South')
1638
- worksheet1.write('A9', 'South')
1639
- worksheet1.write('A10', 'South')
1640
- worksheet1.write('A11', 'South Total', bold)
1641
-
1642
- worksheet1.write('B7', 400)
1643
- worksheet1.write('B8', 600)
1644
- worksheet1.write('B9', 500)
1645
- worksheet1.write('B10', 600)
1646
- worksheet1.write('B11', '=SUBTOTAL(9,B7:B10)', bold)
1647
-
1648
- worksheet1.write('A12', 'Grand Total', bold)
1649
- worksheet1.write('B12', '=SUBTOTAL(9,B2:B10)', bold)
1650
-
1651
-
1652
- ###############################################################################
1653
- #
1654
- # Example 2: Create a worksheet with outlined rows. This is the same as the
1655
- # previous example except that the rows are collapsed.
1656
- # Note: We need to indicate the row that contains the collapsed symbol '+'
1657
- # with the optional parameter, $collapsed.
1658
-
1659
- # The group will be collapsed if $hidden is non-zero.
1660
- # The syntax is: set_row($row, $height, $XF, $hidden, $level, $collapsed)
1661
- #
1662
- worksheet2.set_row(1, nil, nil, 1, 2)
1663
- worksheet2.set_row(2, nil, nil, 1, 2)
1664
- worksheet2.set_row(3, nil, nil, 1, 2)
1665
- worksheet2.set_row(4, nil, nil, 1, 2)
1666
- worksheet2.set_row(5, nil, nil, 1, 1)
1667
-
1668
- worksheet2.set_row(6, nil, nil, 1, 2)
1669
- worksheet2.set_row(7, nil, nil, 1, 2)
1670
- worksheet2.set_row(8, nil, nil, 1, 2)
1671
- worksheet2.set_row(9, nil, nil, 1, 2)
1672
- worksheet2.set_row(10, nil, nil, 1, 1)
1673
- worksheet2.set_row(11, nil, nil, 0, 0, 1)
1674
-
1675
-
1676
- # Add a column format for clarity
1677
- worksheet2.set_column('A:A', 20)
1678
-
1679
- # Add the data, labels and formulas
1680
- worksheet2.write('A1', 'Region', bold)
1681
- worksheet2.write('A2', 'North')
1682
- worksheet2.write('A3', 'North')
1683
- worksheet2.write('A4', 'North')
1684
- worksheet2.write('A5', 'North')
1685
- worksheet2.write('A6', 'North Total', bold)
1686
-
1687
- worksheet2.write('B1', 'Sales', bold)
1688
- worksheet2.write('B2', 1000)
1689
- worksheet2.write('B3', 1200)
1690
- worksheet2.write('B4', 900)
1691
- worksheet2.write('B5', 1200)
1692
- worksheet2.write('B6', '=SUBTOTAL(9,B2:B5)', bold)
1693
-
1694
- worksheet2.write('A7', 'South')
1695
- worksheet2.write('A8', 'South')
1696
- worksheet2.write('A9', 'South')
1697
- worksheet2.write('A10', 'South')
1698
- worksheet2.write('A11', 'South Total', bold)
1699
-
1700
- worksheet2.write('B7', 400)
1701
- worksheet2.write('B8', 600)
1702
- worksheet2.write('B9', 500)
1703
- worksheet2.write('B10', 600)
1704
- worksheet2.write('B11', '=SUBTOTAL(9,B7:B10)', bold)
1705
-
1706
- worksheet2.write('A12', 'Grand Total', bold)
1707
- worksheet2.write('B12', '=SUBTOTAL(9,B2:B10)', bold)
1708
-
1709
-
1710
- ###############################################################################
1711
- #
1712
- # Example 3: Create a worksheet with outlined columns.
1713
- #
1714
- data = [
1715
- [ 'Month', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', ' Total' ],
1716
- [ 'North', 50, 20, 15, 25, 65, 80, '=SUM(B2:G2)' ],
1717
- [ 'South', 10, 20, 30, 50, 50, 50, '=SUM(B3:G3)' ],
1718
- [ 'East', 45, 75, 50, 15, 75, 100, '=SUM(B4:G4)' ],
1719
- [ 'West', 15, 15, 55, 35, 20, 50, '=SUM(B5:G5)' ],
1720
- ]
1721
-
1722
- # Add bold format to the first row
1723
- worksheet3.set_row(0, nil, bold)
1724
-
1725
- # Syntax: set_column($col1, $col2, $width, $XF, $hidden, $level, $collapsed)
1726
- worksheet3.set_column('A:A', 10, bold)
1727
- worksheet3.set_column('B:G', 5, nil, 0, 1)
1728
- worksheet3.set_column('H:H', 10)
1729
-
1730
- # Write the data and a formula
1731
- worksheet3.write_col('A1', data)
1732
- worksheet3.write('H6', '=SUM(H2:H5)', bold)
1733
-
1734
-
1735
- ###############################################################################
1736
- #
1737
- # Example 4: Show all possible outline levels.
1738
- #
1739
- levels = [
1740
- "Level 1", "Level 2", "Level 3", "Level 4", "Level 5", "Level 6",
1741
- "Level 7", "Level 6", "Level 5", "Level 4", "Level 3", "Level 2",
1742
- "Level 1"
1743
- ]
1744
-
1745
-
1746
- worksheet4.write_col('A1', levels)
1747
-
1748
- worksheet4.set_row(0, nil, nil, nil, 1)
1749
- worksheet4.set_row(1, nil, nil, nil, 2)
1750
- worksheet4.set_row(2, nil, nil, nil, 3)
1751
- worksheet4.set_row(3, nil, nil, nil, 4)
1752
- worksheet4.set_row(4, nil, nil, nil, 5)
1753
- worksheet4.set_row(5, nil, nil, nil, 6)
1754
- worksheet4.set_row(6, nil, nil, nil, 7)
1755
- worksheet4.set_row(7, nil, nil, nil, 6)
1756
- worksheet4.set_row(8, nil, nil, nil, 5)
1757
- worksheet4.set_row(9, nil, nil, nil, 4)
1758
- worksheet4.set_row(10, nil, nil, nil, 3)
1759
- worksheet4.set_row(11, nil, nil, nil, 2)
1760
- worksheet4.set_row(12, nil, nil, nil, 1)
2289
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
2290
+ end
2291
+
2292
+ def test_indent
2293
+ @xlsx = 'indent.xlsx'
2294
+ workbook = WriteXLSX.new(@xlsx)
2295
+
2296
+ worksheet = workbook.add_worksheet
2297
+ indent1 = workbook.add_format(:indent => 1)
2298
+ indent2 = workbook.add_format(:indent => 2)
2299
+
2300
+ worksheet.set_column('A:A', 40)
2301
+
2302
+ worksheet.write('A1', "This text is indented 1 level", indent1)
2303
+ worksheet.write('A2', "This text is indented 2 levels", indent2)
1761
2304
 
1762
2305
  workbook.close
1763
- compare_xlsx(@expected_dir, @result_dir, xlsx)
2306
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
1764
2307
  end
1765
2308
 
1766
2309
  def test_merge1
1767
- xlsx = 'merge1.xlsx'
2310
+ @xlsx = 'merge1.xlsx'
1768
2311
  # Create a new workbook and add a worksheet
1769
- workbook = WriteXLSX.new(xlsx)
2312
+ workbook = WriteXLSX.new(@xlsx)
1770
2313
  worksheet = workbook.add_worksheet
1771
2314
 
1772
2315
  # Increase the cell size of the merged cells to highlight the formatting.
@@ -1781,44 +2324,13 @@ def test_merge1
1781
2324
  worksheet.write_blank(2, 2, format)
1782
2325
  worksheet.write_blank(2, 3, format)
1783
2326
  workbook.close
1784
- compare_xlsx(@expected_dir, @result_dir, xlsx)
2327
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
1785
2328
  end
1786
2329
 
1787
2330
  def test_merge2
1788
2331
  # Create a new workbook and add a worksheet
1789
- xlsx = 'merge2.xlsx'
1790
- workbook = WriteXLSX.new(xlsx)
1791
- worksheet = workbook.add_worksheet
1792
-
1793
- # Increase the cell size of the merged cells to highlight the formatting.
1794
- worksheet.set_column(1, 2, 30)
1795
- worksheet.set_row(2, 40)
1796
-
1797
- # Create a merged format
1798
- format = workbook.add_format(
1799
- :center_across => 1,
1800
- :bold => 1,
1801
- :size => 15,
1802
- :pattern => 1,
1803
- :border => 6,
1804
- :color => 'white',
1805
- :fg_color => 'green',
1806
- :border_color => 'yellow',
1807
- :align => 'vcenter'
1808
- )
1809
-
1810
- # Only one cell should contain text, the others should be blank.
1811
- worksheet.write(2, 1, "Center across selection", format)
1812
- worksheet.write_blank(2, 2, format)
1813
-
1814
- workbook.close
1815
- compare_xlsx(@expected_dir, @result_dir, xlsx)
1816
- end
1817
-
1818
- def test_merge3
1819
- xlsx = 'merge2.xlsx'
1820
- # Create a new workbook and add a worksheet
1821
- workbook = WriteXLSX.new(xlsx)
2332
+ @xlsx = 'merge2.xlsx'
2333
+ workbook = WriteXLSX.new(@xlsx)
1822
2334
  worksheet = workbook.add_worksheet
1823
2335
 
1824
2336
  # Increase the cell size of the merged cells to highlight the formatting.
@@ -1843,14 +2355,14 @@ def test_merge3
1843
2355
  worksheet.write_blank(2, 2, format)
1844
2356
 
1845
2357
  workbook.close
1846
- compare_xlsx(@expected_dir, @result_dir, xlsx)
2358
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
1847
2359
  end
1848
2360
 
1849
2361
  def test_merge3
1850
- xlsx = 'merge3.xlsx'
2362
+ @xlsx = 'merge3.xlsx'
1851
2363
 
1852
2364
  # Create a new workbook and add a worksheet
1853
- workbook = WriteXLSX.new('merge3.xlsx')
2365
+ workbook = WriteXLSX.new(@xlsx)
1854
2366
  worksheet = workbook.add_worksheet()
1855
2367
 
1856
2368
  # Increase the cell size of the merged cells to highlight the formatting.
@@ -1876,13 +2388,13 @@ def test_merge3
1876
2388
  worksheet.merge_range('B7:D8', 'http://www.perl.com', format)
1877
2389
 
1878
2390
  workbook.close
1879
- compare_xlsx(@expected_dir, @result_dir, xlsx)
2391
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
1880
2392
  end
1881
2393
 
1882
2394
  def test_merge4
1883
- xlsx = 'merge4.xlsx'
2395
+ @xlsx = 'merge4.xlsx'
1884
2396
  # Create a new workbook and add a worksheet
1885
- workbook = WriteXLSX.new(xlsx)
2397
+ workbook = WriteXLSX.new(@xlsx)
1886
2398
  worksheet = workbook.add_worksheet
1887
2399
 
1888
2400
  # Increase the cell size of the merged cells to highlight the formatting.
@@ -1946,579 +2458,1487 @@ def test_merge4
1946
2458
  worksheet.merge_range('B11:D12', 'Justified: ' << 'so on and ' * 18, format4)
1947
2459
 
1948
2460
  workbook.close
1949
- compare_xlsx(@expected_dir, @result_dir, xlsx)
2461
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
1950
2462
  end
1951
2463
 
1952
2464
  def test_merge5
1953
- xlsx = 'merge5.xlsx'
2465
+ @xlsx = 'merge5.xlsx'
2466
+ # Create a new workbook and add a worksheet
2467
+ workbook = WriteXLSX.new(@xlsx)
2468
+ worksheet = workbook.add_worksheet
2469
+
2470
+ # Increase the cell size of the merged cells to highlight the formatting.
2471
+ (3 .. 8).each { |row| worksheet.set_row(row, 36 ) }
2472
+ [1, 3, 5].each { |col| worksheet.set_column( col, col, 15 ) }
2473
+
2474
+ ###############################################################################
2475
+ #
2476
+ # Rotation 1, letters run from top to bottom
2477
+ #
2478
+ format1 = workbook.add_format(
2479
+ :border => 6,
2480
+ :bold => 1,
2481
+ :color => 'red',
2482
+ :valign => 'vcentre',
2483
+ :align => 'centre',
2484
+ :rotation => 270
2485
+ )
2486
+
2487
+ worksheet.merge_range( 'B4:B9', 'Rotation 270', format1 )
2488
+
2489
+ ###############################################################################
2490
+ #
2491
+ # Rotation 2, 90ー anticlockwise
2492
+ #
2493
+ format2 = workbook.add_format(
2494
+ :border => 6,
2495
+ :bold => 1,
2496
+ :color => 'red',
2497
+ :valign => 'vcentre',
2498
+ :align => 'centre',
2499
+ :rotation => 90
2500
+ )
2501
+
2502
+ worksheet.merge_range( 'D4:D9', 'Rotation 90°', format2 )
2503
+
2504
+ ###############################################################################
2505
+ #
2506
+ # Rotation 3, 90ー clockwise
2507
+ #
2508
+ format3 = workbook.add_format(
2509
+ :border => 6,
2510
+ :bold => 1,
2511
+ :color => 'red',
2512
+ :valign => 'vcentre',
2513
+ :align => 'centre',
2514
+ :rotation => -90
2515
+ )
2516
+
2517
+ worksheet.merge_range( 'F4:F9', 'Rotation -90°', format3 )
2518
+
2519
+ workbook.close
2520
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
2521
+ end
2522
+
2523
+ def test_merge6
2524
+ @xlsx = 'merge6.xlsx'
1954
2525
  # Create a new workbook and add a worksheet
1955
- workbook = WriteXLSX.new(xlsx)
2526
+ workbook = WriteXLSX.new(@xlsx)
1956
2527
  worksheet = workbook.add_worksheet
1957
2528
 
1958
- # Increase the cell size of the merged cells to highlight the formatting.
1959
- (3 .. 8).each { |row| worksheet.set_row(row, 36 ) }
1960
- [1, 3, 5].each { |col| worksheet.set_column( col, col, 15 ) }
2529
+ # Increase the cell size of the merged cells to highlight the formatting.
2530
+ (2 .. 9).each { |row| worksheet.set_row(row, 36) }
2531
+ worksheet.set_column('B:D', 25)
2532
+
2533
+ # Format for the merged cells.
2534
+ format = workbook.add_format(
2535
+ :border => 6,
2536
+ :bold => 1,
2537
+ :color => 'red',
2538
+ :size => 20,
2539
+ :valign => 'vcentre',
2540
+ :align => 'left',
2541
+ :indent => 1
2542
+ )
2543
+
2544
+ ###############################################################################
2545
+ #
2546
+ # Write an Ascii string.
2547
+ #
2548
+ worksheet.merge_range('B3:D4', 'ASCII: A simple string', format)
2549
+
2550
+ ###############################################################################
2551
+ #
2552
+ # Write a UTF-8 Unicode string.
2553
+ #
2554
+ smiley = '☺'
2555
+ worksheet.merge_range('B6:D7', "UTF-8: A Unicode smiley #{smiley}", format)
2556
+
2557
+ workbook.close
2558
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
2559
+ end
2560
+
2561
+ def test_outline
2562
+ @xlsx = 'outline.xlsx'
2563
+ # Create a new workbook and add some worksheets
2564
+ workbook = WriteXLSX.new(@xlsx)
2565
+ worksheet1 = workbook.add_worksheet('Outlined Rows')
2566
+ worksheet2 = workbook.add_worksheet('Collapsed Rows')
2567
+ worksheet3 = workbook.add_worksheet('Outline Columns')
2568
+ worksheet4 = workbook.add_worksheet('Outline levels')
2569
+
2570
+ # Add a general format
2571
+ bold = workbook.add_format(:bold => 1)
2572
+
2573
+
2574
+ ###############################################################################
2575
+ #
2576
+ # Example 1: Create a worksheet with outlined rows. It also includes SUBTOTAL()
2577
+ # functions so that it looks like the type of automatic outlines that are
2578
+ # generated when you use the Excel Data.SubTotals menu item.
2579
+ #
2580
+
2581
+
2582
+ # For outlines the important parameters are $hidden and $level. Rows with the
2583
+ # same $level are grouped together. The group will be collapsed if $hidden is
2584
+ # non-zero. $height and $XF are assigned default values if they are nil.
2585
+ #
2586
+ # The syntax is: set_row($row, $height, $XF, $hidden, $level, $collapsed)
2587
+ #
2588
+ worksheet1.set_row(1, nil, nil, 0, 2)
2589
+ worksheet1.set_row(2, nil, nil, 0, 2)
2590
+ worksheet1.set_row(3, nil, nil, 0, 2)
2591
+ worksheet1.set_row(4, nil, nil, 0, 2)
2592
+ worksheet1.set_row(5, nil, nil, 0, 1)
2593
+
2594
+ worksheet1.set_row(6, nil, nil, 0, 2)
2595
+ worksheet1.set_row(7, nil, nil, 0, 2)
2596
+ worksheet1.set_row(8, nil, nil, 0, 2)
2597
+ worksheet1.set_row(9, nil, nil, 0, 2)
2598
+ worksheet1.set_row(10, nil, nil, 0, 1)
2599
+
2600
+
2601
+ # Add a column format for clarity
2602
+ worksheet1.set_column('A:A', 20)
2603
+
2604
+ # Add the data, labels and formulas
2605
+ worksheet1.write('A1', 'Region', bold)
2606
+ worksheet1.write('A2', 'North')
2607
+ worksheet1.write('A3', 'North')
2608
+ worksheet1.write('A4', 'North')
2609
+ worksheet1.write('A5', 'North')
2610
+ worksheet1.write('A6', 'North Total', bold)
2611
+
2612
+ worksheet1.write('B1', 'Sales', bold)
2613
+ worksheet1.write('B2', 1000)
2614
+ worksheet1.write('B3', 1200)
2615
+ worksheet1.write('B4', 900)
2616
+ worksheet1.write('B5', 1200)
2617
+ worksheet1.write('B6', '=SUBTOTAL(9,B2:B5)', bold)
2618
+
2619
+ worksheet1.write('A7', 'South')
2620
+ worksheet1.write('A8', 'South')
2621
+ worksheet1.write('A9', 'South')
2622
+ worksheet1.write('A10', 'South')
2623
+ worksheet1.write('A11', 'South Total', bold)
2624
+
2625
+ worksheet1.write('B7', 400)
2626
+ worksheet1.write('B8', 600)
2627
+ worksheet1.write('B9', 500)
2628
+ worksheet1.write('B10', 600)
2629
+ worksheet1.write('B11', '=SUBTOTAL(9,B7:B10)', bold)
2630
+
2631
+ worksheet1.write('A12', 'Grand Total', bold)
2632
+ worksheet1.write('B12', '=SUBTOTAL(9,B2:B10)', bold)
2633
+
2634
+
2635
+ ###############################################################################
2636
+ #
2637
+ # Example 2: Create a worksheet with outlined rows. This is the same as the
2638
+ # previous example except that the rows are collapsed.
2639
+ # Note: We need to indicate the row that contains the collapsed symbol '+'
2640
+ # with the optional parameter, $collapsed.
2641
+
2642
+ # The group will be collapsed if $hidden is non-zero.
2643
+ # The syntax is: set_row($row, $height, $XF, $hidden, $level, $collapsed)
2644
+ #
2645
+ worksheet2.set_row(1, nil, nil, 1, 2)
2646
+ worksheet2.set_row(2, nil, nil, 1, 2)
2647
+ worksheet2.set_row(3, nil, nil, 1, 2)
2648
+ worksheet2.set_row(4, nil, nil, 1, 2)
2649
+ worksheet2.set_row(5, nil, nil, 1, 1)
2650
+
2651
+ worksheet2.set_row(6, nil, nil, 1, 2)
2652
+ worksheet2.set_row(7, nil, nil, 1, 2)
2653
+ worksheet2.set_row(8, nil, nil, 1, 2)
2654
+ worksheet2.set_row(9, nil, nil, 1, 2)
2655
+ worksheet2.set_row(10, nil, nil, 1, 1)
2656
+ worksheet2.set_row(11, nil, nil, 0, 0, 1)
2657
+
2658
+
2659
+ # Add a column format for clarity
2660
+ worksheet2.set_column('A:A', 20)
2661
+
2662
+ # Add the data, labels and formulas
2663
+ worksheet2.write('A1', 'Region', bold)
2664
+ worksheet2.write('A2', 'North')
2665
+ worksheet2.write('A3', 'North')
2666
+ worksheet2.write('A4', 'North')
2667
+ worksheet2.write('A5', 'North')
2668
+ worksheet2.write('A6', 'North Total', bold)
2669
+
2670
+ worksheet2.write('B1', 'Sales', bold)
2671
+ worksheet2.write('B2', 1000)
2672
+ worksheet2.write('B3', 1200)
2673
+ worksheet2.write('B4', 900)
2674
+ worksheet2.write('B5', 1200)
2675
+ worksheet2.write('B6', '=SUBTOTAL(9,B2:B5)', bold)
2676
+
2677
+ worksheet2.write('A7', 'South')
2678
+ worksheet2.write('A8', 'South')
2679
+ worksheet2.write('A9', 'South')
2680
+ worksheet2.write('A10', 'South')
2681
+ worksheet2.write('A11', 'South Total', bold)
2682
+
2683
+ worksheet2.write('B7', 400)
2684
+ worksheet2.write('B8', 600)
2685
+ worksheet2.write('B9', 500)
2686
+ worksheet2.write('B10', 600)
2687
+ worksheet2.write('B11', '=SUBTOTAL(9,B7:B10)', bold)
2688
+
2689
+ worksheet2.write('A12', 'Grand Total', bold)
2690
+ worksheet2.write('B12', '=SUBTOTAL(9,B2:B10)', bold)
2691
+
1961
2692
 
1962
2693
  ###############################################################################
1963
2694
  #
1964
- # Rotation 1, letters run from top to bottom
2695
+ # Example 3: Create a worksheet with outlined columns.
1965
2696
  #
1966
- format1 = workbook.add_format(
1967
- :border => 6,
1968
- :bold => 1,
1969
- :color => 'red',
1970
- :valign => 'vcentre',
1971
- :align => 'centre',
1972
- :rotation => 270
1973
- )
2697
+ data = [
2698
+ [ 'Month', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', ' Total' ],
2699
+ [ 'North', 50, 20, 15, 25, 65, 80, '=SUM(B2:G2)' ],
2700
+ [ 'South', 10, 20, 30, 50, 50, 50, '=SUM(B3:G3)' ],
2701
+ [ 'East', 45, 75, 50, 15, 75, 100, '=SUM(B4:G4)' ],
2702
+ [ 'West', 15, 15, 55, 35, 20, 50, '=SUM(B5:G5)' ],
2703
+ ]
1974
2704
 
1975
- worksheet.merge_range( 'B4:B9', 'Rotation 270', format1 )
2705
+ # Add bold format to the first row
2706
+ worksheet3.set_row(0, nil, bold)
1976
2707
 
1977
- ###############################################################################
1978
- #
1979
- # Rotation 2, 90ー anticlockwise
1980
- #
1981
- format2 = workbook.add_format(
1982
- :border => 6,
1983
- :bold => 1,
1984
- :color => 'red',
1985
- :valign => 'vcentre',
1986
- :align => 'centre',
1987
- :rotation => 90
1988
- )
2708
+ # Syntax: set_column($col1, $col2, $width, $XF, $hidden, $level, $collapsed)
2709
+ worksheet3.set_column('A:A', 10, bold)
2710
+ worksheet3.set_column('B:G', 5, nil, 0, 1)
2711
+ worksheet3.set_column('H:H', 10)
2712
+
2713
+ # Write the data and a formula
2714
+ worksheet3.write_col('A1', data)
2715
+ worksheet3.write('H6', '=SUM(H2:H5)', bold)
1989
2716
 
1990
- worksheet.merge_range( 'D4:D9', 'Rotation 90°', format2 )
1991
2717
 
1992
2718
  ###############################################################################
1993
2719
  #
1994
- # Rotation 3, 90ー clockwise
2720
+ # Example 4: Show all possible outline levels.
1995
2721
  #
1996
- format3 = workbook.add_format(
1997
- :border => 6,
1998
- :bold => 1,
1999
- :color => 'red',
2000
- :valign => 'vcentre',
2001
- :align => 'centre',
2002
- :rotation => -90
2003
- )
2004
-
2005
- worksheet.merge_range( 'F4:F9', 'Rotation -90°', format3 )
2722
+ levels = [
2723
+ "Level 1", "Level 2", "Level 3", "Level 4", "Level 5", "Level 6",
2724
+ "Level 7", "Level 6", "Level 5", "Level 4", "Level 3", "Level 2",
2725
+ "Level 1"
2726
+ ]
2006
2727
 
2007
- workbook.close
2008
- compare_xlsx(@expected_dir, @result_dir, xlsx)
2009
- end
2010
2728
 
2011
- def test_merge6
2012
- xlsx = 'merge6.xlsx'
2013
- # Create a new workbook and add a worksheet
2014
- workbook = WriteXLSX.new(xlsx)
2015
- worksheet = workbook.add_worksheet
2729
+ worksheet4.write_col('A1', levels)
2016
2730
 
2017
- # Increase the cell size of the merged cells to highlight the formatting.
2018
- (2 .. 9).each { |row| worksheet.set_row(row, 36) }
2019
- worksheet.set_column('B:D', 25)
2731
+ worksheet4.set_row(0, nil, nil, nil, 1)
2732
+ worksheet4.set_row(1, nil, nil, nil, 2)
2733
+ worksheet4.set_row(2, nil, nil, nil, 3)
2734
+ worksheet4.set_row(3, nil, nil, nil, 4)
2735
+ worksheet4.set_row(4, nil, nil, nil, 5)
2736
+ worksheet4.set_row(5, nil, nil, nil, 6)
2737
+ worksheet4.set_row(6, nil, nil, nil, 7)
2738
+ worksheet4.set_row(7, nil, nil, nil, 6)
2739
+ worksheet4.set_row(8, nil, nil, nil, 5)
2740
+ worksheet4.set_row(9, nil, nil, nil, 4)
2741
+ worksheet4.set_row(10, nil, nil, nil, 3)
2742
+ worksheet4.set_row(11, nil, nil, nil, 2)
2743
+ worksheet4.set_row(12, nil, nil, nil, 1)
2020
2744
 
2021
- # Format for the merged cells.
2022
- format = workbook.add_format(
2023
- :border => 6,
2024
- :bold => 1,
2025
- :color => 'red',
2026
- :size => 20,
2027
- :valign => 'vcentre',
2028
- :align => 'left',
2029
- :indent => 1
2030
- )
2745
+ workbook.close
2746
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
2747
+ end
2748
+ =begin
2749
+ def test_outline_collapsed
2750
+ @xlsx = 'outline_collapsed.xlsx'
2751
+ workbook = WriteXLSX.new(@xlsx)
2752
+ worksheet1 = workbook.add_worksheet('Outlined Rows')
2753
+ worksheet2 = workbook.add_worksheet('Collapsed Rows 1')
2754
+ worksheet3 = workbook.add_worksheet('Collapsed Rows 2')
2755
+ worksheet4 = workbook.add_worksheet('Collapsed Rows 3')
2756
+ worksheet5 = workbook.add_worksheet('Outline Columns')
2757
+ worksheet6 = workbook.add_worksheet('Collapsed Columns')
2031
2758
 
2032
- ###############################################################################
2033
- #
2034
- # Write an Ascii string.
2035
- #
2036
- worksheet.merge_range('B3:D4', 'ASCII: A simple string', format)
2759
+ # Add a general format
2760
+ bold = workbook.add_format(:bold => 1)
2037
2761
 
2038
2762
  ###############################################################################
2039
2763
  #
2040
- # Write a UTF-8 Unicode string.
2764
+ # Example 1: Create a worksheet with outlined rows. It also includes SUBTOTAL()
2765
+ # functions so that it looks like the type of automatic outlines that are
2766
+ # generated when you use the Excel Data->SubTotals menu item.
2041
2767
  #
2042
- smiley = '☺'
2043
- worksheet.merge_range('B6:D7', "UTF-8: A Unicode smiley #{smiley}", format)
2044
2768
 
2045
- workbook.close
2046
- compare_xlsx(@expected_dir, @result_dir, xlsx)
2047
- end
2048
-
2049
- def test_comments1
2050
- xlsx = 'comments1.xlsx'
2051
- workbook = WriteXLSX.new(xlsx)
2052
- worksheet = workbook.add_worksheet
2769
+ # The syntax is: set_row(row, height, XF, hidden, level, collapsed)
2770
+ worksheet1.set_row(1, nil, nil, 0, 2)
2771
+ worksheet1.set_row(2, nil, nil, 0, 2)
2772
+ worksheet1.set_row(3, nil, nil, 0, 2)
2773
+ worksheet1.set_row(4, nil, nil, 0, 2)
2774
+ worksheet1.set_row(5, nil, nil, 0, 1)
2053
2775
 
2054
- worksheet.write('A1', 'Hello')
2055
- worksheet.write_comment('A1', 'This is a comment')
2776
+ worksheet1.set_row(6, nil, nil, 0, 2)
2777
+ worksheet1.set_row(7, nil, nil, 0, 2)
2778
+ worksheet1.set_row(8, nil, nil, 0, 2)
2779
+ worksheet1.set_row(9, nil, nil, 0, 2)
2780
+ worksheet1.set_row(10, nil, nil, 0, 1)
2056
2781
 
2057
- workbook.close
2058
- compare_xlsx(@expected_dir, @result_dir, xlsx)
2059
- end
2782
+ # Write the sub-total data that is common to the row examples.
2783
+ create_sub_totals(worksheet1, bold)
2060
2784
 
2061
- def test_comments2
2062
- xlsx = 'comments2.xlsx'
2063
- workbook = WriteXLSX.new(xlsx)
2785
+ ###############################################################################
2786
+ #
2787
+ # Example 2: Create a worksheet with collapsed outlined rows.
2788
+ # This is the same as the example 1 except that the all rows are collapsed.
2789
+ # Note: We need to indicate the row that contains the collapsed symbol '+' with
2790
+ # the optional parameter, collapsed.
2064
2791
 
2065
- text_wrap = workbook.add_format( :text_wrap => 1, :valign => 'top' )
2066
- worksheet1 = workbook.add_worksheet
2067
- worksheet2 = workbook.add_worksheet
2068
- worksheet3 = workbook.add_worksheet
2069
- worksheet4 = workbook.add_worksheet
2070
- worksheet5 = workbook.add_worksheet
2071
- worksheet6 = workbook.add_worksheet
2072
- worksheet7 = workbook.add_worksheet
2073
- worksheet8 = workbook.add_worksheet
2792
+ worksheet2.set_row(1, nil, nil, 1, 2)
2793
+ worksheet2.set_row(2, nil, nil, 1, 2)
2794
+ worksheet2.set_row(3, nil, nil, 1, 2)
2795
+ worksheet2.set_row(4, nil, nil, 1, 2)
2796
+ worksheet2.set_row(5, nil, nil, 1, 1)
2074
2797
 
2798
+ worksheet2.set_row(6, nil, nil, 1, 2)
2799
+ worksheet2.set_row(7, nil, nil, 1, 2)
2800
+ worksheet2.set_row(8, nil, nil, 1, 2)
2801
+ worksheet2.set_row(9, nil, nil, 1, 2)
2802
+ worksheet2.set_row(10, nil, nil, 1, 1)
2075
2803
 
2076
- # Variables that we will use in each example.
2077
- cell_text = ''
2078
- comment = ''
2804
+ worksheet2.set_row(11, nil, nil, 0, 0, 1)
2079
2805
 
2806
+ # Write the sub-total data that is common to the row examples.
2807
+ create_sub_totals(worksheet2, bold)
2080
2808
 
2081
2809
  ###############################################################################
2082
2810
  #
2083
- # Example 1. Demonstrates a simple cell comments without formatting.
2084
- # comments.
2085
- #
2086
-
2087
- # Set up some formatting.
2088
- worksheet1.set_column( 'C:C', 25 )
2089
- worksheet1.set_row( 2, 50 )
2090
- worksheet1.set_row( 5, 50 )
2811
+ # Example 3: Create a worksheet with collapsed outlined rows.
2812
+ # Same as the example 1 except that the two sub-totals are collapsed.
2091
2813
 
2814
+ worksheet3.set_row(1, nil, nil, 1, 2)
2815
+ worksheet3.set_row(2, nil, nil, 1, 2)
2816
+ worksheet3.set_row(3, nil, nil, 1, 2)
2817
+ worksheet3.set_row(4, nil, nil, 1, 2)
2818
+ worksheet3.set_row(5, nil, nil, 0, 1, 1)
2092
2819
 
2093
- # Simple ascii string.
2094
- cell_text = 'Hold the mouse over this cell to see the comment.'
2820
+ worksheet3.set_row(6, nil, nil, 1, 2)
2821
+ worksheet3.set_row(7, nil, nil, 1, 2)
2822
+ worksheet3.set_row(8, nil, nil, 1, 2)
2823
+ worksheet3.set_row(9, nil, nil, 1, 2)
2824
+ worksheet3.set_row(10, nil, nil, 0, 1, 1)
2095
2825
 
2096
- comment = 'This is a comment.'
2826
+ # Write the sub-total data that is common to the row examples.
2827
+ create_sub_totals(worksheet3, bold)
2097
2828
 
2098
- worksheet1.write( 'C3', cell_text, text_wrap )
2099
- worksheet1.write_comment( 'C3', comment )
2829
+ ###############################################################################
2830
+ #
2831
+ # Example 4: Create a worksheet with outlined rows.
2832
+ # Same as the example 1 except that the two sub-totals are collapsed.
2100
2833
 
2101
- cell_text = 'This is a UTF-8 string.'
2102
- comment = '☺'
2834
+ worksheet4.set_row(1, nil, nil, 1, 2)
2835
+ worksheet4.set_row(2, nil, nil, 1, 2)
2836
+ worksheet4.set_row(3, nil, nil, 1, 2)
2837
+ worksheet4.set_row(4, nil, nil, 1, 2)
2838
+ worksheet4.set_row(5, nil, nil, 1, 1, 1)
2103
2839
 
2104
- worksheet1.write( 'C6', cell_text, text_wrap )
2105
- worksheet1.write_comment( 'C6', comment )
2840
+ worksheet4.set_row(6, nil, nil, 1, 2)
2841
+ worksheet4.set_row(7, nil, nil, 1, 2)
2842
+ worksheet4.set_row(8, nil, nil, 1, 2)
2843
+ worksheet4.set_row(9, nil, nil, 1, 2)
2844
+ worksheet4.set_row(10, nil, nil, 1, 1, 1)
2106
2845
 
2846
+ worksheet4.set_row(11, nil, nil, 0, 0, 1)
2107
2847
 
2848
+ # Write the sub-total data that is common to the row examples.
2849
+ create_sub_totals(worksheet4, bold)
2108
2850
 
2109
2851
  ###############################################################################
2110
2852
  #
2111
- # Example 2. Demonstrates visible and hidden comments.
2853
+ # Example 5: Create a worksheet with outlined columns.
2112
2854
  #
2855
+ data = [
2856
+ [ 'Month', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Total' ],
2857
+ [ 'North', 50, 20, 15, 25, 65, 80, '=SUM(B2:G2)' ],
2858
+ [ 'South', 10, 20, 30, 50, 50, 50, '=SUM(B3:G3)' ],
2859
+ [ 'East', 45, 75, 50, 15, 75, 100, '=SUM(B4:G4)' ],
2860
+ [ 'West', 15, 15, 55, 35, 20, 50, '=SUM(B5:G6)' ]
2861
+ ]
2113
2862
 
2114
- # Set up some formatting.
2115
- worksheet2.set_column( 'C:C', 25 )
2116
- worksheet2.set_row( 2, 50 )
2117
- worksheet2.set_row( 5, 50 )
2118
-
2863
+ # Add bold format to the first row
2864
+ worksheet5.set_row(0, nil, bold)
2119
2865
 
2120
- cell_text = 'This cell comment is visible.'
2866
+ # Syntax: set_column(col1, col2, width, XF, hidden, level, collapsed)
2867
+ worksheet5.set_column('A:A', 10, bold)
2868
+ worksheet5.set_column('B:G', 5, nil, 0, 1)
2869
+ worksheet5.set_column('H:H', 10)
2121
2870
 
2122
- comment = 'Hello.'
2871
+ # Write the data and a formula
2872
+ worksheet5.write_col('A1', data)
2873
+ worksheet5.write('H6', '=SUM(H2:H5)', bold)
2123
2874
 
2124
- worksheet2.write( 'C3', cell_text, text_wrap )
2125
- worksheet2.write_comment( 'C3', comment, :visible => 1 )
2875
+ ###############################################################################
2876
+ #
2877
+ # Example 6: Create a worksheet with collapsed outlined columns.
2878
+ # This is the same as the previous example except collapsed columns.
2126
2879
 
2880
+ # Add bold format to the first row
2881
+ worksheet6.set_row(0, nil, bold)
2127
2882
 
2128
- cell_text = "This cell comment isn't visible (the default)."
2883
+ # Syntax: set_column(col1, col2, width, XF, hidden, level, collapsed)
2884
+ worksheet6.set_column('A:A', 10, bold)
2885
+ worksheet6.set_column('B:G', 5, nil, 1, 1)
2886
+ worksheet6.set_column('H:H', 10, nil, 0, 0, 1)
2129
2887
 
2130
- comment = 'Hello.'
2888
+ # Write the data and a formula
2889
+ worksheet6.write_col('A1', data)
2890
+ worksheet6.write('H6', '=SUM(H2:H5)', bold)
2131
2891
 
2132
- worksheet2.write( 'C6', cell_text, text_wrap )
2133
- worksheet2.write_comment( 'C6', comment )
2892
+ workbook.close
2893
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
2894
+ end
2134
2895
 
2896
+ #
2897
+ # This function will generate the same data and sub-totals on each worksheet.
2898
+ #
2899
+ def create_sub_totals(worksheet, bold)
2900
+ # Add a column format for clarity
2901
+ worksheet.set_column('A:A', 20)
2135
2902
 
2136
- ###############################################################################
2137
- #
2138
- # Example 3. Demonstrates visible and hidden comments set at the worksheet
2139
- # level.
2140
- #
2903
+ # Add the data, labels and formulas
2904
+ worksheet.write('A1', 'Region', bold)
2905
+ worksheet.write('A2', 'North')
2906
+ worksheet.write('A3', 'North')
2907
+ worksheet.write('A4', 'North')
2908
+ worksheet.write('A5', 'North')
2909
+ worksheet.write('A6', 'North Total', bold)
2910
+
2911
+ worksheet.write('B1', 'Sales', bold)
2912
+ worksheet.write('B2', 1000)
2913
+ worksheet.write('B3', 1200)
2914
+ worksheet.write('B4', 900)
2915
+ worksheet.write('B5', 1200)
2916
+ worksheet.write('B6', '=SUBTOTAL(9,B2:B5)', bold)
2917
+
2918
+ worksheet.write('A7', 'South')
2919
+ worksheet.write('A8', 'South')
2920
+ worksheet.write('A9', 'South')
2921
+ worksheet.write('A10', 'South')
2922
+ worksheet.write('A11', 'South Total', bold)
2923
+
2924
+ worksheet.write('B7', 400)
2925
+ worksheet.write('B8', 600)
2926
+ worksheet.write('B9', 500)
2927
+ worksheet.write('B10', 600)
2928
+ worksheet.write('B11', '=SUBTOTAL(9,B7:B10)', bold)
2929
+
2930
+ worksheet.write('A12', 'Grand Total', bold)
2931
+ worksheet.write('B12', '=SUBTOTAL(9,B2:B10)', bold)
2932
+ end
2933
+ =end
2934
+ def test_panes
2935
+ @xlsx = 'panes.xlsx'
2936
+ workbook = WriteXLSX.new(@xlsx)
2141
2937
 
2142
- # Set up some formatting.
2143
- worksheet3.set_column( 'C:C', 25 )
2144
- worksheet3.set_row( 2, 50 )
2145
- worksheet3.set_row( 5, 50 )
2146
- worksheet3.set_row( 8, 50 )
2938
+ worksheet1 = workbook.add_worksheet('Panes 1')
2939
+ worksheet2 = workbook.add_worksheet('Panes 2')
2940
+ worksheet3 = workbook.add_worksheet('Panes 3')
2941
+ worksheet4 = workbook.add_worksheet('Panes 4')
2147
2942
 
2148
- # Make all comments on the worksheet visible.
2149
- worksheet3.show_comments
2943
+ # Freeze panes
2944
+ worksheet1.freeze_panes(1, 0) # 1 row
2150
2945
 
2151
- cell_text = 'This cell comment is visible, explicitly.'
2946
+ worksheet2.freeze_panes(0, 1) # 1 column
2947
+ worksheet3.freeze_panes(1, 1) # 1 row and column
2152
2948
 
2153
- comment = 'Hello.'
2949
+ # Split panes.
2950
+ # The divisions must be specified in terms of row and column dimensions.
2951
+ # The default row height is 15 and the default column width is 8.43
2952
+ #
2953
+ worksheet4.split_panes(15, 8.43) # 1 row and column
2154
2954
 
2155
- worksheet3.write( 'C3', cell_text, text_wrap )
2156
- worksheet3.write_comment( 'C3', comment, :visible => 1 )
2955
+ #######################################################################
2956
+ #
2957
+ # Set up some formatting and text to highlight the panes
2958
+ #
2157
2959
 
2960
+ header = workbook.add_format(
2961
+ :align => 'center',
2962
+ :valign => 'vcenter',
2963
+ :fg_color => 0x2A
2964
+ )
2158
2965
 
2159
- cell_text =
2160
- 'This cell comment is also visible because we used show_comments().'
2966
+ center = workbook.add_format(:align => 'center')
2161
2967
 
2162
- comment = 'Hello.'
2968
+ #######################################################################
2969
+ #
2970
+ # Sheet 1
2971
+ #
2163
2972
 
2164
- worksheet3.write( 'C6', cell_text, text_wrap )
2165
- worksheet3.write_comment( 'C6', comment )
2973
+ worksheet1.set_column('A:I', 16)
2974
+ worksheet1.set_row(0, 20)
2975
+ worksheet1.set_selection('C3')
2166
2976
 
2977
+ (0..8).each { |i| worksheet1.write(0, i, 'Scroll down', header) }
2978
+ (1..100).each do |i|
2979
+ (0..8).each {|j| worksheet1.write(i, j, i + 1, center)}
2980
+ end
2167
2981
 
2168
- cell_text = 'However, we can still override it locally.'
2982
+ #######################################################################
2983
+ #
2984
+ # Sheet 2
2985
+ #
2169
2986
 
2170
- comment = 'Hello.'
2987
+ worksheet2.set_column('A:A', 16)
2988
+ worksheet2.set_selection('C3')
2171
2989
 
2172
- worksheet3.write( 'C9', cell_text, text_wrap )
2173
- worksheet3.write_comment( 'C9', comment, :visible => 0 )
2990
+ (0..49).each do |i|
2991
+ worksheet2.set_row(i, 15)
2992
+ worksheet2.write(i, 0, 'Scroll right', header)
2993
+ end
2174
2994
 
2995
+ (0..49).each do |i|
2996
+ (1..25).each {|j| worksheet2.write(i, j, j, center)}
2997
+ end
2175
2998
 
2176
- ###############################################################################
2999
+ #######################################################################
2177
3000
  #
2178
- # Example 4. Demonstrates changes to the comment box dimensions.
3001
+ # Sheet 3
2179
3002
  #
2180
3003
 
2181
- # Set up some formatting.
2182
- worksheet4.set_column( 'C:C', 25 )
2183
- worksheet4.set_row( 2, 50 )
2184
- worksheet4.set_row( 5, 50 )
2185
- worksheet4.set_row( 8, 50 )
2186
- worksheet4.set_row( 15, 50 )
2187
-
2188
- worksheet4.show_comments
2189
-
2190
- cell_text = 'This cell comment is default size.'
3004
+ worksheet3.set_column('A:Z', 16)
3005
+ worksheet3.set_selection('C3')
2191
3006
 
2192
- comment = 'Hello.'
3007
+ worksheet3.write(0, 0, '', header)
2193
3008
 
2194
- worksheet4.write( 'C3', cell_text, text_wrap )
2195
- worksheet4.write_comment( 'C3', comment )
3009
+ (1..25).each {|i| worksheet3.write(0, i, 'Scroll down', header)}
3010
+ (1..49).each {|i| worksheet3.write(i, 0, 'Scroll right', header)}
3011
+ (1..49).each do |i|
3012
+ (1..25).each {|j| worksheet3.write(i, j, j, center)}
3013
+ end
2196
3014
 
3015
+ #######################################################################
3016
+ #
3017
+ # Sheet 4
3018
+ #
2197
3019
 
2198
- cell_text = 'This cell comment is twice as wide.'
3020
+ worksheet4.set_selection('C3')
2199
3021
 
2200
- comment = 'Hello.'
3022
+ (1..25).each {|i| worksheet4.write(0, i, 'Scroll', center)}
3023
+ (1..49).each {|i| worksheet4.write(i, 0, 'Scroll', center)}
3024
+ (1..49).each do |i|
3025
+ (1..25).each {|j| worksheet4.write(i, j, j, center)}
3026
+ end
2201
3027
 
2202
- worksheet4.write( 'C6', cell_text, text_wrap )
2203
- worksheet4.write_comment( 'C6', comment, :x_scale => 2 )
3028
+ workbook.close
3029
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
3030
+ end
2204
3031
 
3032
+ def test_print_scale
3033
+ @xlsx = 'print_scale.xlsx'
3034
+ workbook = WriteXLSX.new(@xlsx)
3035
+ worksheet1 = workbook.add_worksheet
3036
+ worksheet2 = workbook.add_worksheet
3037
+ worksheet3 = workbook.add_worksheet
2205
3038
 
2206
- cell_text = 'This cell comment is twice as high.'
3039
+ worksheet1.write(0, 0, "print_scale(100)")
3040
+ worksheet1.print_scale = 100
2207
3041
 
2208
- comment = 'Hello.'
3042
+ worksheet2.write(0, 0, "print_scale(50)")
3043
+ worksheet2.print_scale = 50
2209
3044
 
2210
- worksheet4.write( 'C9', cell_text, text_wrap )
2211
- worksheet4.write_comment( 'C9', comment, :y_scale => 2 )
3045
+ worksheet3.write(0, 0, "print_scale(200)")
3046
+ worksheet3.print_scale = 200
2212
3047
 
3048
+ workbook.close
3049
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
3050
+ end
2213
3051
 
2214
- cell_text = 'This cell comment is scaled in both directions.'
3052
+ def test_properties
3053
+ @xlsx = 'properties.xlsx'
3054
+ workbook = WriteXLSX.new(@xlsx)
3055
+ worksheet = workbook.add_worksheet
2215
3056
 
2216
- comment = 'Hello.'
3057
+ workbook.set_properties(
3058
+ :title => 'This is an example spreadsheet',
3059
+ :subject => 'With document properties',
3060
+ :author => 'John McNamara',
3061
+ :manager => 'Dr. Heinz Doofenshmirtz',
3062
+ :company => 'of Wolves',
3063
+ :category => 'Example spreadsheets',
3064
+ :keywords => 'Sample, Example, Properties',
3065
+ :comments => 'Created with Perl and Excel::Writer::XLSX',
3066
+ :status => 'Quo'
3067
+ )
2217
3068
 
2218
- worksheet4.write( 'C16', cell_text, text_wrap )
2219
- worksheet4.write_comment( 'C16', comment, :x_scale => 1.2, :y_scale => 0.8 )
3069
+ worksheet.set_column('A:A', 70)
3070
+ worksheet.write('A1', "Select 'Office Button -> Prepare -> Properties' to see the file properties.")
2220
3071
 
3072
+ workbook.close
3073
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
3074
+ end
2221
3075
 
2222
- cell_text = 'This cell comment has width and height specified in pixels.'
3076
+ def test_protection
3077
+ @xlsx = 'protection.xlsx'
3078
+ workbook = WriteXLSX.new(@xlsx)
3079
+ worksheet = workbook.add_worksheet
2223
3080
 
2224
- comment = 'Hello.'
3081
+ # Create some format objects
3082
+ unlocked = workbook.add_format(:locked => 0)
3083
+ hidden = workbook.add_format(:hidden => 1)
2225
3084
 
2226
- worksheet4.write( 'C19', cell_text, text_wrap )
2227
- worksheet4.write_comment( 'C19', comment, :width => 200, :height => 20 )
3085
+ # Format the columns
3086
+ worksheet.set_column('A:A', 45)
3087
+ worksheet.set_selection('B3')
2228
3088
 
3089
+ # Protect the worksheet
3090
+ worksheet.protect
2229
3091
 
2230
- ###############################################################################
2231
- #
2232
- # Example 5. Demonstrates changes to the cell comment position.
2233
- #
3092
+ # Examples of cell locking and hiding.
3093
+ worksheet.write('A1', 'Cell B1 is locked. It cannot be edited.')
3094
+ worksheet.write_formula('B1', '=1+2', nil, 3) # Locked by default.
2234
3095
 
2235
- worksheet5.set_column( 'C:C', 25 )
2236
- worksheet5.set_row( 2, 50 )
2237
- worksheet5.set_row( 5, 50 )
2238
- worksheet5.set_row( 8, 50 )
2239
- worksheet5.set_row( 11, 50 )
3096
+ worksheet.write('A2', 'Cell B2 is unlocked. It can be edited.')
3097
+ worksheet.write_formula('B2', '=1+2', unlocked, 3)
2240
3098
 
2241
- worksheet5.show_comments
3099
+ worksheet.write('A3', "Cell B3 is hidden. The formula isn't visible.")
3100
+ worksheet.write_formula('B3', '=1+2', hidden, 3)
2242
3101
 
2243
- cell_text = 'This cell comment is in the default position.'
3102
+ worksheet.write('A5', 'Use Menu->Tools->Protection->Unprotect Sheet')
3103
+ worksheet.write('A6', 'to remove the worksheet protection.')
2244
3104
 
2245
- comment = 'Hello.'
3105
+ workbook.close
3106
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
3107
+ end
2246
3108
 
2247
- worksheet5.write( 'C3', cell_text, text_wrap )
2248
- worksheet5.write_comment( 'C3', comment )
3109
+ def test_regions
3110
+ @xlsx = 'regions.xlsx'
3111
+ workbook = WriteXLSX.new(@xlsx)
2249
3112
 
3113
+ # Add some worksheets
3114
+ north = workbook.add_worksheet('North')
3115
+ south = workbook.add_worksheet('South')
3116
+ east = workbook.add_worksheet('East')
3117
+ west = workbook.add_worksheet('West')
2250
3118
 
2251
- cell_text = 'This cell comment has been moved to another cell.'
3119
+ # Add a Format
3120
+ format = workbook.add_format
3121
+ format.set_bold
3122
+ format.set_color('blue')
2252
3123
 
2253
- comment = 'Hello.'
3124
+ # Add a caption to each worksheet
3125
+ workbook.sheets.each do |worksheet|
3126
+ worksheet.write(0, 0, 'Sales', format)
3127
+ end
2254
3128
 
2255
- worksheet5.write( 'C6', cell_text, text_wrap )
2256
- worksheet5.write_comment( 'C6', comment, :start_cell => 'E4' )
3129
+ # Write some data
3130
+ north.write(0, 1, 200000)
3131
+ south.write(0, 1, 100000)
3132
+ east.write(0, 1, 150000)
3133
+ west.write(0, 1, 100000)
2257
3134
 
3135
+ # Set the active worksheet
3136
+ south.activate
2258
3137
 
2259
- cell_text = 'This cell comment has been moved to another cell.'
3138
+ # Set the width of the first column
3139
+ south.set_column(0, 0, 20)
2260
3140
 
2261
- comment = 'Hello.'
3141
+ # Set the active cell
3142
+ south.set_selection(0, 1)
2262
3143
 
2263
- worksheet5.write( 'C9', cell_text, text_wrap )
2264
- worksheet5.write_comment( 'C9', comment, :start_row => 8, :start_col => 4 )
3144
+ workbook.close
3145
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
3146
+ end
2265
3147
 
3148
+ def test_rich_strings
3149
+ @xlsx = 'rich_strings.xlsx'
3150
+ workbook = WriteXLSX.new(@xlsx)
3151
+ worksheet = workbook.add_worksheet
2266
3152
 
2267
- cell_text = 'This cell comment has been shifted within its default cell.'
3153
+ worksheet.set_column('A:A', 30)
2268
3154
 
2269
- comment = 'Hello.'
3155
+ # Set some formats to use.
3156
+ bold = workbook.add_format(:bold => 1)
3157
+ italic = workbook.add_format(:italic => 1)
3158
+ red = workbook.add_format(:color => 'red')
3159
+ blue = workbook.add_format(:color => 'blue')
3160
+ center = workbook.add_format(:align => 'center')
3161
+ superc = workbook.add_format(:font_script => 1)
2270
3162
 
2271
- worksheet5.write( 'C12', cell_text, text_wrap )
2272
- worksheet5.write_comment( 'C12', comment, :x_offset => 30, :y_offset => 12 )
3163
+ # Write some strings with multiple formats.
3164
+ worksheet.write_rich_string('A1',
3165
+ 'This is ', bold, 'bold', ' and this is ', italic, 'italic')
2273
3166
 
3167
+ worksheet.write_rich_string('A3',
3168
+ 'This is ', red, 'red', ' and this is ', blue, 'blue')
2274
3169
 
2275
- ###############################################################################
2276
- #
2277
- # Example 6. Demonstrates changes to the comment background colour.
2278
- #
3170
+ worksheet.write_rich_string('A5',
3171
+ 'Some ', bold, 'bold text', ' centered', center)
2279
3172
 
2280
- worksheet6.set_column( 'C:C', 25 )
2281
- worksheet6.set_row( 2, 50 )
2282
- worksheet6.set_row( 5, 50 )
2283
- worksheet6.set_row( 8, 50 )
3173
+ worksheet.write_rich_string('A7',
3174
+ italic, 'j = k', superc, '(n-1)', center)
2284
3175
 
2285
- worksheet6.show_comments
3176
+ workbook.close
3177
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
3178
+ end
2286
3179
 
2287
- cell_text = 'This cell comment has a different colour.'
3180
+ def test_right_to_left
3181
+ @xlsx = 'right_to_left.xlsx'
3182
+ workbook = WriteXLSX.new(@xlsx)
3183
+ worksheet1 = workbook.add_worksheet
3184
+ worksheet2 = workbook.add_worksheet
2288
3185
 
2289
- comment = 'Hello.'
3186
+ worksheet2.right_to_left
2290
3187
 
2291
- worksheet6.write( 'C3', cell_text, text_wrap )
2292
- worksheet6.write_comment( 'C3', comment, :color => 'green' )
3188
+ worksheet1.write(0, 0, 'Hello') # A1, B1, C1, ...
3189
+ worksheet2.write(0, 0, 'Hello') # ..., C1, B1, A1
3190
+ workbook.close
3191
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
3192
+ end
2293
3193
 
3194
+ def test_shape1
3195
+ @xlsx = 'shape1.xlsx'
3196
+ workbook = WriteXLSX.new(@xlsx)
3197
+ worksheet = workbook.add_worksheet
2294
3198
 
2295
- cell_text = 'This cell comment has the default colour.'
3199
+ # Add a circle, with centered text.
3200
+ ellipse = workbook.add_shape(
3201
+ :type => 'ellipse',
3202
+ :text => "Hello\nWorld",
3203
+ :width => 60,
3204
+ :height => 60
3205
+ )
2296
3206
 
2297
- comment = 'Hello.'
3207
+ worksheet.insert_shape('A1', ellipse, 50, 50)
2298
3208
 
2299
- worksheet6.write( 'C6', cell_text, text_wrap )
2300
- worksheet6.write_comment( 'C6', comment )
3209
+ # Add a plus sign.
3210
+ plus = workbook.add_shape(:type => 'plus', :width => 20, :height => 20)
3211
+ worksheet.insert_shape('D8', plus)
2301
3212
 
3213
+ workbook.close
3214
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
3215
+ end
2302
3216
 
2303
- cell_text = 'This cell comment has a different colour.'
3217
+ def test_shape2
3218
+ @xlsx = 'shape2.xlsx'
3219
+ workbook = WriteXLSX.new(@xlsx)
3220
+ worksheet = workbook.add_worksheet
2304
3221
 
2305
- comment = 'Hello.'
3222
+ worksheet.hide_gridlines(2)
2306
3223
 
2307
- worksheet6.write( 'C9', cell_text, text_wrap )
2308
- worksheet6.write_comment( 'C9', comment, :color => 0x35 )
3224
+ plain = workbook.add_shape(
3225
+ :type => 'smileyFace',
3226
+ :text => "Plain",
3227
+ :width => 100,
3228
+ :height => 100
3229
+ )
2309
3230
 
3231
+ bbformat = workbook.add_format(
3232
+ :color => 'red',
3233
+ :font => 'Lucida Calligraphy'
3234
+ )
3235
+
3236
+ bbformat.set_bold
3237
+ bbformat.set_underline
3238
+ bbformat.set_italic
3239
+
3240
+ decor = workbook.add_shape(
3241
+ :type => 'smileyFace',
3242
+ :text => 'Decorated',
3243
+ :rotation => 45,
3244
+ :width => 200,
3245
+ :height => 100,
3246
+ :format => bbformat,
3247
+ :line_type => 'sysDot',
3248
+ :line_weight => 3,
3249
+ :fill => 'FFFF00',
3250
+ :line => '3366FF'
3251
+ )
3252
+
3253
+ worksheet.insert_shape('A1', plain, 50, 50)
3254
+ worksheet.insert_shape('A1', decor, 250, 50)
2310
3255
 
2311
- ###############################################################################
2312
- #
2313
- # Example 7. Demonstrates how to set the cell comment author.
2314
- #
3256
+ workbook.close
3257
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
3258
+ end
2315
3259
 
2316
- worksheet7.set_column( 'C:C', 30 )
2317
- worksheet7.set_row( 2, 50 )
2318
- worksheet7.set_row( 5, 50 )
2319
- worksheet7.set_row( 8, 50 )
3260
+ def test_shape3
3261
+ @xlsx = 'shape3.xlsx'
3262
+ workbook = WriteXLSX.new(@xlsx)
3263
+ worksheet = workbook.add_worksheet
2320
3264
 
2321
- author = ''
2322
- cell = 'C3'
3265
+ normal = workbook.add_shape(
3266
+ :name => 'chip',
3267
+ :type => 'diamond',
3268
+ :text => 'Normal',
3269
+ :width => 100,
3270
+ :height => 100
3271
+ )
2323
3272
 
2324
- cell_text = "Move the mouse over this cell and you will see 'Cell commented " +
2325
- "by #{author}' (blank) in the status bar at the bottom"
3273
+ worksheet.insert_shape('A1', normal, 50, 50)
3274
+ normal[:text] = 'Scaled 3w x 2h'
3275
+ normal[:name] = 'Hope'
3276
+ worksheet.insert_shape('A1', normal, 250, 50, 3, 2)
2326
3277
 
2327
- comment = 'Hello.'
3278
+ workbook.close
3279
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
3280
+ end
2328
3281
 
2329
- worksheet7.write( cell, cell_text, text_wrap )
2330
- worksheet7.write_comment( cell, comment )
3282
+ def test_shape4
3283
+ @xlsx = 'shape4.xlsx'
3284
+ workbook = WriteXLSX.new(@xlsx)
3285
+ worksheet = workbook.add_worksheet
3286
+ worksheet.hide_gridlines(2)
2331
3287
 
3288
+ type = 'rect'
3289
+ shape = workbook.add_shape(
3290
+ :type => type,
3291
+ :width => 90,
3292
+ :height => 90
3293
+ )
2332
3294
 
2333
- author = 'Ruby'
2334
- cell = 'C6'
2335
- cell_text = "Move the mouse over this cell and you will see 'Cell commented " +
2336
- "by #{author}' in the status bar at the bottom"
3295
+ (1..10).each do |n|
3296
+ # Change the last 5 rectangles to stars. Previously
3297
+ # inserted shapes stay as rectangles.
3298
+ type = 'star5' if n == 6
3299
+ shape[:type] = type
3300
+ shape[:text] = "#{type} #{n}"
3301
+ worksheet.insert_shape('A1', shape, n * 100, 50)
3302
+ end
2337
3303
 
2338
- comment = 'Hello.'
3304
+ stencil = workbook.add_shape(
3305
+ :stencil => 1, # The default.
3306
+ :width => 90,
3307
+ :height => 90,
3308
+ :text => 'started as a box'
3309
+ )
3310
+ worksheet.insert_shape('A1', stencil, 100, 150)
2339
3311
 
2340
- worksheet7.write( cell, cell_text, text_wrap )
2341
- worksheet7.write_comment( cell, comment, :author => author )
3312
+ stencil[:stencil] = 0
3313
+ worksheet.insert_shape('A1', stencil, 200, 150)
3314
+ worksheet.insert_shape('A1', stencil, 300, 150)
2342
3315
 
3316
+ # Ooopa! Changed my mind.
3317
+ # Change the rectangle to an ellipse (circle),
3318
+ # for the last two shapes.
3319
+ stencil[:type] = 'ellipse'
3320
+ stencil[:text] = 'Now its a circle'
2343
3321
 
2344
- author = '€'
2345
- cell = 'C9'
2346
- cell_text = "Move the mouse over this cell and you will see 'Cell commented " +
2347
- "by #{author}' in the status bar at the bottom"
2348
- comment = 'Hello.'
3322
+ workbook.close
3323
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
3324
+ end
2349
3325
 
2350
- worksheet7.write( cell, cell_text, text_wrap )
2351
- worksheet7.write_comment( cell, comment, :author => author )
3326
+ def test_shape5
3327
+ @xlsx = 'shape5.xlsx'
3328
+ workbook = WriteXLSX.new(@xlsx)
3329
+ worksheet = workbook.add_worksheet
2352
3330
 
3331
+ s1 = workbook.add_shape(
3332
+ :type => 'ellipse',
3333
+ :width => 60,
3334
+ :height => 60
3335
+ )
3336
+ worksheet.insert_shape('A1', s1, 50, 50)
2353
3337
 
3338
+ s2 = workbook.add_shape(
3339
+ :type => 'plus',
3340
+ :width => 20,
3341
+ :height => 20
3342
+ )
3343
+ worksheet.insert_shape('A1', s2, 250, 200)
2354
3344
 
3345
+ # Create a connector to link the two shapes.
3346
+ cxn_shape = workbook.add_shape(:type => 'bentConnector3')
2355
3347
 
2356
- ###############################################################################
2357
- #
2358
- # Example 8. Demonstrates the need to explicitly set the row height.
2359
- #
3348
+ # Link the start of the connector to the right side.
3349
+ cxn_shape[:start] = s1[:id]
3350
+ cxn_shape[:start_index] = 4 # 4th connection pt, clockwise from top(0).
3351
+ cxn_shape[:start_side] = 'b' # r)ight or b)ottom.
2360
3352
 
2361
- # Set up some formatting.
2362
- worksheet8.set_column( 'C:C', 25 )
2363
- worksheet8.set_row( 2, 80 )
3353
+ # Link the end of the connector to the left side.
3354
+ cxn_shape[:end] = s2[:id]
3355
+ cxn_shape[:end_index] = 0 # clockwise from top(0).
3356
+ cxn_shape[:end_side] = 't' # t)op.
2364
3357
 
2365
- worksheet8.show_comments
3358
+ worksheet.insert_shape('A1', cxn_shape, 0, 0)
2366
3359
 
3360
+ workbook.close
3361
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
3362
+ end
2367
3363
 
2368
- cell_text =
2369
- 'The height of this row has been adjusted explicitly using ' +
2370
- 'set_row(). The size of the comment box is adjusted ' +
2371
- 'accordingly by WriteXLSX.'
3364
+ def test_shape6
3365
+ @xlsx = 'shape6.xlsx'
3366
+ workbook = WriteXLSX.new(@xlsx)
3367
+ worksheet = workbook.add_worksheet
2372
3368
 
2373
- comment = 'Hello.'
3369
+ s1 = workbook.add_shape(
3370
+ :type => 'chevron',
3371
+ :width => 60,
3372
+ :height => 60
3373
+ )
3374
+ worksheet.insert_shape('A1', s1, 50, 50)
2374
3375
 
2375
- worksheet8.write( 'C3', cell_text, text_wrap )
2376
- worksheet8.write_comment( 'C3', comment )
3376
+ s2 = workbook.add_shape(
3377
+ :type => 'pentagon',
3378
+ :width => 20,
3379
+ :height => 20
3380
+ )
3381
+ worksheet.insert_shape('A1', s2, 250, 200)
2377
3382
 
3383
+ # Create a connector to link the two shapes.
3384
+ cxn_shape = workbook.add_shape(:type => 'curvedConnector3')
2378
3385
 
2379
- cell_text =
2380
- 'The height of this row has been adjusted by Excel due to the ' +
2381
- 'text wrap property being set. Unfortunately this means that ' +
2382
- 'the height of the row is unknown to WriteXLSX at ' +
2383
- "run time and thus the comment box is stretched as well.\n\n" +
2384
- 'Use set_row() to specify the row height explicitly to avoid ' +
2385
- 'this problem.'
3386
+ # Link the start of the connector to the right side.
3387
+ cxn_shape[:start] = s1[:id]
3388
+ cxn_shape[:start_index] = 2 # 2nd connection pt, clockwise from top(0).
3389
+ cxn_shape[:start_side] = 'r' # r)ight or b)ottom.
2386
3390
 
2387
- comment = 'Hello.'
3391
+ # Link the end of the connector to the left side.
3392
+ cxn_shape[:end] = s2[:id]
3393
+ cxn_shape[:end_index] = 4 # 4th connection pt, clockwise from top(0).
3394
+ cxn_shape[:end_side] = 'l' # l)eft or t)op.
2388
3395
 
2389
- worksheet8.write( 'C6', cell_text, text_wrap )
2390
- worksheet8.write_comment( 'C6', comment )
3396
+ worksheet.insert_shape('A1', cxn_shape, 0, 0)
2391
3397
 
2392
3398
  workbook.close
2393
- compare_xlsx(@expected_dir, @result_dir, xlsx)
3399
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
2394
3400
  end
2395
3401
 
2396
- def test_print_scale
2397
- xlsx = 'print_scale.xlsx'
2398
- workbook = WriteXLSX.new(xlsx)
2399
- worksheet1 = workbook.add_worksheet
2400
- worksheet2 = workbook.add_worksheet
2401
- worksheet3 = workbook.add_worksheet
3402
+ def test_shape7
3403
+ @xlsx = 'shape7.xlsx'
3404
+ workbook = WriteXLSX.new(@xlsx)
3405
+ worksheet = workbook.add_worksheet
2402
3406
 
2403
- worksheet1.write( 0, 0, "print_scale(100)")
2404
- worksheet1.print_scale = 100
3407
+ # Add a circle, with centered text. c is for circle, not center.
3408
+ cw = 60
3409
+ ch = 60
3410
+ cx = 210
3411
+ cy = 190
3412
+
3413
+ ellipse = workbook.add_shape(
3414
+ :type => 'ellipse',
3415
+ :id => 2,
3416
+ :text => "Hello\nWorld",
3417
+ :width => cw,
3418
+ :height => ch
3419
+ )
3420
+ worksheet.insert_shape('A1', ellipse, cx, cy)
3421
+
3422
+ # Add a plus sign at 4 different positions around the circle.
3423
+ pw = 20
3424
+ ph = 20
3425
+ px = 120
3426
+ py = 250
3427
+
3428
+ plus = workbook.add_shape(
3429
+ :type => 'plus',
3430
+ :id => 3,
3431
+ :width => pw,
3432
+ :height => ph
3433
+ )
2405
3434
 
2406
- worksheet2.write( 0, 0, "print_scale(50)")
2407
- worksheet2.print_scale = 50
3435
+ p1 = worksheet.insert_shape('A1', plus, 350, 350)
3436
+ p2 = worksheet.insert_shape('A1', plus, 150, 350)
3437
+ p3 = worksheet.insert_shape('A1', plus, 350, 150)
3438
+ plus[:adjustments] = 35 # change shape of plus symbol.
3439
+ p4 = worksheet.insert_shape('A1', plus, 150, 150)
2408
3440
 
2409
- worksheet3.write( 0, 0, "print_scale(200)")
2410
- worksheet3.print_scale = 200
3441
+ cxn_shape = workbook.add_shape(:type => 'bentConnector3', :fill => 0)
2411
3442
 
2412
- workbook.close
2413
- compare_xlsx(@expected_dir, @result_dir, xlsx)
2414
- end
3443
+ cxn_shape[:start] = ellipse[:id]
3444
+ cxn_shape[:start_index] = 4 # 4th connection pt, clockwise from top(0).
3445
+ cxn_shape[:start_side] = 'b' # r)ight or b)ottom.
2415
3446
 
2416
- def test_properties
2417
- xlsx = 'properties.xlsx'
2418
- workbook = WriteXLSX.new(xlsx)
2419
- worksheet = workbook.add_worksheet
3447
+ cxn_shape[:end] = p1[:id]
3448
+ cxn_shape[:end_index] = 0
3449
+ cxn_shape[:end_side] = 't' # l)eft or t)op.
3450
+ worksheet.insert_shape('A1', cxn_shape, 0, 0)
2420
3451
 
2421
- workbook.set_properties(
2422
- :title => 'This is an example spreadsheet',
2423
- :subject => 'With document properties',
2424
- :author => 'John McNamara',
2425
- :manager => 'Dr. Heinz Doofenshmirtz',
2426
- :company => 'of Wolves',
2427
- :category => 'Example spreadsheets',
2428
- :keywords => 'Sample, Example, Properties',
2429
- :comments => 'Created with Perl and Excel::Writer::XLSX',
2430
- :status => 'Quo'
2431
- )
3452
+ cxn_shape[:end] = p2[:id]
3453
+ worksheet.insert_shape('A1', cxn_shape, 0, 0)
2432
3454
 
2433
- worksheet.set_column('A:A', 70)
2434
- worksheet.write('A1', "Select 'Office Button -> Prepare -> Properties' to see the file properties.")
3455
+ cxn_shape[:end] = p3[:id]
3456
+ worksheet.insert_shape('A1', cxn_shape, 0, 0)
3457
+
3458
+ cxn_shape[:end] = p4[:id]
3459
+ cxn_shape[:adjustments] = [-50, 45, 120]
3460
+ worksheet.insert_shape('A1', cxn_shape, 0, 0)
2435
3461
 
2436
3462
  workbook.close
2437
- compare_xlsx(@expected_dir, @result_dir, xlsx)
3463
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
2438
3464
  end
2439
3465
 
2440
- def test_protection
2441
- xlsx = 'protection.xlsx'
2442
- workbook = WriteXLSX.new(xlsx)
3466
+ def test_shape8
3467
+ @xlsx = 'shape8.xlsx'
3468
+ workbook = WriteXLSX.new(@xlsx)
2443
3469
  worksheet = workbook.add_worksheet
2444
3470
 
2445
- # Create some format objects
2446
- unlocked = workbook.add_format(:locked => 0)
2447
- hidden = workbook.add_format(:hidden => 1)
3471
+ # Add a circle, with centered text. c is for circle, not center.
3472
+ cw = 60
3473
+ ch = 60
3474
+ cx = 210
3475
+ cy = 190
3476
+
3477
+ ellipse = workbook.add_shape(
3478
+ :type => 'ellipse',
3479
+ :id => 2,
3480
+ :text => "Hello\nWorld",
3481
+ :width => cw,
3482
+ :height => ch
3483
+ )
3484
+ worksheet.insert_shape('A1', ellipse, cx, cy)
3485
+
3486
+ # Add a plus sign at 4 different positionos around the circle.
3487
+ pw = 20
3488
+ ph = 20
3489
+ px = 120
3490
+ py = 250
3491
+
3492
+ plus = workbook.add_shape(
3493
+ :type => 'plus',
3494
+ :id => 3,
3495
+ :width => pw,
3496
+ :height => ph
3497
+ )
2448
3498
 
2449
- # Format the columns
2450
- worksheet.set_column('A:A', 45)
2451
- worksheet.set_selection('B3')
3499
+ p1 = worksheet.insert_shape('A1', plus, 350, 150)
3500
+ p2 = worksheet.insert_shape('A1', plus, 350, 350)
3501
+ p3 = worksheet.insert_shape('A1', plus, 150, 350)
3502
+ p4 = worksheet.insert_shape('A1', plus, 150, 150)
2452
3503
 
2453
- # Protect the worksheet
2454
- worksheet.protect
3504
+ cxn_shape = workbook.add_shape(:type => 'bentConnector3', :fill => 0)
2455
3505
 
2456
- # Examples of cell locking and hiding.
2457
- worksheet.write('A1', 'Cell B1 is locked. It cannot be edited.')
2458
- worksheet.write_formula('B1', '=1+2', nil, 3) # Locked by default.
3506
+ cxn_shape[:start] = ellipse[:id]
3507
+ cxn_shape[:start_index] = 2 # 2nd connection pt, clockwise from top(0).
3508
+ cxn_shape[:start_side] = 'r' # r)ight or b)ottom.
2459
3509
 
2460
- worksheet.write('A2', 'Cell B2 is unlocked. It can be edited.')
2461
- worksheet.write_formula('B2', '=1+2', unlocked, 3)
3510
+ cxn_shape[:end] = p1[:id]
3511
+ cxn_shape[:end_index] = 3 # 3rd connection point on plus, right side
3512
+ cxn_shape[:end_side] = 'l' # l)eft or t)op.
3513
+ worksheet.insert_shape('A1', cxn_shape, 0, 0)
2462
3514
 
2463
- worksheet.write('A3', "Cell B3 is hidden. The formula isn't visible.")
2464
- worksheet.write_formula('B3', '=1+2', hidden, 3)
3515
+ cxn_shape[:end] = p2[:id]
3516
+ worksheet.insert_shape('A1', cxn_shape, 0, 0)
2465
3517
 
2466
- worksheet.write('A5', 'Use Menu->Tools->Protection->Unprotect Sheet')
2467
- worksheet.write('A6', 'to remove the worksheet protection.')
3518
+ cxn_shape[:end] = p3[:id]
3519
+ worksheet.insert_shape('A1', cxn_shape, 0, 0)
3520
+
3521
+ cxn_shape[:end] = p4[:id]
3522
+ cxn_shape[:adjustments] = [-50, 45, 120]
3523
+ worksheet.insert_shape('A1', cxn_shape, 0, 0)
2468
3524
 
2469
3525
  workbook.close
2470
- compare_xlsx(@expected_dir, @result_dir, xlsx)
3526
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
2471
3527
  end
2472
3528
 
2473
- def test_rich_strings
2474
- xlsx = 'rich_strings.xlsx'
2475
- workbook = WriteXLSX.new(xlsx)
2476
- worksheet = workbook.add_worksheet
3529
+ def test_shape_all
3530
+ @xlsx = 'shape_all.xlsx'
3531
+ workbook = WriteXLSX.new(@xlsx)
3532
+ worksheet = nil
3533
+ last_sheet = ''
3534
+ row = 0
3535
+
3536
+ shapes_list.each_line do |line|
3537
+ line = line.chomp
3538
+ next unless line =~ /^\w/ # Skip blank lines and comments.
3539
+
3540
+ sheet, name = line.split(/\t/)
3541
+ if last_sheet != sheet
3542
+ worksheet = workbook.add_worksheet(sheet)
3543
+ row = 2
3544
+ end
3545
+ last_sheet = sheet
3546
+ shape = workbook.add_shape(
3547
+ :type => name,
3548
+ :text => name,
3549
+ :width => 90,
3550
+ :height => 90
3551
+ )
2477
3552
 
2478
- worksheet.set_column('A:A', 30)
3553
+ # Connectors can not have labels, so write the connector name in the cell
3554
+ # to the left.
3555
+ worksheet.write(row, 0, name ) if sheet == 'Connector'
3556
+ worksheet.insert_shape(row, 2, shape, 0, 0)
3557
+ row += 5
3558
+ end
2479
3559
 
2480
- # Set some formats to use.
2481
- bold = workbook.add_format(:bold => 1)
2482
- italic = workbook.add_format(:italic => 1)
2483
- red = workbook.add_format(:color => 'red')
2484
- blue = workbook.add_format(:color => 'blue')
2485
- center = workbook.add_format(:align => 'center')
2486
- superc = workbook.add_format(:font_script => 1)
3560
+ workbook.close
3561
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
3562
+ end
2487
3563
 
2488
- # Write some strings with multiple formats.
2489
- worksheet.write_rich_string('A1',
2490
- 'This is ', bold, 'bold', ' and this is ', italic, 'italic')
3564
+ def shapes_list
3565
+ <<EOS
3566
+ Action actionButtonBackPrevious
3567
+ Action actionButtonBeginning
3568
+ Action actionButtonBlank
3569
+ Action actionButtonDocument
3570
+ Action actionButtonEnd
3571
+ Action actionButtonForwardNext
3572
+ Action actionButtonHelp
3573
+ Action actionButtonHome
3574
+ Action actionButtonInformation
3575
+ Action actionButtonMovie
3576
+ Action actionButtonReturn
3577
+ Action actionButtonSound
3578
+ Arrow bentArrow
3579
+ Arrow bentUpArrow
3580
+ Arrow circularArrow
3581
+ Arrow curvedDownArrow
3582
+ Arrow curvedLeftArrow
3583
+ Arrow curvedRightArrow
3584
+ Arrow curvedUpArrow
3585
+ Arrow downArrow
3586
+ Arrow leftArrow
3587
+ Arrow leftCircularArrow
3588
+ Arrow leftRightArrow
3589
+ Arrow leftRightCircularArrow
3590
+ Arrow leftRightUpArrow
3591
+ Arrow leftUpArrow
3592
+ Arrow notchedRightArrow
3593
+ Arrow quadArrow
3594
+ Arrow rightArrow
3595
+ Arrow stripedRightArrow
3596
+ Arrow swooshArrow
3597
+ Arrow upArrow
3598
+ Arrow upDownArrow
3599
+ Arrow uturnArrow
3600
+ Basic blockArc
3601
+ Basic can
3602
+ Basic chevron
3603
+ Basic cube
3604
+ Basic decagon
3605
+ Basic diamond
3606
+ Basic dodecagon
3607
+ Basic donut
3608
+ Basic ellipse
3609
+ Basic funnel
3610
+ Basic gear6
3611
+ Basic gear9
3612
+ Basic heart
3613
+ Basic heptagon
3614
+ Basic hexagon
3615
+ Basic homePlate
3616
+ Basic lightningBolt
3617
+ Basic line
3618
+ Basic lineInv
3619
+ Basic moon
3620
+ Basic nonIsoscelesTrapezoid
3621
+ Basic noSmoking
3622
+ Basic octagon
3623
+ Basic parallelogram
3624
+ Basic pentagon
3625
+ Basic pie
3626
+ Basic pieWedge
3627
+ Basic plaque
3628
+ Basic rect
3629
+ Basic round1Rect
3630
+ Basic round2DiagRect
3631
+ Basic round2SameRect
3632
+ Basic roundRect
3633
+ Basic rtTriangle
3634
+ Basic smileyFace
3635
+ Basic snip1Rect
3636
+ Basic snip2DiagRect
3637
+ Basic snip2SameRect
3638
+ Basic snipRoundRect
3639
+ Basic star10
3640
+ Basic star12
3641
+ Basic star16
3642
+ Basic star24
3643
+ Basic star32
3644
+ Basic star4
3645
+ Basic star5
3646
+ Basic star6
3647
+ Basic star7
3648
+ Basic star8
3649
+ Basic sun
3650
+ Basic teardrop
3651
+ Basic trapezoid
3652
+ Basic triangle
3653
+ Callout accentBorderCallout1
3654
+ Callout accentBorderCallout2
3655
+ Callout accentBorderCallout3
3656
+ Callout accentCallout1
3657
+ Callout accentCallout2
3658
+ Callout accentCallout3
3659
+ Callout borderCallout1
3660
+ Callout borderCallout2
3661
+ Callout borderCallout3
3662
+ Callout callout1
3663
+ Callout callout2
3664
+ Callout callout3
3665
+ Callout cloudCallout
3666
+ Callout downArrowCallout
3667
+ Callout leftArrowCallout
3668
+ Callout leftRightArrowCallout
3669
+ Callout quadArrowCallout
3670
+ Callout rightArrowCallout
3671
+ Callout upArrowCallout
3672
+ Callout upDownArrowCallout
3673
+ Callout wedgeEllipseCallout
3674
+ Callout wedgeRectCallout
3675
+ Callout wedgeRoundRectCallout
3676
+ Chart chartPlus
3677
+ Chart chartStar
3678
+ Chart chartX
3679
+ Connector bentConnector2
3680
+ Connector bentConnector3
3681
+ Connector bentConnector4
3682
+ Connector bentConnector5
3683
+ Connector curvedConnector2
3684
+ Connector curvedConnector3
3685
+ Connector curvedConnector4
3686
+ Connector curvedConnector5
3687
+ Connector straightConnector1
3688
+ FlowChart flowChartAlternateProcess
3689
+ FlowChart flowChartCollate
3690
+ FlowChart flowChartConnector
3691
+ FlowChart flowChartDecision
3692
+ FlowChart flowChartDelay
3693
+ FlowChart flowChartDisplay
3694
+ FlowChart flowChartDocument
3695
+ FlowChart flowChartExtract
3696
+ FlowChart flowChartInputOutput
3697
+ FlowChart flowChartInternalStorage
3698
+ FlowChart flowChartMagneticDisk
3699
+ FlowChart flowChartMagneticDrum
3700
+ FlowChart flowChartMagneticTape
3701
+ FlowChart flowChartManualInput
3702
+ FlowChart flowChartManualOperation
3703
+ FlowChart flowChartMerge
3704
+ FlowChart flowChartMultidocument
3705
+ FlowChart flowChartOfflineStorage
3706
+ FlowChart flowChartOffpageConnector
3707
+ FlowChart flowChartOnlineStorage
3708
+ FlowChart flowChartOr
3709
+ FlowChart flowChartPredefinedProcess
3710
+ FlowChart flowChartPreparation
3711
+ FlowChart flowChartProcess
3712
+ FlowChart flowChartPunchedCard
3713
+ FlowChart flowChartPunchedTape
3714
+ FlowChart flowChartSort
3715
+ FlowChart flowChartSummingJunction
3716
+ FlowChart flowChartTerminator
3717
+ Math mathDivide
3718
+ Math mathEqual
3719
+ Math mathMinus
3720
+ Math mathMultiply
3721
+ Math mathNotEqual
3722
+ Math mathPlus
3723
+ Star_Banner arc
3724
+ Star_Banner bevel
3725
+ Star_Banner bracePair
3726
+ Star_Banner bracketPair
3727
+ Star_Banner chord
3728
+ Star_Banner cloud
3729
+ Star_Banner corner
3730
+ Star_Banner diagStripe
3731
+ Star_Banner doubleWave
3732
+ Star_Banner ellipseRibbon
3733
+ Star_Banner ellipseRibbon2
3734
+ Star_Banner foldedCorner
3735
+ Star_Banner frame
3736
+ Star_Banner halfFrame
3737
+ Star_Banner horizontalScroll
3738
+ Star_Banner irregularSeal1
3739
+ Star_Banner irregularSeal2
3740
+ Star_Banner leftBrace
3741
+ Star_Banner leftBracket
3742
+ Star_Banner leftRightRibbon
3743
+ Star_Banner plus
3744
+ Star_Banner ribbon
3745
+ Star_Banner ribbon2
3746
+ Star_Banner rightBrace
3747
+ Star_Banner rightBracket
3748
+ Star_Banner verticalScroll
3749
+ Star_Banner wave
3750
+ Tabs cornerTabs
3751
+ Tabs plaqueTabs
3752
+ Tabs squareTabs
3753
+ EOS
3754
+ end
2491
3755
 
2492
- worksheet.write_rich_string('A3',
2493
- 'This is ', red, 'red', ' and this is ', blue, 'blue')
3756
+ def test_stats
3757
+ @xlsx = 'stats.xlsx'
3758
+ workbook = WriteXLSX.new(@xlsx)
3759
+ worksheet = workbook.add_worksheet('Test data')
3760
+
3761
+ # Set the column width for column 1
3762
+ worksheet.set_column(0, 0, 20)
3763
+
3764
+ # Create a format for the headings
3765
+ format = workbook.add_format
3766
+ format.set_bold
3767
+
3768
+ # Write the sample data
3769
+ worksheet.write(0, 0, 'Sample', format)
3770
+ worksheet.write(0, 1, 1)
3771
+ worksheet.write(0, 2, 2)
3772
+ worksheet.write(0, 3, 3)
3773
+ worksheet.write(0, 4, 4)
3774
+ worksheet.write(0, 5, 5)
3775
+ worksheet.write(0, 6, 6)
3776
+ worksheet.write(0, 7, 7)
3777
+ worksheet.write(0, 8, 8)
3778
+
3779
+ worksheet.write(1, 0, 'Length', format)
3780
+ worksheet.write(1, 1, 25.4)
3781
+ worksheet.write(1, 2, 25.4)
3782
+ worksheet.write(1, 3, 24.8)
3783
+ worksheet.write(1, 4, 25.0)
3784
+ worksheet.write(1, 5, 25.3)
3785
+ worksheet.write(1, 6, 24.9)
3786
+ worksheet.write(1, 7, 25.2)
3787
+ worksheet.write(1, 8, 24.8)
3788
+
3789
+ # Write some statistical functions
3790
+ worksheet.write(4, 0, 'Count', format)
3791
+ worksheet.write(4, 1, '=COUNT(B1:I1)')
3792
+
3793
+ worksheet.write(5, 0, 'Sum', format)
3794
+ worksheet.write(5, 1, '=SUM(B2:I2)')
3795
+
3796
+ worksheet.write(6, 0, 'Average', format)
3797
+ worksheet.write(6, 1, '=AVERAGE(B2:I2)')
3798
+
3799
+ worksheet.write(7, 0, 'Min', format)
3800
+ worksheet.write(7, 1, '=MIN(B2:I2)')
3801
+
3802
+ worksheet.write(8, 0, 'Max', format)
3803
+ worksheet.write(8, 1, '=MAX(B2:I2)')
3804
+
3805
+ worksheet.write(9, 0, 'Standard Deviation', format)
3806
+ worksheet.write(9, 1, '=STDEV(B2:I2)')
3807
+
3808
+ worksheet.write(10, 0, 'Kurtosis', format)
3809
+ worksheet.write(10, 1, '=KURT(B2:I2)')
2494
3810
 
2495
- worksheet.write_rich_string('A5',
2496
- 'Some ', bold, 'bold text', ' centered', center)
3811
+ workbook.close
3812
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
3813
+ end
2497
3814
 
2498
- worksheet.write_rich_string('A7',
2499
- italic, 'j = k', superc, '(n-1)', center)
3815
+ def test_stats_ext
3816
+ @xlsx = 'stats_ext.xlsx'
3817
+ workbook = WriteXLSX.new(@xlsx)
3818
+ worksheet1 = workbook.add_worksheet('Test results')
3819
+ worksheet2 = workbook.add_worksheet('Data')
3820
+
3821
+ # Set the column width for column 1
3822
+ worksheet1.set_column(0, 0, 20)
3823
+
3824
+ # Create a format for the headings
3825
+ headings = workbook.add_format
3826
+ headings.set_bold
3827
+
3828
+ # Create a numerical format
3829
+ numformat = workbook.add_format
3830
+ numformat.set_num_format('0.00')
3831
+
3832
+ # Write some statistical functions
3833
+ worksheet1.write(0, 0, 'Count', headings)
3834
+ worksheet1.write(0, 1, '=COUNT(Data!B2:B9)')
3835
+
3836
+ worksheet1.write(1, 0, 'Sum', headings)
3837
+ worksheet1.write(1, 1, '=SUM(Data!B2:B9)')
3838
+
3839
+ worksheet1.write(2, 0, 'Average', headings)
3840
+ worksheet1.write(2, 1, '=AVERAGE(Data!B2:B9)')
3841
+
3842
+ worksheet1.write(3, 0, 'Min', headings)
3843
+ worksheet1.write(3, 1, '=MIN(Data!B2:B9)')
3844
+
3845
+ worksheet1.write(4, 0, 'Max', headings)
3846
+ worksheet1.write(4, 1, '=MAX(Data!B2:B9)')
3847
+
3848
+ worksheet1.write(5, 0, 'Standard Deviation', headings)
3849
+ worksheet1.write(5, 1, '=STDEV(Data!B2:B9)')
3850
+
3851
+ worksheet1.write(6, 0, 'Kurtosis', headings)
3852
+ worksheet1.write(6, 1, '=KURT(Data!B2:B9)')
3853
+
3854
+ # Write the sample data
3855
+ worksheet2.write(0, 0, 'Sample', headings)
3856
+ worksheet2.write(1, 0, 1)
3857
+ worksheet2.write(2, 0, 2)
3858
+ worksheet2.write(3, 0, 3)
3859
+ worksheet2.write(4, 0, 4)
3860
+ worksheet2.write(5, 0, 5)
3861
+ worksheet2.write(6, 0, 6)
3862
+ worksheet2.write(7, 0, 7)
3863
+ worksheet2.write(8, 0, 8)
3864
+
3865
+ worksheet2.write(0, 1, 'Length', headings)
3866
+ worksheet2.write(1, 1, 25.4, numformat)
3867
+ worksheet2.write(2, 1, 25.4, numformat)
3868
+ worksheet2.write(3, 1, 24.8, numformat)
3869
+ worksheet2.write(4, 1, 25.0, numformat)
3870
+ worksheet2.write(5, 1, 25.3, numformat)
3871
+ worksheet2.write(6, 1, 24.9, numformat)
3872
+ worksheet2.write(7, 1, 25.2, numformat)
3873
+ worksheet2.write(8, 1, 24.8, numformat)
2500
3874
 
2501
3875
  workbook.close
2502
- compare_xlsx(@expected_dir, @result_dir, xlsx)
3876
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
2503
3877
  end
2504
3878
 
2505
- def test_right_to_left
2506
- xlsx = 'right_to_left.xlsx'
2507
- workbook = WriteXLSX.new(xlsx)
2508
- worksheet1 = workbook.add_worksheet
2509
- worksheet2 = workbook.add_worksheet
3879
+ def test_stocks
3880
+ @xlsx = 'stocks.xlsx'
3881
+ workbook = WriteXLSX.new(@xlsx)
3882
+ worksheet = workbook.add_worksheet
2510
3883
 
2511
- worksheet2.right_to_left
3884
+ # Set the column width for columns 1, 2, 3 and 4
3885
+ worksheet.set_column(0, 3, 15)
3886
+
3887
+ # Create a format for the column headings
3888
+ header = workbook.add_format
3889
+ header.set_bold
3890
+ header.set_size(12)
3891
+ header.set_color('blue')
3892
+
3893
+ # Create a format for the stock price
3894
+ f_price = workbook.add_format
3895
+ f_price.set_align('left')
3896
+ f_price.set_num_format('$0.00')
3897
+
3898
+ # Create a format for the stock volume
3899
+ f_volume = workbook.add_format
3900
+ f_volume.set_align('left')
3901
+ f_volume.set_num_format('#,##0')
3902
+
3903
+ # Create a format for the price change. This is an example of a conditional
3904
+ # format. The number is formatted as a percentage. If it is positive it is
3905
+ # formatted in green, if it is negative it is formatted in red and if it is
3906
+ # zero it is formatted as the default font colour (in this case black).
3907
+ # Note: the [Green] format produces an unappealing lime green. Try
3908
+ # [Color 10] instead for a dark green.
3909
+ #
3910
+ f_change = workbook.add_format
3911
+ f_change.set_align('left')
3912
+ f_change.set_num_format('[Green]0.0%;[Red]-0.0%;0.0%')
3913
+
3914
+ # Write out the data
3915
+ worksheet.write(0, 0, 'Company', header)
3916
+ worksheet.write(0, 1, 'Price', header)
3917
+ worksheet.write(0, 2, 'Volume', header)
3918
+ worksheet.write(0, 3, 'Change', header)
3919
+
3920
+ worksheet.write(1, 0, 'Damage Inc.')
3921
+ worksheet.write(1, 1, 30.25, f_price) # $30.25
3922
+ worksheet.write(1, 2, 1234567, f_volume) # 1,234,567
3923
+ worksheet.write(1, 3, 0.085, f_change) # 8.5% in green
3924
+
3925
+ worksheet.write(2, 0, 'Dump Corp.')
3926
+ worksheet.write(2, 1, 1.56, f_price) # $1.56
3927
+ worksheet.write(2, 2, 7564, f_volume) # 7,564
3928
+ worksheet.write(2, 3, -0.015, f_change) # -1.5% in red
3929
+
3930
+ worksheet.write(3, 0, 'Rev Ltd.')
3931
+ worksheet.write(3, 1, 0.13, f_price) # $0.13
3932
+ worksheet.write(3, 2, 321, f_volume) # 321
3933
+ worksheet.write(3, 3, 0, f_change) # 0 in the font color (black)
2512
3934
 
2513
- worksheet1.write(0, 0, 'Hello') # A1, B1, C1, ...
2514
- worksheet2.write(0, 0, 'Hello') # ..., C1, B1, A1
2515
3935
  workbook.close
2516
- compare_xlsx(@expected_dir, @result_dir, xlsx)
3936
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
2517
3937
  end
2518
3938
 
2519
3939
  def test_tab_colors
2520
- xlsx = 'tab_colors.xlsx'
2521
- workbook = WriteXLSX.new(xlsx)
3940
+ @xlsx = 'tab_colors.xlsx'
3941
+ workbook = WriteXLSX.new(@xlsx)
2522
3942
 
2523
3943
  worksheet1 = workbook.add_worksheet
2524
3944
  worksheet2 = workbook.add_worksheet
@@ -2531,270 +3951,347 @@ def test_tab_colors
2531
3951
  worksheet4.set_tab_color(0x35) # Orange
2532
3952
 
2533
3953
  workbook.close
2534
- compare_xlsx(@expected_dir, @result_dir, xlsx)
3954
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
2535
3955
  end
2536
3956
 
2537
- def test_autofilter
2538
- xlsx = 'autofilter.xlsx'
2539
- workbook = WriteXLSX.new(xlsx)
2540
-
2541
- worksheet1 = workbook.add_worksheet
2542
- worksheet2 = workbook.add_worksheet
2543
- worksheet3 = workbook.add_worksheet
2544
- worksheet4 = workbook.add_worksheet
2545
- worksheet5 = workbook.add_worksheet
2546
- worksheet6 = workbook.add_worksheet
2547
-
2548
- bold = workbook.add_format( :bold => 1 )
2549
-
2550
- # Extract the data embedded at the end of this file.
2551
- data_array = autofilter_data.split("\n")
2552
- headings = data_array.shift.split
2553
- data = []
2554
- data_array.each { |line| data << line.split }
2555
-
2556
- # Set up several sheets with the same data.
2557
- workbook.worksheets.each do |worksheet|
2558
- worksheet.set_column( 'A:D', 12 )
2559
- worksheet.set_row( 0, 20, bold )
2560
- worksheet.write( 'A1', headings )
2561
- end
2562
-
3957
+ def test_tables
3958
+ @xlsx = 'tables.xlsx'
3959
+ workbook = WriteXLSX.new(@xlsx)
3960
+ worksheet1 = workbook.add_worksheet
3961
+ worksheet2 = workbook.add_worksheet
3962
+ worksheet3 = workbook.add_worksheet
3963
+ worksheet4 = workbook.add_worksheet
3964
+ worksheet5 = workbook.add_worksheet
3965
+ worksheet6 = workbook.add_worksheet
3966
+ worksheet7 = workbook.add_worksheet
3967
+ worksheet8 = workbook.add_worksheet
3968
+ worksheet9 = workbook.add_worksheet
3969
+ worksheet10 = workbook.add_worksheet
3970
+ worksheet11 = workbook.add_worksheet
3971
+ worksheet12 = workbook.add_worksheet
3972
+
3973
+ currency_format = workbook.add_format(:num_format => '$#,##0')
3974
+
3975
+
3976
+ # Some sample data for the table.
3977
+ data = [
3978
+ [ 'Apples', 10000, 5000, 8000, 6000 ],
3979
+ [ 'Pears', 2000, 3000, 4000, 5000 ],
3980
+ [ 'Bananas', 6000, 6000, 6500, 6000 ],
3981
+ [ 'Oranges', 500, 300, 200, 700 ]
3982
+ ]
2563
3983
 
2564
3984
  ###############################################################################
2565
3985
  #
2566
- # Example 1. Autofilter without conditions.
3986
+ # Example 1.
2567
3987
  #
3988
+ caption = 'Default table with no data.'
2568
3989
 
2569
- worksheet1.autofilter( 'A1:D51' )
2570
- worksheet1.write( 'A2', [ data ] )
2571
-
2572
- ###############################################################################
2573
- #
2574
- #
2575
- # Example 2. Autofilter with a filter condition in the first column.
2576
- #
3990
+ # Set the columns widths.
3991
+ worksheet1.set_column('B:G', 12)
2577
3992
 
2578
- # The range in this example is the same as above but in row-column notation.
2579
- worksheet2.autofilter( 0, 0, 50, 3 )
3993
+ # Write the caption.
3994
+ worksheet1.write('B1', caption)
2580
3995
 
2581
- # The placeholder "Region" in the filter is ignored and can be any string
2582
- # that adds clarity to the expression.
2583
- #
2584
- worksheet2.filter_column( 0, 'Region eq East' )
3996
+ # Add a table to the worksheet.
3997
+ worksheet1.add_table('B3:F7')
2585
3998
 
3999
+ ###############################################################################
2586
4000
  #
2587
- # Hide the rows that don't match the filter criteria.
4001
+ # Example 2.
2588
4002
  #
2589
- row = 1
4003
+ caption = 'Default table with data.';
2590
4004
 
2591
- data.each do |row_data|
2592
- region = row_data[0]
4005
+ # Set the columns widths.
4006
+ worksheet2.set_column('B:G', 12)
2593
4007
 
2594
- worksheet2.set_row(row, nil, nil, 1) unless region == 'East'
2595
- worksheet2.write(row, 0, row_data)
2596
- row += 1
2597
- end
4008
+ # Write the caption.
4009
+ worksheet2.write('B1', caption)
4010
+
4011
+ # Add a table to the worksheet.
4012
+ worksheet2.add_table('B3:F7', { :data => data })
2598
4013
 
2599
4014
  ###############################################################################
2600
4015
  #
4016
+ # Example 3.
2601
4017
  #
2602
- # Example 3. Autofilter with a dual filter condition in one of the columns.
2603
- #
2604
-
2605
- worksheet3.autofilter( 'A1:D51' )
4018
+ caption = 'Table without default autofilter.'
2606
4019
 
2607
- worksheet3.filter_column( 'A', 'x eq East or x eq South' )
2608
-
2609
- #
2610
- # Hide the rows that don't match the filter criteria.
2611
- #
2612
- row = 1
4020
+ # Set the columns widths.
4021
+ worksheet3.set_column('B:G', 12)
2613
4022
 
2614
- data.each do |row_data|
2615
- region = row_data[0]
4023
+ # Write the caption.
4024
+ worksheet3.write('B1', caption)
2616
4025
 
2617
- worksheet3.set_row(row, nil, nil, 1) unless region == 'East' || region == 'South'
2618
- worksheet3.write(row, 0,row_data)
2619
- row += 1
2620
- end
4026
+ # Add a table to the worksheet.
4027
+ worksheet3.add_table('B3:F7', { :autofilter => 0 })
2621
4028
 
4029
+ # Table data can also be written separately, as an array or individual cells.
4030
+ worksheet3.write_col('B4', data)
2622
4031
 
2623
4032
  ###############################################################################
2624
4033
  #
4034
+ # Example 4.
2625
4035
  #
2626
- # Example 4. Autofilter with filter conditions in two columns.
2627
- #
2628
-
2629
- worksheet4.autofilter('A1:D51')
2630
-
2631
- worksheet4.filter_column('A', 'x eq East')
2632
- worksheet4.filter_column('C', 'x > 3000 and x < 8000')
2633
-
2634
- #
2635
- # Hide the rows that don't match the filter criteria.
2636
- #
2637
- row = 1
4036
+ caption = 'Table without default header row.'
2638
4037
 
2639
- data.each do |row_data|
2640
- region = row_data[0]
2641
- volume = row_data[2]
4038
+ # Set the columns widths.
4039
+ worksheet4.set_column('B:G', 12)
2642
4040
 
2643
- unless region == 'East' && volume.to_i > 3000 && volume.to_i < 8000
2644
- # Hide row.
2645
- worksheet4.set_row(row, nil, nil, 1)
2646
- end
4041
+ # Write the caption.
4042
+ worksheet4.write('B1', caption)
2647
4043
 
2648
- worksheet4.write(row, 0, row_data)
2649
- row += 1
2650
- end
4044
+ # Add a table to the worksheet.
4045
+ worksheet4.add_table('B4:F7', { :header_row => 0 })
2651
4046
 
4047
+ # Table data can also be written separately, as an array or individual cells.
4048
+ worksheet4.write_col('B4', data)
2652
4049
 
2653
4050
  ###############################################################################
2654
4051
  #
4052
+ # Example 5.
2655
4053
  #
2656
- # Example 5. Autofilter with filter for blanks.
2657
- #
4054
+ caption = 'Default table with "First Column" and "Last Column" options.'
2658
4055
 
2659
- # Create a blank cell in our test data.
2660
- data[5][0] = ''
4056
+ # Set the columns widths.
4057
+ worksheet5.set_column('B:G', 12)
2661
4058
 
2662
- worksheet5.autofilter('A1:D51')
2663
- worksheet5.filter_column('A', 'x eq Blanks')
4059
+ # Write the caption.
4060
+ worksheet5.write('B1', caption)
4061
+
4062
+ # Add a table to the worksheet.
4063
+ worksheet5.add_table('B3:F7', { :first_column => 1, :last_column => 1 })
2664
4064
 
4065
+ # Table data can also be written separately, as an array or individual cells.
4066
+ worksheet5.write_col('B4', data)
4067
+
4068
+ ###############################################################################
2665
4069
  #
2666
- # Hide the rows that don't match the filter criteria.
4070
+ # Example 6.
2667
4071
  #
2668
- row = 1
4072
+ caption = 'Table with banded columns but without default banded rows.';
2669
4073
 
2670
- data.each do |row_data|
2671
- region = row_data[0]
4074
+ # Set the columns widths.
4075
+ worksheet6.set_column('B:G', 12)
2672
4076
 
2673
- worksheet5.set_row(row, nil, nil, 1) unless region == ''
4077
+ # Write the caption.
4078
+ worksheet6.write('B1', caption)
2674
4079
 
2675
- worksheet5.write(row, 0, row_data)
2676
- row += 1
2677
- end
4080
+ # Add a table to the worksheet.
4081
+ worksheet6.add_table('B3:F7', { :banded_rows => 0, :banded_columns => 1 })
2678
4082
 
4083
+ # Table data can also be written separately, as an array or individual cells.
4084
+ worksheet6.write_col('B4', data)
2679
4085
 
2680
4086
  ###############################################################################
2681
4087
  #
4088
+ # Example 7.
2682
4089
  #
2683
- # Example 6. Autofilter with filter for non-blanks.
2684
- #
4090
+ caption = 'Table with user defined column headers';
2685
4091
 
4092
+ # Set the columns widths.
4093
+ worksheet7.set_column('B:G', 12)
2686
4094
 
2687
- worksheet6.autofilter('A1:D51')
2688
- worksheet6.filter_column('A', 'x eq NonBlanks')
4095
+ # Write the caption.
4096
+ worksheet7.write('B1', caption)
2689
4097
 
4098
+ # Add a table to the worksheet.
4099
+ worksheet7.add_table(
4100
+ 'B3:F7',
4101
+ {
4102
+ :data => data,
4103
+ :columns => [
4104
+ { :header => 'Product' },
4105
+ { :header => 'Quarter 1' },
4106
+ { :header => 'Quarter 2' },
4107
+ { :header => 'Quarter 3' },
4108
+ { :header => 'Quarter 4' }
4109
+ ]
4110
+ }
4111
+ )
4112
+
4113
+ ###############################################################################
2690
4114
  #
2691
- # Hide the rows that don't match the filter criteria.
4115
+ # Example 8.
2692
4116
  #
2693
- row = 1
4117
+ caption = 'Table with user defined column headers';
2694
4118
 
2695
- data.each do |row_data|
2696
- region = row_data[0]
2697
-
2698
- worksheet6.set_row(row, nil, nil, 1) unless region != ''
2699
-
2700
- worksheet6.write(row, 0, row_data)
2701
- row += 1
2702
- end
2703
-
2704
- workbook.close
2705
- compare_xlsx(@expected_dir, @result_dir, xlsx)
2706
- end
2707
-
2708
- def test_chart_scatter06
2709
- xlsx = 'chart_scatter06.xlsx'
2710
- workbook = WriteXLSX.new(xlsx)
2711
- worksheet = workbook.add_worksheet
2712
- chart = workbook.add_chart(:type => 'scatter', :embedded => 1)
2713
-
2714
- # For testing, copy the randomly generated axis ids in the target xlsx file.
2715
- chart.instance_variable_set(:@axis_ids, [57708544, 44297600])
4119
+ # Set the columns widths.
4120
+ worksheet8.set_column('B:G', 12)
2716
4121
 
2717
- data = [
2718
- [ 1, 2, 3, 4, 5 ],
2719
- [ 2, 4, 6, 8, 10 ],
2720
- [ 3, 6, 9, 12, 15 ],
4122
+ # Write the caption.
4123
+ worksheet8.write('B1', caption)
2721
4124
 
2722
- ]
4125
+ # Add a table to the worksheet.
4126
+ worksheet8.add_table(
4127
+ 'B3:G7',
4128
+ {
4129
+ :data => data,
4130
+ :columns => [
4131
+ { :header => 'Product' },
4132
+ { :header => 'Quarter 1' },
4133
+ { :header => 'Quarter 2' },
4134
+ { :header => 'Quarter 3' },
4135
+ { :header => 'Quarter 4' },
4136
+ {
4137
+ :header => 'Year',
4138
+ :formula => '=SUM(Table8[@[Quarter 1]:[Quarter 4]])'
4139
+ }
4140
+ ]
4141
+ }
4142
+ )
2723
4143
 
2724
- worksheet.write('A1', data)
2725
4144
 
2726
- chart.add_series(
2727
- :categories => '=Sheet1!$A$1:$A$5',
2728
- :values => '=Sheet1!$B$1:$B$5',
2729
- )
4145
+ ###############################################################################
4146
+ #
4147
+ # Example 9.
4148
+ #
4149
+ caption = 'Table with totals row (but no caption or totals).';
4150
+
4151
+ # Set the columns widths.
4152
+ worksheet9.set_column('B:G', 12)
4153
+
4154
+ # Write the caption.
4155
+ worksheet9.write('B1', caption)
4156
+
4157
+ # Add a table to the worksheet.
4158
+ worksheet9.add_table(
4159
+ 'B3:G8',
4160
+ {
4161
+ :data => data,
4162
+ :total_row => 1,
4163
+ :columns => [
4164
+ { :header => 'Product' },
4165
+ { :header => 'Quarter 1' },
4166
+ { :header => 'Quarter 2' },
4167
+ { :header => 'Quarter 3' },
4168
+ { :header => 'Quarter 4' },
4169
+ {
4170
+ :header => 'Year',
4171
+ :formula => '=SUM(Table8[@[Quarter 1]:[Quarter 4]])'
4172
+ }
4173
+ ]
4174
+ }
4175
+ )
2730
4176
 
2731
- chart.add_series(
2732
- :categories => '=Sheet1!$A$1:$A$5',
2733
- :values => '=Sheet1!$C$1:$C$5',
2734
- )
4177
+ ###############################################################################
4178
+ #
4179
+ # Example 10.
4180
+ #
4181
+ caption = 'Table with totals row with user captions and functions.';
4182
+
4183
+ # Set the columns widths.
4184
+ worksheet10.set_column('B:G', 12)
4185
+
4186
+ # Write the caption.
4187
+ worksheet10.write('B1', caption)
4188
+
4189
+ # Add a table to the worksheet.
4190
+ worksheet10.add_table(
4191
+ 'B3:G8',
4192
+ {
4193
+ :data => data,
4194
+ :total_row => 1,
4195
+ :columns => [
4196
+ { :header => 'Product', :total_string => 'Totals' },
4197
+ { :header => 'Quarter 1', :total_function => 'sum' },
4198
+ { :header => 'Quarter 2', :total_function => 'sum' },
4199
+ { :header => 'Quarter 3', :total_function => 'sum' },
4200
+ { :header => 'Quarter 4', :total_function => 'sum' },
4201
+ {
4202
+ :header => 'Year',
4203
+ :formula => '=SUM(Table8[@[Quarter 1]:[Quarter 4]])',
4204
+ :total_function => 'sum'
4205
+ }
4206
+ ]
4207
+ }
4208
+ )
2735
4209
 
2736
- chart.set_x_axis(:minor_unit => 1, :major_unit => 3)
2737
- chart.set_y_axis(:minor_unit => 2, :major_unit => 4)
4210
+ ###############################################################################
4211
+ #
4212
+ # Example 11.
4213
+ #
4214
+ caption = 'Table with alternative Excel style.';
4215
+
4216
+ # Set the columns widths.
4217
+ worksheet11.set_column('B:G', 12)
4218
+
4219
+ # Write the caption.
4220
+ worksheet11.write('B1', caption)
4221
+
4222
+ # Add a table to the worksheet.
4223
+ worksheet11.add_table(
4224
+ 'B3:G8',
4225
+ {
4226
+ :data => data,
4227
+ :style => 'Table Style Light 11',
4228
+ :total_row => 1,
4229
+ :columns => [
4230
+ { :header => 'Product', :total_string => 'Totals' },
4231
+ { :header => 'Quarter 1', :total_function => 'sum' },
4232
+ { :header => 'Quarter 2', :total_function => 'sum' },
4233
+ { :header => 'Quarter 3', :total_function => 'sum' },
4234
+ { :header => 'Quarter 4', :total_function => 'sum' },
4235
+ {
4236
+ :header => 'Year',
4237
+ :formula => '=SUM(Table8[@[Quarter 1]:[Quarter 4]])',
4238
+ :total_function => 'sum'
4239
+ }
4240
+ ]
4241
+ }
4242
+ )
2738
4243
 
2739
- worksheet.insert_chart('E9', chart)
4244
+ ###############################################################################
4245
+ #
4246
+ # Example 12.
4247
+ #
4248
+ caption = 'Table with column formats.';
4249
+
4250
+ # Set the columns widths.
4251
+ worksheet12.set_column('B:G', 12)
4252
+
4253
+ # Write the caption.
4254
+ worksheet12.write('B1', caption)
4255
+
4256
+ # Add a table to the worksheet.
4257
+ worksheet12.add_table(
4258
+ 'B3:G8',
4259
+ {
4260
+ :data => data,
4261
+ :total_row => 1,
4262
+ :columns => [
4263
+ { :header => 'Product', :total_string => 'Totals' },
4264
+ {
4265
+ :header => 'Quarter 1',
4266
+ :total_function => 'sum',
4267
+ :format => currency_format,
4268
+ },
4269
+ {
4270
+ :header => 'Quarter 2',
4271
+ :total_function => 'sum',
4272
+ :format => currency_format,
4273
+ },
4274
+ {
4275
+ :header => 'Quarter 3',
4276
+ :total_function => 'sum',
4277
+ :format => currency_format,
4278
+ },
4279
+ {
4280
+ :header => 'Quarter 4',
4281
+ :total_function => 'sum',
4282
+ :format => currency_format,
4283
+ },
4284
+ {
4285
+ :header => 'Year',
4286
+ :formula => '=SUM(Table8[@[Quarter 1]:[Quarter 4]])',
4287
+ :total_function => 'sum',
4288
+ :format => currency_format,
4289
+ }
4290
+ ]
4291
+ }
4292
+ )
2740
4293
 
2741
4294
  workbook.close
2742
- compare_xlsx(@expected_dir, @result_dir, xlsx)
2743
- end
2744
-
2745
- def autofilter_data
2746
- <<EOS
2747
- Region Item Volume Month
2748
- East Apple 9000 July
2749
- East Apple 5000 July
2750
- South Orange 9000 September
2751
- North Apple 2000 November
2752
- West Apple 9000 November
2753
- South Pear 7000 October
2754
- North Pear 9000 August
2755
- West Orange 1000 December
2756
- West Grape 1000 November
2757
- South Pear 10000 April
2758
- West Grape 6000 January
2759
- South Orange 3000 May
2760
- North Apple 3000 December
2761
- South Apple 7000 February
2762
- West Grape 1000 December
2763
- East Grape 8000 February
2764
- South Grape 10000 June
2765
- West Pear 7000 December
2766
- South Apple 2000 October
2767
- East Grape 7000 December
2768
- North Grape 6000 April
2769
- East Pear 8000 February
2770
- North Apple 7000 August
2771
- North Orange 7000 July
2772
- North Apple 6000 June
2773
- South Grape 8000 September
2774
- West Apple 3000 October
2775
- South Orange 10000 November
2776
- West Grape 4000 July
2777
- North Orange 5000 August
2778
- East Orange 1000 November
2779
- East Orange 4000 October
2780
- North Grape 5000 August
2781
- East Apple 1000 December
2782
- South Apple 10000 March
2783
- East Grape 7000 October
2784
- West Grape 1000 September
2785
- East Grape 10000 October
2786
- South Orange 8000 March
2787
- North Apple 4000 July
2788
- South Orange 5000 July
2789
- West Apple 4000 June
2790
- East Apple 5000 April
2791
- North Pear 3000 August
2792
- East Grape 9000 November
2793
- North Orange 8000 October
2794
- East Apple 10000 June
2795
- South Pear 1000 December
2796
- North Grape 10000 July
2797
- East Grape 6000 February
2798
- EOS
4295
+ compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
2799
4296
  end
2800
4297
  end