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
@@ -15,14 +15,16 @@ module Writexlsx
15
15
  class Chartsheet < Worksheet
16
16
  include Writexlsx::Utility
17
17
 
18
+ attr_writer :chart
19
+
18
20
  def initialize(workbook, index, name)
19
21
  super
20
- @drawing = 1
22
+ @drawing = Drawing.new
21
23
  @is_chartsheet = true
22
24
  @chart = nil
23
25
  @charts = [1]
24
26
  @zoom_scale_normal = 0
25
- @oriantation = 0
27
+ @print_style.orientation = false
26
28
  end
27
29
 
28
30
  #
@@ -30,7 +32,7 @@ def initialize(workbook, index, name)
30
32
  #
31
33
  def assemble_xml_file # :nodoc:
32
34
  return unless @writer
33
- write_xml_declaration
35
+ @writer.xml_decl
34
36
 
35
37
  # Write the root chartsheet element.
36
38
  write_chartsheet
@@ -64,7 +66,7 @@ def assemble_xml_file # :nodoc:
64
66
 
65
67
  # Close the XML writer object and filehandle.
66
68
  @writer.crlf
67
- @writer.getOutput->close
69
+ @writer.close
68
70
  end
69
71
 
70
72
  def protect(password = '', options = {})
@@ -96,6 +98,14 @@ def set_y_axis(*args)
96
98
  @chart.set_y_axis(*args)
97
99
  end
98
100
 
101
+ def set_x2_axis(*args)
102
+ @chart.set_x2_axis(*args)
103
+ end
104
+
105
+ def set_y2_axis(*args)
106
+ @chart.set_y2_axis(*args)
107
+ end
108
+
99
109
  def set_title(*args)
100
110
  @chart.set_title(*args)
101
111
  end
@@ -116,7 +126,13 @@ def set_style(*args)
116
126
  @chart.set_style(*args)
117
127
  end
118
128
 
119
- private
129
+ def show_blanks_as(*args)
130
+ @chart.show_blanks_as(*args)
131
+ end
132
+
133
+ def show_hidden_data(*args)
134
+ @chart.show_hidden_data(*args)
135
+ end
120
136
 
121
137
  #
122
138
  # Set up chart/drawings.
@@ -124,13 +140,15 @@ def set_style(*args)
124
140
  def prepare_chart(index, chart_id, drawing_id) # :nodoc:
125
141
  drawing = Drawing.new
126
142
  @drawing = drawing
127
- @drawing.orientation = @orientation
143
+ @drawing.orientation = @print_style.orientation
128
144
 
129
- @external_drawing_links << [ '/drawing', '../drawings/drawing' << drawing_id << '.xml' ]
145
+ @external_drawing_links << [ '/drawing', "../drawings/drawing#{drawing_id}.xml" ]
130
146
 
131
- @drawing_links << [ '/chart', '../charts/chart' << chart_id << '.xml' ]
147
+ @drawing_links << [ '/chart', "../charts/chart#{chart_id}.xml"]
132
148
  end
133
149
 
150
+ private
151
+
134
152
  #
135
153
  # Write the <chartsheet> element. This is the root element of Chartsheet.
136
154
  #
@@ -154,13 +172,13 @@ def write_chartsheet # :nodoc:
154
172
  #
155
173
  # Write the <sheetPr> element for Sheet level properties.
156
174
  #
157
- def _write_sheet_pr # :nodoc:
175
+ def write_sheet_pr # :nodoc:
158
176
 
159
177
  attributes = []
160
178
 
161
- attributes << {'filterMode' => 1} if @filter_on
179
+ attributes << {'filterMode' => 1} if ptrue?(@filter_on)
162
180
 
163
- if @fit_page || @tab_color
181
+ if ptrue?(@fit_page) || ptrue?(@tab_color)
164
182
  @writer.tag_elements('sheetPr', attributes) do
165
183
  write_tab_color
166
184
  write_page_set_up_pr
@@ -1,9 +1,12 @@
1
1
  # -*- coding: utf-8 -*-
