axlsx-alt 3.0.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 (330) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +9 -0
  3. data/.yardopts_guide +19 -0
  4. data/CHANGELOG.md +244 -0
  5. data/LICENSE +22 -0
  6. data/README.md +180 -0
  7. data/Rakefile +29 -0
  8. data/examples/2010_comments.rb +17 -0
  9. data/examples/anchor_swapping.rb +28 -0
  10. data/examples/auto_filter.rb +25 -0
  11. data/examples/basic_charts.rb +58 -0
  12. data/examples/chart_colors.rb +88 -0
  13. data/examples/colored_links.rb +59 -0
  14. data/examples/conditional_formatting/example_conditional_formatting.rb +89 -0
  15. data/examples/conditional_formatting/getting_barred.rb +37 -0
  16. data/examples/conditional_formatting/hitting_the_high_notes.rb +37 -0
  17. data/examples/conditional_formatting/scaled_colors.rb +39 -0
  18. data/examples/conditional_formatting/stop_and_go.rb +37 -0
  19. data/examples/data_validation.rb +67 -0
  20. data/examples/example.rb +885 -0
  21. data/examples/extractive.rb +45 -0
  22. data/examples/image1.jpeg +0 -0
  23. data/examples/ios_preview.rb +14 -0
  24. data/examples/merge_cells.rb +17 -0
  25. data/examples/no_grid_with_borders.rb +18 -0
  26. data/examples/page_setup.rb +11 -0
  27. data/examples/pivot_table.rb +39 -0
  28. data/examples/pivot_test.rb +63 -0
  29. data/examples/sheet_protection.rb +10 -0
  30. data/examples/skydrive/real_example.rb +63 -0
  31. data/examples/split.rb +16 -0
  32. data/examples/styles.rb +66 -0
  33. data/examples/underline.rb +13 -0
  34. data/examples/wrap_text.rb +21 -0
  35. data/lib/axlsx.rb +171 -0
  36. data/lib/axlsx/content_type/abstract_content_type.rb +32 -0
  37. data/lib/axlsx/content_type/content_type.rb +26 -0
  38. data/lib/axlsx/content_type/default.rb +25 -0
  39. data/lib/axlsx/content_type/override.rb +25 -0
  40. data/lib/axlsx/doc_props/app.rb +235 -0
  41. data/lib/axlsx/doc_props/core.rb +39 -0
  42. data/lib/axlsx/drawing/area_chart.rb +99 -0
  43. data/lib/axlsx/drawing/area_series.rb +110 -0
  44. data/lib/axlsx/drawing/ax_data_source.rb +26 -0
  45. data/lib/axlsx/drawing/axes.rb +61 -0
  46. data/lib/axlsx/drawing/axis.rb +190 -0
  47. data/lib/axlsx/drawing/bar_3D_chart.rb +151 -0
  48. data/lib/axlsx/drawing/bar_chart.rb +143 -0
  49. data/lib/axlsx/drawing/bar_series.rb +82 -0
  50. data/lib/axlsx/drawing/bubble_chart.rb +59 -0
  51. data/lib/axlsx/drawing/bubble_series.rb +63 -0
  52. data/lib/axlsx/drawing/cat_axis.rb +85 -0
  53. data/lib/axlsx/drawing/chart.rb +276 -0
  54. data/lib/axlsx/drawing/d_lbls.rb +90 -0
  55. data/lib/axlsx/drawing/drawing.rb +167 -0
  56. data/lib/axlsx/drawing/graphic_frame.rb +54 -0
  57. data/lib/axlsx/drawing/hyperlink.rb +100 -0
  58. data/lib/axlsx/drawing/line_3D_chart.rb +68 -0
  59. data/lib/axlsx/drawing/line_chart.rb +99 -0
  60. data/lib/axlsx/drawing/line_series.rb +110 -0
  61. data/lib/axlsx/drawing/marker.rb +84 -0
  62. data/lib/axlsx/drawing/num_data.rb +52 -0
  63. data/lib/axlsx/drawing/num_data_source.rb +62 -0
  64. data/lib/axlsx/drawing/num_val.rb +34 -0
  65. data/lib/axlsx/drawing/one_cell_anchor.rb +99 -0
  66. data/lib/axlsx/drawing/pic.rb +211 -0
  67. data/lib/axlsx/drawing/picture_locking.rb +42 -0
  68. data/lib/axlsx/drawing/pie_3D_chart.rb +47 -0
  69. data/lib/axlsx/drawing/pie_series.rb +74 -0
  70. data/lib/axlsx/drawing/scaling.rb +60 -0
  71. data/lib/axlsx/drawing/scatter_chart.rb +74 -0
  72. data/lib/axlsx/drawing/scatter_series.rb +98 -0
  73. data/lib/axlsx/drawing/ser_axis.rb +45 -0
  74. data/lib/axlsx/drawing/series.rb +69 -0
  75. data/lib/axlsx/drawing/series_title.rb +23 -0
  76. data/lib/axlsx/drawing/str_data.rb +42 -0
  77. data/lib/axlsx/drawing/str_val.rb +34 -0
  78. data/lib/axlsx/drawing/title.rb +96 -0
  79. data/lib/axlsx/drawing/two_cell_anchor.rb +97 -0
  80. data/lib/axlsx/drawing/val_axis.rb +37 -0
  81. data/lib/axlsx/drawing/view_3D.rb +115 -0
  82. data/lib/axlsx/drawing/vml_drawing.rb +42 -0
  83. data/lib/axlsx/drawing/vml_shape.rb +66 -0
  84. data/lib/axlsx/package.rb +358 -0
  85. data/lib/axlsx/rels/relationship.rb +137 -0
  86. data/lib/axlsx/rels/relationships.rb +32 -0
  87. data/lib/axlsx/stylesheet/border.rb +71 -0
  88. data/lib/axlsx/stylesheet/border_pr.rb +71 -0
  89. data/lib/axlsx/stylesheet/cell_alignment.rb +132 -0
  90. data/lib/axlsx/stylesheet/cell_protection.rb +41 -0
  91. data/lib/axlsx/stylesheet/cell_style.rb +72 -0
  92. data/lib/axlsx/stylesheet/color.rb +76 -0
  93. data/lib/axlsx/stylesheet/dxf.rb +79 -0
  94. data/lib/axlsx/stylesheet/fill.rb +35 -0
  95. data/lib/axlsx/stylesheet/font.rb +148 -0
  96. data/lib/axlsx/stylesheet/gradient_fill.rb +103 -0
  97. data/lib/axlsx/stylesheet/gradient_stop.rb +37 -0
  98. data/lib/axlsx/stylesheet/num_fmt.rb +86 -0
  99. data/lib/axlsx/stylesheet/pattern_fill.rb +73 -0
  100. data/lib/axlsx/stylesheet/styles.rb +420 -0
  101. data/lib/axlsx/stylesheet/table_style.rb +54 -0
  102. data/lib/axlsx/stylesheet/table_style_element.rb +77 -0
  103. data/lib/axlsx/stylesheet/table_styles.rb +46 -0
  104. data/lib/axlsx/stylesheet/xf.rb +147 -0
  105. data/lib/axlsx/util/accessors.rb +64 -0
  106. data/lib/axlsx/util/constants.rb +400 -0
  107. data/lib/axlsx/util/mime_type_utils.rb +11 -0
  108. data/lib/axlsx/util/options_parser.rb +16 -0
  109. data/lib/axlsx/util/parser.rb +44 -0
  110. data/lib/axlsx/util/serialized_attributes.rb +89 -0
  111. data/lib/axlsx/util/simple_typed_list.rb +179 -0
  112. data/lib/axlsx/util/storage.rb +146 -0
  113. data/lib/axlsx/util/validators.rb +312 -0
  114. data/lib/axlsx/version.rb +3 -0
  115. data/lib/axlsx/workbook/defined_name.rb +128 -0
  116. data/lib/axlsx/workbook/defined_names.rb +21 -0
  117. data/lib/axlsx/workbook/shared_strings_table.rb +77 -0
  118. data/lib/axlsx/workbook/workbook.rb +379 -0
  119. data/lib/axlsx/workbook/workbook_view.rb +80 -0
  120. data/lib/axlsx/workbook/workbook_views.rb +22 -0
  121. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -0
  122. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -0
  123. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +244 -0
  124. data/lib/axlsx/workbook/worksheet/break.rb +35 -0
  125. data/lib/axlsx/workbook/worksheet/cell.rb +478 -0
  126. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +164 -0
  127. data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -0
  128. data/lib/axlsx/workbook/worksheet/cfvos.rb +18 -0
  129. data/lib/axlsx/workbook/worksheet/col.rb +141 -0
  130. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -0
  131. data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -0
  132. data/lib/axlsx/workbook/worksheet/cols.rb +23 -0
  133. data/lib/axlsx/workbook/worksheet/comment.rb +90 -0
  134. data/lib/axlsx/workbook/worksheet/comments.rb +97 -0
  135. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -0
  136. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -0
  137. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -0
  138. data/lib/axlsx/workbook/worksheet/data_bar.rb +129 -0
  139. data/lib/axlsx/workbook/worksheet/data_validation.rb +246 -0
  140. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -0
  141. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -0
  142. data/lib/axlsx/workbook/worksheet/dimension.rb +64 -0
  143. data/lib/axlsx/workbook/worksheet/header_footer.rb +52 -0
  144. data/lib/axlsx/workbook/worksheet/icon_set.rb +81 -0
  145. data/lib/axlsx/workbook/worksheet/merged_cells.rb +37 -0
  146. data/lib/axlsx/workbook/worksheet/outline_pr.rb +33 -0
  147. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -0
  148. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -0
  149. data/lib/axlsx/workbook/worksheet/page_setup.rb +240 -0
  150. data/lib/axlsx/workbook/worksheet/pane.rb +139 -0
  151. data/lib/axlsx/workbook/worksheet/pivot_table.rb +289 -0
  152. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -0
  153. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -0
  154. data/lib/axlsx/workbook/worksheet/print_options.rb +39 -0
  155. data/lib/axlsx/workbook/worksheet/protected_range.rb +47 -0
  156. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +37 -0
  157. data/lib/axlsx/workbook/worksheet/rich_text.rb +55 -0
  158. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +250 -0
  159. data/lib/axlsx/workbook/worksheet/row.rb +161 -0
  160. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -0
  161. data/lib/axlsx/workbook/worksheet/selection.rb +101 -0
  162. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -0
  163. data/lib/axlsx/workbook/worksheet/sheet_data.rb +27 -0
  164. data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +60 -0
  165. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +87 -0
  166. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +118 -0
  167. data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -0
  168. data/lib/axlsx/workbook/worksheet/table.rb +102 -0
  169. data/lib/axlsx/workbook/worksheet/table_style_info.rb +49 -0
  170. data/lib/axlsx/workbook/worksheet/tables.rb +34 -0
  171. data/lib/axlsx/workbook/worksheet/worksheet.rb +756 -0
  172. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -0
  173. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -0
  174. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -0
  175. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -0
  176. data/lib/schema/dc.xsd +118 -0
  177. data/lib/schema/dcmitype.xsd +52 -0
  178. data/lib/schema/dcterms.xsd +331 -0
  179. data/lib/schema/dml-chart.xsd +1499 -0
  180. data/lib/schema/dml-chartDrawing.xsd +146 -0
  181. data/lib/schema/dml-compatibility.xsd +14 -0
  182. data/lib/schema/dml-diagram.xsd +1091 -0
  183. data/lib/schema/dml-lockedCanvas.xsd +11 -0
  184. data/lib/schema/dml-main.xsd +3048 -0
  185. data/lib/schema/dml-picture.xsd +23 -0
  186. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -0
  187. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -0
  188. data/lib/schema/opc-contentTypes.xsd +42 -0
  189. data/lib/schema/opc-coreProperties.xsd +54 -0
  190. data/lib/schema/opc-digSig.xsd +49 -0
  191. data/lib/schema/opc-relationships.xsd +33 -0
  192. data/lib/schema/pml.xsd +1676 -0
  193. data/lib/schema/shared-additionalCharacteristics.xsd +28 -0
  194. data/lib/schema/shared-bibliography.xsd +144 -0
  195. data/lib/schema/shared-commonSimpleTypes.xsd +166 -0
  196. data/lib/schema/shared-customXmlDataProperties.xsd +25 -0
  197. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -0
  198. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -0
  199. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -0
  200. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -0
  201. data/lib/schema/shared-math.xsd +582 -0
  202. data/lib/schema/shared-relationshipReference.xsd +25 -0
  203. data/lib/schema/sml.xsd +4434 -0
  204. data/lib/schema/vml-main.xsd +569 -0
  205. data/lib/schema/vml-officeDrawing.xsd +509 -0
  206. data/lib/schema/vml-presentationDrawing.xsd +12 -0
  207. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -0
  208. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -0
  209. data/lib/schema/wml.xsd +3644 -0
  210. data/lib/schema/xml.xsd +116 -0
  211. data/test/benchmark.rb +72 -0
  212. data/test/content_type/tc_content_type.rb +76 -0
  213. data/test/content_type/tc_default.rb +16 -0
  214. data/test/content_type/tc_override.rb +14 -0
  215. data/test/doc_props/tc_app.rb +43 -0
  216. data/test/doc_props/tc_core.rb +42 -0
  217. data/test/drawing/tc_area_chart.rb +39 -0
  218. data/test/drawing/tc_area_series.rb +71 -0
  219. data/test/drawing/tc_axes.rb +8 -0
  220. data/test/drawing/tc_axis.rb +112 -0
  221. data/test/drawing/tc_bar_3D_chart.rb +71 -0
  222. data/test/drawing/tc_bar_chart.rb +71 -0
  223. data/test/drawing/tc_bar_series.rb +37 -0
  224. data/test/drawing/tc_bubble_chart.rb +44 -0
  225. data/test/drawing/tc_bubble_series.rb +21 -0
  226. data/test/drawing/tc_cat_axis.rb +31 -0
  227. data/test/drawing/tc_cat_axis_data.rb +27 -0
  228. data/test/drawing/tc_chart.rb +123 -0
  229. data/test/drawing/tc_d_lbls.rb +57 -0
  230. data/test/drawing/tc_data_source.rb +23 -0
  231. data/test/drawing/tc_drawing.rb +80 -0
  232. data/test/drawing/tc_graphic_frame.rb +27 -0
  233. data/test/drawing/tc_hyperlink.rb +64 -0
  234. data/test/drawing/tc_line_3d_chart.rb +47 -0
  235. data/test/drawing/tc_line_chart.rb +39 -0
  236. data/test/drawing/tc_line_series.rb +71 -0
  237. data/test/drawing/tc_marker.rb +44 -0
  238. data/test/drawing/tc_named_axis_data.rb +27 -0
  239. data/test/drawing/tc_num_data.rb +31 -0
  240. data/test/drawing/tc_num_val.rb +29 -0
  241. data/test/drawing/tc_one_cell_anchor.rb +66 -0
  242. data/test/drawing/tc_pic.rb +103 -0
  243. data/test/drawing/tc_picture_locking.rb +72 -0
  244. data/test/drawing/tc_pie_3D_chart.rb +28 -0
  245. data/test/drawing/tc_pie_series.rb +32 -0
  246. data/test/drawing/tc_scaling.rb +36 -0
  247. data/test/drawing/tc_scatter_chart.rb +48 -0
  248. data/test/drawing/tc_scatter_series.rb +56 -0
  249. data/test/drawing/tc_ser_axis.rb +31 -0
  250. data/test/drawing/tc_series.rb +23 -0
  251. data/test/drawing/tc_series_title.rb +33 -0
  252. data/test/drawing/tc_str_data.rb +18 -0
  253. data/test/drawing/tc_str_val.rb +30 -0
  254. data/test/drawing/tc_title.rb +54 -0
  255. data/test/drawing/tc_two_cell_anchor.rb +36 -0
  256. data/test/drawing/tc_val_axis.rb +24 -0
  257. data/test/drawing/tc_view_3D.rb +54 -0
  258. data/test/drawing/tc_vml_drawing.rb +25 -0
  259. data/test/drawing/tc_vml_shape.rb +106 -0
  260. data/test/profile.rb +24 -0
  261. data/test/rels/tc_relationship.rb +44 -0
  262. data/test/rels/tc_relationships.rb +37 -0
  263. data/test/stylesheet/tc_border.rb +37 -0
  264. data/test/stylesheet/tc_border_pr.rb +32 -0
  265. data/test/stylesheet/tc_cell_alignment.rb +81 -0
  266. data/test/stylesheet/tc_cell_protection.rb +29 -0
  267. data/test/stylesheet/tc_cell_style.rb +57 -0
  268. data/test/stylesheet/tc_color.rb +43 -0
  269. data/test/stylesheet/tc_dxf.rb +81 -0
  270. data/test/stylesheet/tc_fill.rb +18 -0
  271. data/test/stylesheet/tc_font.rb +121 -0
  272. data/test/stylesheet/tc_gradient_fill.rb +72 -0
  273. data/test/stylesheet/tc_gradient_stop.rb +31 -0
  274. data/test/stylesheet/tc_num_fmt.rb +30 -0
  275. data/test/stylesheet/tc_pattern_fill.rb +43 -0
  276. data/test/stylesheet/tc_styles.rb +235 -0
  277. data/test/stylesheet/tc_table_style.rb +44 -0
  278. data/test/stylesheet/tc_table_style_element.rb +45 -0
  279. data/test/stylesheet/tc_table_styles.rb +29 -0
  280. data/test/stylesheet/tc_xf.rb +120 -0
  281. data/test/tc_axlsx.rb +103 -0
  282. data/test/tc_helper.rb +12 -0
  283. data/test/tc_package.rb +245 -0
  284. data/test/util/tc_mime_type_utils.rb +13 -0
  285. data/test/util/tc_serialized_attributes.rb +19 -0
  286. data/test/util/tc_simple_typed_list.rb +77 -0
  287. data/test/util/tc_validators.rb +210 -0
  288. data/test/workbook/tc_defined_name.rb +49 -0
  289. data/test/workbook/tc_shared_strings_table.rb +59 -0
  290. data/test/workbook/tc_workbook.rb +160 -0
  291. data/test/workbook/tc_workbook_view.rb +50 -0
  292. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -0
  293. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -0
  294. data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -0
  295. data/test/workbook/worksheet/tc_break.rb +49 -0
  296. data/test/workbook/worksheet/tc_cell.rb +387 -0
  297. data/test/workbook/worksheet/tc_cfvo.rb +31 -0
  298. data/test/workbook/worksheet/tc_col.rb +78 -0
  299. data/test/workbook/worksheet/tc_color_scale.rb +58 -0
  300. data/test/workbook/worksheet/tc_comment.rb +72 -0
  301. data/test/workbook/worksheet/tc_comments.rb +57 -0
  302. data/test/workbook/worksheet/tc_conditional_formatting.rb +224 -0
  303. data/test/workbook/worksheet/tc_data_bar.rb +46 -0
  304. data/test/workbook/worksheet/tc_data_validation.rb +265 -0
  305. data/test/workbook/worksheet/tc_date_time_converter.rb +124 -0
  306. data/test/workbook/worksheet/tc_header_footer.rb +151 -0
  307. data/test/workbook/worksheet/tc_icon_set.rb +45 -0
  308. data/test/workbook/worksheet/tc_outline_pr.rb +19 -0
  309. data/test/workbook/worksheet/tc_page_margins.rb +97 -0
  310. data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -0
  311. data/test/workbook/worksheet/tc_page_setup.rb +143 -0
  312. data/test/workbook/worksheet/tc_pane.rb +54 -0
  313. data/test/workbook/worksheet/tc_pivot_table.rb +135 -0
  314. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +54 -0
  315. data/test/workbook/worksheet/tc_print_options.rb +72 -0
  316. data/test/workbook/worksheet/tc_protected_range.rb +17 -0
  317. data/test/workbook/worksheet/tc_rich_text.rb +44 -0
  318. data/test/workbook/worksheet/tc_rich_text_run.rb +172 -0
  319. data/test/workbook/worksheet/tc_row.rb +122 -0
  320. data/test/workbook/worksheet/tc_selection.rb +55 -0
  321. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -0
  322. data/test/workbook/worksheet/tc_sheet_format_pr.rb +88 -0
  323. data/test/workbook/worksheet/tc_sheet_pr.rb +49 -0
  324. data/test/workbook/worksheet/tc_sheet_protection.rb +117 -0
  325. data/test/workbook/worksheet/tc_sheet_view.rb +214 -0
  326. data/test/workbook/worksheet/tc_table.rb +67 -0
  327. data/test/workbook/worksheet/tc_table_style_info.rb +53 -0
  328. data/test/workbook/worksheet/tc_worksheet.rb +597 -0
  329. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +55 -0
  330. metadata +601 -0
