write_xlsx 0.0.4 → 0.51.0

Sign up to get free protection for your applications and to get access to all the features.
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