2
- require 'write_xlsx/package/xml_writer_simple.rb'
2
+ require 'write_xlsx/package/xml_writer_simple'
3
+ require 'write_xlsx/utility'
3
4
 
4
5
  module Writexlsx
5
6
  class Drawing
6
- attr_writer :embedded
7
+ include Writexlsx::Utility
8
+
9
+ attr_writer :embedded, :orientation
7
10
 
8
11
  def initialize
9
12
  @writer = Package::XMLWriterSimple.new
@@ -30,13 +33,13 @@ def assemble_xml_file
30
33
  write_drawing_workspace
31
34
 
32
35
  if @embedded
33
- index = 0
34
- @drawings.each do |dimensions|
35
- # Write the xdr:twoCellAnchor element.
36
- index += 1
36
+ index = 0
37
+ @drawings.each do |dimensions|
38
+ # Write the xdr:twoCellAnchor element.
39
+ index += 1
37
40
 
38
- write_two_cell_anchor(index, *(dimensions.flatten))
39
- end
41
+ write_two_cell_anchor(index, *(dimensions.flatten))
42
+ end
40
43
  else
41
44
  index = 0
42
45
 
@@ -51,10 +54,10 @@ def assemble_xml_file
51
54
  end
52
55
 
53
56
  #
54
- # Add a chart or image sub object to the drawing.
57
+ # Add a chart, image or shape sub object to the drawing.
55
58
  #
56
59
  def add_drawing_object(*args)
57
- @drawings << args
60
+ @drawings << args.flatten
58
61
  end
59
62
 
60
63
  private
@@ -64,12 +67,9 @@ def add_drawing_object(*args)
64
67
  #
65
68
  def write_drawing_workspace
66
69
  schema = 'http://schemas.openxmlformats.org/drawingml/'
67
- xmlns_xdr = "#{schema}2006/spreadsheetDrawing"
68
- xmlns_a = "#{schema}2006/main"
69
-
70
70
  attributes = [
71
- 'xmlns:xdr', xmlns_xdr,
72
- 'xmlns:a', xmlns_a
71
+ 'xmlns:xdr', "#{schema}2006/spreadsheetDrawing",
72
+ 'xmlns:a', "#{schema}2006/main"
73
73
  ]
74
74
 
75
75
  @writer.start_tag('xdr:wsDr', attributes)
@@ -81,13 +81,16 @@ def write_drawing_workspace
81
81
  def write_two_cell_anchor(*args)
82
82
  index, type, col_from, row_from, col_from_offset, row_from_offset,
83
83
  col_to, row_to, col_to_offset, row_to_offset, col_absolute, row_absolute,
84
- width, height, description = args
84
+ width, height, description, shape = args
85
85
 
86
86
  attributes = []
87
87
 
88
88
  # Add attribute for images.
89
89
  attributes << :editAs << 'oneCell' if type == 2
90
90
 
91
+ # Add attribute for shapes.
92
+ attributes << :editAs << shape[:edit_as] if shape && !shape[:edit_as].nil?
93
+
91
94
  @writer.tag_elements('xdr:twoCellAnchor', attributes) do
92
95
  # Write the xdr:from element.
93
96
  write_from(col_from, row_from, col_from_offset, row_from_offset)
@@ -95,11 +98,16 @@ def write_two_cell_anchor(*args)
95
98
  write_to(col_to, row_to, col_to_offset, row_to_offset)
96
99
 
97
100
  if type == 1
101
+ # Graphic frame.
102
+
98
103
  # Write the xdr:graphicFrame element for charts.
99
- write_graphic_frame(index)
100
- else
104
+ write_graphic_frame(index, description)
105
+ elsif type == 2
101
106
  # Write the xdr:pic element.
102
107
  write_pic(index, col_absolute, row_absolute, width, height, description)
108
+ else
109
+ # Write the xdr:sp element for shapes.
110
+ write_sp(index, col_absolute, row_absolute, width, height, shape)
103
111
  end
104
112
 
105
113
  # Write the xdr:clientData element.
@@ -108,6 +116,37 @@ def write_two_cell_anchor(*args)
108
116
  end