@@ -0,0 +1,110 @@
1
+ # encoding: UTF-8
2
+ module Axlsx
3
+ # A AreaSeries defines the title, data and labels for line charts
4
+ # @note The recommended way to manage series is to use Chart#add_series
5
+ # @see Worksheet#add_chart
6
+ # @see Chart#add_series
7
+ class AreaSeries < Series
8
+
9
+ # The data for this series.
10
+ # @return [ValAxisData]
11
+ attr_reader :data
12
+
13
+ # The labels for this series.
14
+ # @return [CatAxisData]
15
+ attr_reader :labels
16
+
17
+ # The fill color for this series.
18
+ # Red, green, and blue is expressed as sequence of hex digits, RRGGBB. A perceptual gamma of 2.2 is used.
19
+ # @return [String]
20
+ attr_reader :color
21
+
22
+ # show markers on values
23
+ # @return [Boolean]
24
+ attr_reader :show_marker
25
+
26
+ # custom marker symbol
27
+ # @return [String]
28
+ attr_reader :marker_symbol
29
+
30
+ # line smoothing on values
31
+ # @return [Boolean]
32
+ attr_reader :smooth
33
+
34
+ # Creates a new series
35
+ # @option options [Array, SimpleTypedList] data
36
+ # @option options [Array, SimpleTypedList] labels
37
+ # @param [Chart] chart
38
+ def initialize(chart, options={})
39
+ @show_marker = false
40
+ @marker_symbol = options[:marker_symbol] ? options[:marker_symbol] : :default
41
+ @smooth = false
42
+ @labels, @data = nil, nil
43
+ super(chart, options)
44
+ @labels = AxDataSource.new(:data => options[:labels]) unless options[:labels].nil?
45
+ @data = NumDataSource.new(options) unless options[:data].nil?
46
+ end
47
+
48
+ # @see color
49
+ def color=(v)
50
+ @color = v
51
+ end
52
+
53
+ # @see show_marker
54
+ def show_marker=(v)
55
+ Axlsx::validate_boolean(v)
56
+ @show_marker = v
57
+ end
58
+
59
+ # @see marker_symbol
60
+ def marker_symbol=(v)
61
+ Axlsx::validate_marker_symbol(v)
62
+ @marker_symbol = v
63
+ end
64
+
65
+ # @see smooth
66
+ def smooth=(v)
67
+ Axlsx::validate_boolean(v)
68
+ @smooth = v
69
+ end
70
+
71
+ # Serializes the object
72
+ # @param [String] str
73
+ # @return [String]
74
+ def to_xml_string(str = '')
75
+ super(str) do
76
+ if color
77
+ str << '<c:spPr><a:solidFill>'
78
+ str << ('<a:srgbClr val="' << color << '"/>')
79
+ str << '</a:solidFill>'
80
+ str << '<a:ln w="28800">'
81
+ str << '<a:solidFill>'
82
+ str << ('<a:srgbClr val="' << color << '"/>')
83
+ str << '</a:solidFill>'
84
+ str << '</a:ln>'
85
+ str << '<a:round/>'
86
+ str << '</c:spPr>'
87
+ end
88
+
89
+ if !@show_marker
90
+ str << '<c:marker><c:symbol val="none"/></c:marker>'
91
+ elsif @marker_symbol != :default
92
+ str << '<c:marker><c:symbol val="' + @marker_symbol.to_s + '"/></c:marker>'
93
+ end
94
+
95
+ @labels.to_xml_string(str) unless @labels.nil?
96
+ @data.to_xml_string(str) unless @data.nil?
97
+ str << ('<c:smooth val="' << ((smooth) ? '1' : '0') << '"/>')
98
+ end
99
+ end
100
+
101
+ private
102
+
103
+ # assigns the data for this series
104
+ def data=(v) DataTypeValidator.validate "Series.data", [NumDataSource], v; @data = v; end
105
+
106
+ # assigns the labels for this series
107
+ def labels=(v) DataTypeValidator.validate "Series.labels", [AxDataSource], v; @labels = v; end
108
+
109
+ end
110
+ end
@@ -0,0 +1,26 @@
1
+ module Axlsx
2
+
3
+ # An axis data source that can contain referenced or literal strings or numbers
4
+ # @note only string data types are supported - mainly because we have not implemented a chart type that requires a numerical axis value
5
+ class AxDataSource < NumDataSource
6
+
7
+ # creates a new NumDataSource object
8
+ # @option options [Array] data An array of Cells or Numeric objects
9
+ # @option options [Symbol] tag_name see tag_name
10
+ def initialize(options={})
11
+ @tag_name = :cat
12
+ @data_type = StrData
13
+ @ref_tag_name = :strRef
14
+ super(options)
15
+ end
16
+
17
+ # allowed element tag names for serialization
18
+ # @return [Array]
19
+ def self.allowed_tag_names
20
+ [:xVal, :cat]
21
+ end
22
+
23
+ end
24
+
25
+ end
26
+
@@ -0,0 +1,61 @@
1
+ module Axlsx
2
+
3
+ # The Axes class creates and manages axis information and
4
+ # serialization for charts.
5
+ class Axes
6
+
7
+ # @param [Hash] options options used to generate axis each key
8
+ # should be an axis name like :val_axis and its value should be the
9
+ # class of the axis type to construct. The :cat_axis, if there is one,
10
+ # must come first (we assume a Ruby 1.9+ Hash or an OrderedHash).
11
+ def initialize(options={})
12
+ raise(ArgumentError, "CatAxis must come first") if options.keys.include?(:cat_axis) && options.keys.first != :cat_axis
13
+ options.each do |name, axis_class|
14
+ add_axis(name, axis_class)
15
+ end
16
+ end
17
+
18
+ # [] provides assiciative access to a specic axis store in an axes
19
+ # instance.
20
+ # @return [Axis]
21
+ def [](name)
22
+ axes.assoc(name)[1]
23
+ end
24
+
25
+ # Serializes the object
26
+ # @param [String] str
27
+ # @param [Hash] options
28
+ # @option options ids
29
+ # If the ids option is specified only the axis identifier is
30
+ # serialized. Otherwise, each axis is serialized in full.
31
+ def to_xml_string(str = '', options = {})
32
+ if options[:ids]
33
+ # CatAxis must come first in the XML (for Microsoft Excel at least)
34
+ sorted = axes.sort_by { |name, axis| axis.kind_of?(CatAxis) ? 0 : 1 }
35
+ sorted.each { |axis| str << ('<c:axId val="' << axis[1].id.to_s << '"/>') }
36
+ else
37
+ axes.each { |axis| axis[1].to_xml_string(str) }
38
+ end
39
+ end
40
+
41
+ # Adds an axis to the collection
42
+ # @param [Symbol] name The name of the axis
43
+ # @param [Axis] axis_class The axis class to generate
44
+ def add_axis(name, axis_class)
45
+ axis = axis_class.new
46
+ set_cross_axis(axis)
47
+ axes << [name, axis]
48
+ end
49
+
50
+ private
51
+
52
+ def axes
53
+ @axes ||= []
54
+ end
55
+
56
+ def set_cross_axis(axis)
57
+ axes.first[1].cross_axis = axis if axes.size == 1
58
+ axis.cross_axis = axes.first[1] unless axes.empty?
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,190 @@
1
+ # encoding: UTF-8
2
+ module Axlsx
3
+
4
+ # the access class defines common properties and values for a chart axis.
5
+ class Axis
6
+
7
+ include Axlsx::OptionsParser
8
+
9
+ # Creates an Axis object
10
+ # @option options [Axis] cross_axis the perpendicular axis
11
+ # @option options [Symbol] ax_pos
12
+ # @option options [Symbol] crosses
13
+ # @option options [Symbol] tick_lbl_pos
14
+ # @raise [ArgumentError] If axi_id or cross_ax are not unsigned integers
15
+ def initialize(options={})
16
+ @id = rand(8 ** 8)
17
+ @format_code = "General"
18
+ @delete = @label_rotation = 0
19
+ @scaling = Scaling.new(:orientation=>:minMax)
20
+ @title = @color = nil
21
+ self.ax_pos = :b
22
+ self.tick_lbl_pos = :nextTo
23
+ self.format_code = "General"
24
+ self.crosses = :autoZero
25
+ self.gridlines = true
26
+ parse_options options
27
+ end
28
+
29
+ # the fill color to use in the axis shape properties. This should be a 6 character long hex string
30
+ # e.g. FF0000 for red
31
+ # @return [String]
32
+ attr_reader :color
33
+
34
+ # the id of the axis.
35
+ # @return [Integer]
36
+ attr_reader :id
37
+ alias :axID :id
38
+
39
+ # The perpendicular axis
40
+ # @return [Integer]
41
+ attr_reader :cross_axis
42
+ alias :crossAx :cross_axis
43
+
44
+ # The scaling of the axis
45
+ # @see Scaling
46
+ # @return [Scaling]
47
+ attr_reader :scaling
48
+
49
+ # The position of the axis
50
+ # must be one of [:l, :r, :t, :b]
51
+ # @return [Symbol]
52
+ attr_reader :ax_pos
53
+ alias :axPos :ax_pos
54
+
55
+ # the position of the tick labels
56
+ # must be one of [:nextTo, :high, :low]
57
+ # @return [Symbol]
58
+ attr_reader :tick_lbl_pos
59
+ alias :tickLblPos :tick_lbl_pos
60
+
61
+ # The number format format code for this axis
62
+ # default :General
63
+ # @return [String]
64
+ attr_reader :format_code
65
+
66
+ # specifies how the perpendicular axis is crossed
67
+ # must be one of [:autoZero, :min, :max]
68
+ # @return [Symbol]
69
+ attr_reader :crosses
70
+
71
+ # specifies how the degree of label rotation
72
+ # @return [Integer]
73
+ attr_reader :label_rotation
74
+
75
+ # specifies if gridlines should be shown in the chart
76
+ # @return [Boolean]
77
+ attr_reader :gridlines
78
+
79
+ # specifies if gridlines should be shown in the chart
80
+ # @return [Boolean]
81
+ attr_reader :delete
82
+
83
+ # the title for the axis. This can be a cell or a fixed string.
84
+ attr_reader :title
85
+
86
+ # The color for this axis. This value is used when rendering the axis line in the chart.
87
+ # colors should be in 6 character rbg format
88
+ # @return [String] the rbg color assinged.
89
+ # @see color
90
+ def color=(color_rgb)
91
+ @color = color_rgb
92
+ end
93
+
94
+ # The crossing axis for this axis
95
+ # @param [Axis] axis
96
+ def cross_axis=(axis)
97
+ DataTypeValidator.validate "#{self.class}.cross_axis", [Axis], axis
98
+ @cross_axis = axis
99
+ end
100
+
101
+ # The position of the axis
102
+ # must be one of [:l, :r, :t, :b]
103
+ def ax_pos=(v) RestrictionValidator.validate "#{self.class}.ax_pos", [:l, :r, :b, :t], v; @ax_pos = v; end
104
+ alias :axPos= :ax_pos=
105
+
106
+ # the position of the tick labels
107
+ # must be one of [:nextTo, :high, :low1]
108
+ def tick_lbl_pos=(v) RestrictionValidator.validate "#{self.class}.tick_lbl_pos", [:nextTo, :high, :low, :none], v; @tick_lbl_pos = v; end
109
+ alias :tickLblPos= :tick_lbl_pos=
110
+
111
+ # The number format format code for this axis
112
+ # default :General
113
+ def format_code=(v) Axlsx::validate_string(v); @format_code = v; end
114
+
115
+ # Specify if gridlines should be shown for this axis
116
+ # default true
117
+ def gridlines=(v) Axlsx::validate_boolean(v); @gridlines = v; end
118
+
119
+ # Specify if axis should be removed from the chart
120
+ # default false
121
+ def delete=(v) Axlsx::validate_boolean(v); @delete = v; end
122
+
123
+ # specifies how the perpendicular axis is crossed
124
+ # must be one of [:autoZero, :min, :max]
125
+ def crosses=(v) RestrictionValidator.validate "#{self.class}.crosses", [:autoZero, :min, :max], v; @crosses = v; end
126
+
127
+ # Specify the degree of label rotation to apply to labels
128
+ # default true
129
+ def label_rotation=(v)
130
+ Axlsx::validate_int(v)
131
+ adjusted = v.to_i * 60000
132
+ Axlsx::validate_angle(adjusted)
133
+ @label_rotation = adjusted
134
+ end
135
+
136
+ # The title object for the chart.
137
+ # @param [String, Cell] v
138
+ # @return [Title]
139
+ def title=(v)
140
+ DataTypeValidator.validate "#{self.class}.title", [String, Cell], v
141
+ @title ||= Title.new
142
+ if v.is_a?(String)
143
+ @title.text = v
144
+ elsif v.is_a?(Cell)
145
+ @title.cell = v
146
+ end
147
+ end
148
+
149
+ # Serializes the object
150
+ # @param [String] str
151
+ # @return [String]
152
+ def to_xml_string(str = '')
153
+ str << ('<c:axId val="' << @id.to_s << '"/>')
154
+ @scaling.to_xml_string str
155
+ str << ('<c:delete val="' << @delete.to_s << '"/>')
156
+ str << ('<c:axPos val="' << @ax_pos.to_s << '"/>')
157
+ str << '<c:majorGridlines>'
158
+ # TODO shape properties need to be extracted into a class
159
+ if gridlines == false
160
+ str << '<c:spPr>'
161
+ str << '<a:ln>'
162
+ str << '<a:noFill/>'
163
+ str << '</a:ln>'
164
+ str << '</c:spPr>'
165
+ end
166
+ str << '</c:majorGridlines>'
167
+ @title.to_xml_string(str) unless @title == nil
168
+ # Need to set sourceLinked to 0 if we're setting a format code on this row
169
+ # otherwise it will never take, as it will always prefer the 'General' formatting
170
+ # of the cells themselves
171
+ str << ('<c:numFmt formatCode="' << @format_code << '" sourceLinked="' << (@format_code.eql?('General') ? '1' : '0') << '"/>')
172
+ str << '<c:majorTickMark val="none"/>'
173
+ str << '<c:minorTickMark val="none"/>'
174
+ str << ('<c:tickLblPos val="' << @tick_lbl_pos.to_s << '"/>')
175
+ # TODO - this is also being used for series colors
176
+ # time to extract this into a class spPr - Shape Properties
177
+ if @color
178
+ str << '<c:spPr><a:ln><a:solidFill>'
179
+ str << ('<a:srgbClr val="' << @color << '"/>')
180
+ str << '</a:solidFill></a:ln></c:spPr>'
181
+ end
182
+ # some potential value in implementing this in full. Very detailed!
183
+ str << ('<c:txPr><a:bodyPr rot="' << @label_rotation.to_s << '"/><a:lstStyle/><a:p><a:pPr><a:defRPr/></a:pPr><a:endParaRPr/></a:p></c:txPr>')
184
+ str << ('<c:crossAx val="' << @cross_axis.id.to_s << '"/>')
185
+ str << ('<c:crosses val="' << @crosses.to_s << '"/>')
186
+ end
187
+
188
+ end
189
+
190
+ end
@@ -0,0 +1,151 @@
1
+ # encoding: UTF-8
2
+ module Axlsx
3
+
4
+ # The Bar3DChart is a three dimentional barchart (who would have guessed?) that you can add to your worksheet.
5
+ # @see Worksheet#add_chart
6
+ # @see Chart#add_series
7
+ # @see Package#serialize
8
+ # @see README for an example
9
+ class Bar3DChart < Chart
10
+
11
+ # the category axis
12
+ # @return [CatAxis]
13
+ def cat_axis
14
+ axes[:cat_axis]
15
+ end
16
+ alias :catAxis :cat_axis
17
+
18
+ # the value axis
19
+ # @return [ValAxis]
20
+ def val_axis
21
+ axes[:val_axis]
22
+ end
23
+ alias :valAxis :val_axis
24
+
25
+ # The direction of the bars in the chart
26
+ # must be one of [:bar, :col]
27
+ # @return [Symbol]
28
+ def bar_dir
29
+ @bar_dir ||= :bar
30
+ end
31
+ alias :barDir :bar_dir
32
+
33
+ # space between bar or column clusters, as a percentage of the bar or column width.
34
+ # @return [String]
35
+ attr_reader :gap_depth
36
+ alias :gapDepth :gap_depth
37
+
38
+ # space between bar or column clusters, as a percentage of the bar or column width.
39
+ # @return [String]
40
+ def gap_width
41
+ @gap_width ||= 150
42
+ end
43
+ alias :gapWidth :gap_width
44
+
45
+ #grouping for a column, line, or area chart.
46
+ # must be one of [:percentStacked, :clustered, :standard, :stacked]
47
+ # @return [Symbol]
48
+ def grouping
49
+ @grouping ||= :clustered
50
+ end
51
+
52
+ # The shabe of the bars or columns
53
+ # must be one of [:cone, :coneToMax, :box, :cylinder, :pyramid, :pyramidToMax]
54
+ # @return [Symbol]
55
+ def shape
56
+ @shape ||= :box
57
+ end
58
+
59
+ # validation regex for gap amount percent
60
+ GAP_AMOUNT_PERCENT = /0*(([0-9])|([1-9][0-9])|([1-4][0-9][0-9])|500)%/
61
+
62
+ # Creates a new bar chart object
63
+ # @param [GraphicFrame] frame The workbook that owns this chart.
64
+ # @option options [Cell, String] title
65
+ # @option options [Boolean] show_legend
66
+ # @option options [Symbol] bar_dir
67
+ # @option options [Symbol] grouping
68
+ # @option options [String] gap_width
69
+ # @option options [String] gap_depth
70
+ # @option options [Symbol] shape
71
+ # @option options [Integer] rot_x
72
+ # @option options [String] h_percent
73
+ # @option options [Integer] rot_y
74
+ # @option options [String] depth_percent
75
+ # @option options [Boolean] r_ang_ax
76
+ # @option options [Integer] perspective
77
+ # @see Chart
78
+ # @see View3D
79
+ def initialize(frame, options={})
80
+ @vary_colors = true
81
+ @gap_width, @gap_depth, @shape = nil, nil, nil
82
+ super(frame, options)
83
+ @series_type = BarSeries
84
+ @view_3D = View3D.new({:r_ang_ax=>1}.merge(options))
85
+ @d_lbls = nil
86
+ end
87
+
88
+ # The direction of the bars in the chart
89
+ # must be one of [:bar, :col]
90
+ def bar_dir=(v)
91
+ RestrictionValidator.validate "Bar3DChart.bar_dir", [:bar, :col], v
92
+ @bar_dir = v
93
+ end
94
+ alias :barDir= :bar_dir=
95
+
96
+ #grouping for a column, line, or area chart.
97
+ # must be one of [:percentStacked, :clustered, :standard, :stacked]
98
+ def grouping=(v)
99
+ RestrictionValidator.validate "Bar3DChart.grouping", [:percentStacked, :clustered, :standard, :stacked], v
100
+ @grouping = v
101
+ end
102
+
103
+ # space between bar or column clusters, as a percentage of the bar or column width.
104
+ def gap_width=(v)
105
+ RegexValidator.validate "Bar3DChart.gap_width", GAP_AMOUNT_PERCENT, v
106
+ @gap_width=(v)
107
+ end
108
+ alias :gapWidth= :gap_width=
109
+
110
+ # space between bar or column clusters, as a percentage of the bar or column width.
111
+ def gap_depth=(v)
112
+ RegexValidator.validate "Bar3DChart.gap_didth", GAP_AMOUNT_PERCENT, v
113
+ @gap_depth=(v)
114
+ end
115
+ alias :gapDepth= :gap_depth=
116
+
117
+ # The shabe of the bars or columns
118
+ # must be one of [:cone, :coneToMax, :box, :cylinder, :pyramid, :pyramidToMax]
119
+ def shape=(v)
120
+ RestrictionValidator.validate "Bar3DChart.shape", [:cone, :coneToMax, :box, :cylinder, :pyramid, :pyramidToMax], v
121
+ @shape = v
122
+ end
123
+
124
+ # Serializes the object
125
+ # @param [String] str
126
+ # @return [String]
127
+ def to_xml_string(str = '')
128
+ super(str) do
129
+ str << '<c:bar3DChart>'
130
+ str << ('<c:barDir val="' << bar_dir.to_s << '"/>')
131
+ str << ('<c:grouping val="' << grouping.to_s << '"/>')
132
+ str << ('<c:varyColors val="' << vary_colors.to_s << '"/>')
133
+ @series.each { |ser| ser.to_xml_string(str) }
134
+ @d_lbls.to_xml_string(str) if @d_lbls
135
+ str << ('<c:gapWidth val="' << @gap_width.to_s << '"/>') unless @gap_width.nil?
136
+ str << ('<c:gapDepth val="' << @gap_depth.to_s << '"/>') unless @gap_depth.nil?
137
+ str << ('<c:shape val="' << @shape.to_s << '"/>') unless @shape.nil?
138
+ axes.to_xml_string(str, :ids => true)
139
+ str << '</c:bar3DChart>'
140
+ axes.to_xml_string(str)
141
+ end
142
+ end
143
+
144
+ # A hash of axes used by this chart. Bar charts have a value and
145
+ # category axes specified via axes[:val_axes] and axes[:cat_axis]
146
+ # @return [Axes]
147
+ def axes
148
+ @axes ||= Axes.new(:cat_axis => CatAxis, :val_axis => ValAxis)
149
+ end
150
+ end
151
+ end