109
117
 
110
118
  #
119
+ # Write the <xdr:absoluteAnchor> element.
120
+ #
121
+ def write_absolute_anchor(index)
122
+ @writer.start_tag('xdr:absoluteAnchor')
123
+
124
+ # Different co-ordinates for horizonatal (= 0) and vertical (= 1).
125
+ if !ptrue?(@orientation)
126
+
127
+ # Write the xdr:pos element.
128
+ write_pos(0, 0)
129
+
130
+ # Write the xdr:ext element.
131
+ write_ext(9308969, 6078325)
132
+ else
133
+ # Write the xdr:pos element.
134
+ write_pos(0, -47625)
135
+
136
+ # Write the xdr:ext element.
137
+ write_ext(6162675, 6124575)
138
+ end
139
+
140
+ # Write the xdr:graphicFrame element.
141
+ write_graphic_frame(index)
142
+
143
+ # Write the xdr:clientData element.
144
+ write_client_data
145
+
146
+ @writer.end_tag('xdr:absoluteAnchor')
147
+ end
148
+
149
+ #
111
150
  # Write the <xdr:from> element.
112
151
  #
113
152
  def write_from(col, row, col_offset, row_offset)
@@ -169,17 +208,41 @@ def write_row_off(data)
169
208
  @writer.data_element('xdr:rowOff', data)
170
209
  end
171
210
 
211
+ #
212
+ # Write the <xdr:pos> element.
213
+ #
214
+ def write_pos(x, y)
215
+ attributes = [
216
+ 'x', x,
217
+ 'y', y
218
+ ]
219
+
220
+ @writer.empty_tag('xdr:pos', attributes)
221
+ end
222
+
223
+ #
224
+ # Write the <xdr:ext> element.
225
+ #
226
+ def write_ext(cx, cy)
227
+ attributes = [
228
+ 'cx', cx,
229
+ 'cy', cy
230
+ ]
231
+
232
+ @writer.empty_tag('xdr:ext', attributes)
233
+ end
234
+
172
235
  #
173
236
  # Write the <xdr:graphicFrame> element.
174
237
  #
175
- def write_graphic_frame(index)
238
+ def write_graphic_frame(index, name = nil)
176
239
  macro = ''
177
240
 
178
241
  attributes = ['macro', macro]
179
242
 
180
243
  @writer.tag_elements('xdr:graphicFrame', attributes) do
181
244
  # Write the xdr:nvGraphicFramePr element.
182
- write_nv_graphic_frame_pr(index)
245
+ write_nv_graphic_frame_pr(index, name)
183
246
  # Write the xdr:xfrm element.
184
247
  write_xfrm
185
248
  # Write the a:graphic element.
@@ -190,10 +253,12 @@ def write_graphic_frame(index)
190
253
  #
191
254
  # Write the <xdr:nvGraphicFramePr> element.
192
255
  #
193
- def write_nv_graphic_frame_pr(index)
256
+ def write_nv_graphic_frame_pr(index, name = nil)
257
+ name = "Chart #{index}" if name.nil? || name.empty?
258
+
194
259
  @writer.tag_elements('xdr:nvGraphicFramePr') do
195
260
  # Write the xdr:cNvPr element.
196
- write_c_nv_pr( index + 1, "Chart #{index}" )
261
+ write_c_nv_pr( index + 1, name)
197
262
  # Write the xdr:cNvGraphicFramePr element.
198
263
  write_c_nv_graphic_frame_pr
199
264
  end
@@ -331,6 +396,83 @@ def write_client_data
331
396
  @writer.empty_tag('xdr:clientData')
332
397
  end
333
398
 
399
+ #
400
+ # Write the <xdr:sp> element.
401
+ #
402
+ def write_sp(index, col_absolute, row_absolute, width, height, shape)
403
+ if shape[:connect] != 0
404
+ attributes = [:macro, '']
405
+ @writer.tag_elements('xdr:cxnSp', attributes) do
406
+
407
+ # Write the xdr:nvCxnSpPr element.
408
+ write_nv_cxn_sp_pr(index, shape)
409
+
410
+ # Write the xdr:spPr element.
411
+ write_xdr_sp_pr(index, col_absolute, row_absolute, width, height, shape)
412
+ end
413
+ else
414
+ # Add attribute for shapes.
415
+ attributes = [:macro, '', :textlink, '']
416
+ @writer.tag_elements('xdr:sp', attributes) do
417
+
418
+ # Write the xdr:nvSpPr element.
419
+ write_nv_sp_pr(index, shape)
420
+
421
+ # Write the xdr:spPr element.
422
+ write_xdr_sp_pr(index, col_absolute, row_absolute, width, height, shape)
423
+
424
+ # Write the xdr:txBody element.
425
+ if shape[:text] != 0
426
+ write_txBody(col_absolute, row_absolute, width, height, shape)
427
+ end
428
+ end
429
+ end
430
+ end
431
+
432
+ #
433
+ # Write the <xdr:nvCxnSpPr> element.
434
+ #
435
+ def write_nv_cxn_sp_pr(index, shape)
436
+ @writer.tag_elements('xdr:nvCxnSpPr') do
437
+
438
+ shape[:name] = [shape[:type], index].join(' ') unless shape[:name]
439
+ write_c_nv_pr(shape[:id], shape[:name])
440
+
441
+ @writer.tag_elements('xdr:cNvCxnSpPr') do
442
+
443
+ attributes = [:noChangeShapeType, '1']
444
+ @writer.empty_tag('a:cxnSpLocks', attributes)
445
+
446
+ if shape[:start]
447
+ attributes = ['id', shape[:start], 'idx', shape[:start_index]]
448
+ @writer.empty_tag('a:stCxn', attributes)
449
+ end
450
+
451
+ if shape[:end]
452
+ attributes = ['id', shape[:end], 'idx', shape[:end_index]]
453
+ @writer.empty_tag('a:endCxn', attributes)
454
+ end
455
+ end
456
+ end
457
+ end
458
+
459
+ #
460
+ # Write the <xdr:NvSpPr> element.
461
+ #
462
+ def write_nv_sp_pr(index, shape)
463
+ attributes = []
464
+
465
+ @writer.tag_elements('xdr:nvSpPr') do
466
+ shape_name = "#{shape[:type]} #{index}"
467
+ write_c_nv_pr(shape[:id], shape_name)
468
+ attributes = ['txBox', 1] if shape[:tx_box] != 0
469
+ @writer.tag_elements('xdr:cNvSpPr', attributes) do
470
+ attributes = [:noChangeArrowheads, '1']
471
+ @writer.empty_tag('a:spLocks', attributes)
472
+ end
473
+ end
474
+ end
475
+
334
476
  #
335
477
  # Write the <xdr:pic> element.
336
478
  #
@@ -340,8 +482,13 @@ def write_pic(index, col_absolute, row_absolute, width, height, description)
340
482
  write_nv_pic_pr(index, description)
341
483
  # Write the xdr:blipFill element.
342
484
  write_blip_fill(index)
485
+
486
+ # Pictures are rectangle shapes by default.
487
+ shape = Shape.new
488
+ shape[:type] = 'rect'
489
+
343
490
  # Write the xdr:spPr element.
344
- write_sp_pr(col_absolute, row_absolute, width, height)
491
+ write_sp_pr(col_absolute, row_absolute, width, height, shape)
345
492
  end
346
493
  end
347
494
 
@@ -424,22 +571,57 @@ def write_a_fill_rect
424
571
  end
425
572
 
426
573
  #
427
- # Write the <xdr:spPr> element.
574
+ # Write the <xdr:spPr> element, for charts.
428
575
  #
429
- def write_sp_pr(col_absolute, row_absolute, width, height)
576
+ def write_sp_pr(col_absolute, row_absolute, width, height, shape = {})
430
577
  @writer.tag_elements('xdr:spPr') do
431
578
  # Write the a:xfrm element.
432
579
  write_a_xfrm(col_absolute, row_absolute, width, height)
433
580
  # Write the a:prstGeom element.
434
- write_a_prst_geom
581
+ write_a_prst_geom(shape)
582
+ end
583
+ end
584
+
585
+ #
586
+ # Write the <xdr:spPr> element for shapes.
587
+ #
588
+ def write_xdr_sp_pr(index, col_absolute, row_absolute, width, height, shape)
589
+ attributes = ['bwMode', 'auto']
590
+
591
+ @writer.tag_elements('xdr:spPr', attributes) do
592
+
593
+ # Write the a:xfrm element.
594
+ write_a_xfrm(col_absolute, row_absolute, width, height, shape)
595
+
596
+ # Write the a:prstGeom element.
597
+ write_a_prst_geom(shape)
598
+
599
+ if shape[:fill].to_s.bytesize > 1
600
+ # Write the a:solidFill element.
601
+ write_a_solid_fill(shape[:fill])
602
+ else
603
+ @writer.empty_tag('a:noFill')
604
+ end
605
+
606
+ # Write the a:ln element.
607
+ write_a_ln(shape)
435
608
  end
436
609
  end
437
610
 
438
611
  #
439
612
  # Write the <a:xfrm> element.
440
613
  #
441
- def write_a_xfrm(col_absolute, row_absolute, width, height)
442
- @writer.tag_elements('a:xfrm') do
614
+ def write_a_xfrm(col_absolute, row_absolute, width, height, shape = {})
615
+ attributes = []
616
+
617
+ rotation = shape[:rotation] || 0
618
+ rotation *= 60000
619
+
620
+ attributes << 'rot' << rotation if rotation != 0
621
+ attributes << 'flipH' << 1 if ptrue?(shape[:flip_h])
622
+ attributes << 'flipV' << 1 if ptrue?(shape[:flip_v])
623
+
624
+ @writer.tag_elements('a:xfrm', attributes) do
443
625
  # Write the a:off element.
444
626
  write_a_off( col_absolute, row_absolute )
445
627
  # Write the a:ext element.
@@ -475,22 +657,159 @@ def write_a_ext(cx, cy)
475
657
  #
476
658
  # Write the <a:prstGeom> element.
477
659
  #
478
- def write_a_prst_geom
479
- prst = 'rect'
480
-
481
- attributes = ['prst', prst]
660
+ def write_a_prst_geom(shape = {})
661
+ attributes = []
662
+ attributes << 'prst' << shape[:type] if shape[:type]
482
663
 
483
664
  @writer.tag_elements('a:prstGeom', attributes) do
484
665
  # Write the a:avLst element.
485
- write_a_av_lst
666
+ write_a_av_lst(shape)
486
667
  end
487
668
  end
488
669
 
489
670
  #
490
671
  # Write the <a:avLst> element.
491
672
  #
492
- def write_a_av_lst
493
- @writer.empty_tag('a:avLst')
673
+ def write_a_av_lst(shape = {})
674
+ if shape[:adjustments].respond_to?(:empty?)
675
+ adjustments = shape[:adjustments]
676
+ elsif shape[:adjustments].respond_to?(:coerce)
677
+ adjustments = [shape[:adjustments]]
678
+ elsif !shape[:adjustments]
679
+ adjustments = []
680
+ end
681
+
682
+ if adjustments.respond_to?(:empty?) && !adjustments.empty?
683
+ @writer.tag_elements('a:avLst') do
684
+ i = 0
685
+ adjustments.each do |adj|
686
+ i += 1
687
+ # Only connectors have multiple adjustments.
688
+ suffix = shape[:connect] != 0 ? i : ''
689
+
690
+ # Scale Adjustments: 100,000 = 100%.
691
+ adj_int = (adj * 1000).to_i
692
+
693
+ attributes = [:name, "adj#{suffix}", :fmla, "val #{adj_int}"]
694
+ @writer.empty_tag('a:gd', attributes)
695
+ end
696
+ end
697
+ else
698
+ @writer.empty_tag('a:avLst')
699
+ end
700
+ end
701
+
702
+ #
703
+ # Write the <a:solidFill> element.
704
+ #
705
+ def write_a_solid_fill(rgb = '000000')
706
+ attributes = ['val', rgb]
707
+
708
+ @writer.tag_elements('a:solidFill') do
709
+ @writer.empty_tag('a:srgbClr', attributes)
710
+ end
711
+ end
712
+
713
+ #
714
+ # Write the <a:ln> elements.
715
+ #
716
+ def write_a_ln(shape = {})
717
+ weight = shape[:line_weight] || 0
718
+ attributes = ['w', weight * 9525]
719
+ @writer.tag_elements('a:ln', attributes) do
720
+ line = shape[:line] || 0
721
+ if line.to_s.bytesize > 1
722
+ # Write the a:solidFill element.
723
+ write_a_solid_fill(line)
724
+ else
725
+ @writer.empty_tag('a:noFill')
726
+ end
727
+
728
+ if shape[:line_type] != ''
729
+ attributes = ['val', shape[:line_type]]
730
+ @writer.empty_tag('a:prstDash', attributes)
731
+ end
732
+
733
+ if shape[:connect] != 0
734
+ @writer.empty_tag('a:round')
735
+ else
736
+ attributes = ['lim', 800000]
737
+ @writer.empty_tag('a:miter', attributes)
738
+ end
739
+
740
+ @writer.empty_tag('a:headEnd')
741
+ @writer.empty_tag('a:tailEnd')
742
+ end
743
+ end
744
+
745
+ #
746
+ # Write the <xdr:txBody> element.
747
+ #
748
+ def write_txBody(col_absolute, row_absolute, width, height, shape)
749
+ attributes = [
750
+ :vertOverflow, "clip",
751
+ :wrap, "square",
752
+ :lIns, "27432",
753
+ :tIns, "22860",
754
+ :rIns, "27432",
755
+ :bIns, "22860",
756
+ :anchor, shape[:valign],
757
+ :upright, "1"
758
+ ]
759
+ @writer.tag_elements('xdr:txBody') do
760
+ @writer.empty_tag('a:bodyPr', attributes)
761
+ @writer.empty_tag('a:lstStyle')
762
+
763
+ @writer.tag_elements('a:p') do
764
+ rotation = shape[:format][:rotation] || 0
765
+ rotation *= 60000
766
+
767
+ attributes = [:algn, shape[:align], :rtl, rotation]
768
+ @writer.tag_elements('a:pPr', attributes) do
769
+ attributes = [:sz, "1000"]
770
+ @writer.empty_tag('a:defRPr', attributes)
771
+ end
772
+
773
+ @writer.tag_elements('a:r') do
774
+ size = shape[:format][:size] || 8
775
+ size *= 100
776
+
777
+ bold = shape[:format][:bold] || 0
778
+ italic = shape[:format][:italic] || 0
779
+ underline = ptrue?(shape[:format][:underline]) ? 'sng' : 'none'
780
+ strike = ptrue?(shape[:format][:font_strikeout]) ? 'Strike' : 'noStrike'
781
+
782
+ attributes = [
783
+ :lang, "en-US",
784
+ :sz, size,
785
+ :b, bold,
786
+ :i, italic,
787
+ :u, underline,
788
+ :strike, strike,
789
+ :baseline, 0
790
+ ]
791
+ @writer.tag_elements('a:rPr', attributes) do
792
+ color = shape[:format][:color]
793
+ if color
794
+ color = shape.get_palette_color(color)
795
+ color = color.sub(/^FF/, '') # Remove leading FF from rgb for shape color.
796
+ else
797
+ color = '000000'
798
+ end
799
+
800
+ write_a_solid_fill(color)
801
+
802
+ font = shape[:format][:font] || 'Calibri'
803
+ attributes = [:typeface, font]
804
+ @writer.empty_tag('a:latin', attributes)
805
+ @writer.empty_tag('a:cs', attributes)
806
+ end
807
+ @writer.tag_elements('a:t') do
808
+ @writer.characters(shape[:text])
809
+ end
810
+ end
811
+ end
812
+ end
494
813
  end
495
814
  end
496
815
  end