caxlsx 2.0.2

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 (305) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +9 -0
  3. data/.yardopts_guide +19 -0
  4. data/CHANGELOG.md +239 -0
  5. data/LICENSE +22 -0
  6. data/README.md +256 -0
  7. data/Rakefile +31 -0
  8. data/examples/2010_comments.rb +17 -0
  9. data/examples/anchor_swapping.rb +28 -0
  10. data/examples/auto_filter.rb +16 -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 +74 -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 +50 -0
  20. data/examples/example.rb +777 -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/page_setup.rb +11 -0
  25. data/examples/pivot_table.rb +39 -0
  26. data/examples/sheet_protection.rb +10 -0
  27. data/examples/skydrive/real_example.rb +63 -0
  28. data/examples/styles.rb +66 -0
  29. data/examples/underline.rb +13 -0
  30. data/examples/wrap_text.rb +21 -0
  31. data/lib/axlsx.rb +152 -0
  32. data/lib/axlsx/content_type/abstract_content_type.rb +32 -0
  33. data/lib/axlsx/content_type/content_type.rb +26 -0
  34. data/lib/axlsx/content_type/default.rb +25 -0
  35. data/lib/axlsx/content_type/override.rb +25 -0
  36. data/lib/axlsx/doc_props/app.rb +235 -0
  37. data/lib/axlsx/doc_props/core.rb +39 -0
  38. data/lib/axlsx/drawing/ax_data_source.rb +26 -0
  39. data/lib/axlsx/drawing/axes.rb +61 -0
  40. data/lib/axlsx/drawing/axis.rb +187 -0
  41. data/lib/axlsx/drawing/bar_3D_chart.rb +151 -0
  42. data/lib/axlsx/drawing/bar_series.rb +82 -0
  43. data/lib/axlsx/drawing/cat_axis.rb +85 -0
  44. data/lib/axlsx/drawing/chart.rb +232 -0
  45. data/lib/axlsx/drawing/d_lbls.rb +90 -0
  46. data/lib/axlsx/drawing/drawing.rb +162 -0
  47. data/lib/axlsx/drawing/graphic_frame.rb +54 -0
  48. data/lib/axlsx/drawing/hyperlink.rb +102 -0
  49. data/lib/axlsx/drawing/line_3D_chart.rb +68 -0
  50. data/lib/axlsx/drawing/line_chart.rb +99 -0
  51. data/lib/axlsx/drawing/line_series.rb +81 -0
  52. data/lib/axlsx/drawing/marker.rb +84 -0
  53. data/lib/axlsx/drawing/num_data.rb +52 -0
  54. data/lib/axlsx/drawing/num_data_source.rb +62 -0
  55. data/lib/axlsx/drawing/num_val.rb +32 -0
  56. data/lib/axlsx/drawing/one_cell_anchor.rb +98 -0
  57. data/lib/axlsx/drawing/pic.rb +205 -0
  58. data/lib/axlsx/drawing/picture_locking.rb +44 -0
  59. data/lib/axlsx/drawing/pie_3D_chart.rb +48 -0
  60. data/lib/axlsx/drawing/pie_series.rb +74 -0
  61. data/lib/axlsx/drawing/scaling.rb +60 -0
  62. data/lib/axlsx/drawing/scatter_chart.rb +74 -0
  63. data/lib/axlsx/drawing/scatter_series.rb +65 -0
  64. data/lib/axlsx/drawing/ser_axis.rb +45 -0
  65. data/lib/axlsx/drawing/series.rb +69 -0
  66. data/lib/axlsx/drawing/series_title.rb +23 -0
  67. data/lib/axlsx/drawing/str_data.rb +42 -0
  68. data/lib/axlsx/drawing/str_val.rb +32 -0
  69. data/lib/axlsx/drawing/title.rb +78 -0
  70. data/lib/axlsx/drawing/two_cell_anchor.rb +92 -0
  71. data/lib/axlsx/drawing/val_axis.rb +37 -0
  72. data/lib/axlsx/drawing/view_3D.rb +115 -0
  73. data/lib/axlsx/drawing/vml_drawing.rb +42 -0
  74. data/lib/axlsx/drawing/vml_shape.rb +66 -0
  75. data/lib/axlsx/package.rb +352 -0
  76. data/lib/axlsx/rels/relationship.rb +129 -0
  77. data/lib/axlsx/rels/relationships.rb +29 -0
  78. data/lib/axlsx/stylesheet/border.rb +71 -0
  79. data/lib/axlsx/stylesheet/border_pr.rb +71 -0
  80. data/lib/axlsx/stylesheet/cell_alignment.rb +134 -0
  81. data/lib/axlsx/stylesheet/cell_protection.rb +43 -0
  82. data/lib/axlsx/stylesheet/cell_style.rb +74 -0
  83. data/lib/axlsx/stylesheet/color.rb +78 -0
  84. data/lib/axlsx/stylesheet/dxf.rb +79 -0
  85. data/lib/axlsx/stylesheet/fill.rb +35 -0
  86. data/lib/axlsx/stylesheet/font.rb +148 -0
  87. data/lib/axlsx/stylesheet/gradient_fill.rb +103 -0
  88. data/lib/axlsx/stylesheet/gradient_stop.rb +37 -0
  89. data/lib/axlsx/stylesheet/num_fmt.rb +79 -0
  90. data/lib/axlsx/stylesheet/pattern_fill.rb +73 -0
  91. data/lib/axlsx/stylesheet/styles.rb +420 -0
  92. data/lib/axlsx/stylesheet/table_style.rb +54 -0
  93. data/lib/axlsx/stylesheet/table_style_element.rb +79 -0
  94. data/lib/axlsx/stylesheet/table_styles.rb +46 -0
  95. data/lib/axlsx/stylesheet/xf.rb +147 -0
  96. data/lib/axlsx/util/accessors.rb +64 -0
  97. data/lib/axlsx/util/constants.rb +392 -0
  98. data/lib/axlsx/util/options_parser.rb +15 -0
  99. data/lib/axlsx/util/parser.rb +44 -0
  100. data/lib/axlsx/util/serialized_attributes.rb +79 -0
  101. data/lib/axlsx/util/simple_typed_list.rb +203 -0
  102. data/lib/axlsx/util/storage.rb +146 -0
  103. data/lib/axlsx/util/validators.rb +300 -0
  104. data/lib/axlsx/version.rb +5 -0
  105. data/lib/axlsx/workbook/defined_name.rb +129 -0
  106. data/lib/axlsx/workbook/defined_names.rb +21 -0
  107. data/lib/axlsx/workbook/shared_strings_table.rb +77 -0
  108. data/lib/axlsx/workbook/workbook.rb +354 -0
  109. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -0
  110. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -0
  111. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +246 -0
  112. data/lib/axlsx/workbook/worksheet/break.rb +37 -0
  113. data/lib/axlsx/workbook/worksheet/cell.rb +416 -0
  114. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +144 -0
  115. data/lib/axlsx/workbook/worksheet/cfvo.rb +62 -0
  116. data/lib/axlsx/workbook/worksheet/cfvos.rb +15 -0
  117. data/lib/axlsx/workbook/worksheet/col.rb +144 -0
  118. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -0
  119. data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -0
  120. data/lib/axlsx/workbook/worksheet/cols.rb +20 -0
  121. data/lib/axlsx/workbook/worksheet/comment.rb +92 -0
  122. data/lib/axlsx/workbook/worksheet/comments.rb +85 -0
  123. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -0
  124. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -0
  125. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -0
  126. data/lib/axlsx/workbook/worksheet/data_bar.rb +131 -0
  127. data/lib/axlsx/workbook/worksheet/data_validation.rb +244 -0
  128. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -0
  129. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -0
  130. data/lib/axlsx/workbook/worksheet/dimension.rb +64 -0
  131. data/lib/axlsx/workbook/worksheet/header_footer.rb +54 -0
  132. data/lib/axlsx/workbook/worksheet/icon_set.rb +83 -0
  133. data/lib/axlsx/workbook/worksheet/merged_cells.rb +35 -0
  134. data/lib/axlsx/workbook/worksheet/page_margins.rb +99 -0
  135. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -0
  136. data/lib/axlsx/workbook/worksheet/page_setup.rb +242 -0
  137. data/lib/axlsx/workbook/worksheet/pane.rb +141 -0
  138. data/lib/axlsx/workbook/worksheet/pivot_table.rb +273 -0
  139. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -0
  140. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -0
  141. data/lib/axlsx/workbook/worksheet/print_options.rb +41 -0
  142. data/lib/axlsx/workbook/worksheet/protected_range.rb +49 -0
  143. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +34 -0
  144. data/lib/axlsx/workbook/worksheet/row.rb +172 -0
  145. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -0
  146. data/lib/axlsx/workbook/worksheet/selection.rb +103 -0
  147. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -0
  148. data/lib/axlsx/workbook/worksheet/sheet_data.rb +25 -0
  149. data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +60 -0
  150. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +69 -0
  151. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +120 -0
  152. data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -0
  153. data/lib/axlsx/workbook/worksheet/table.rb +102 -0
  154. data/lib/axlsx/workbook/worksheet/table_style_info.rb +51 -0
  155. data/lib/axlsx/workbook/worksheet/tables.rb +31 -0
  156. data/lib/axlsx/workbook/worksheet/worksheet.rb +769 -0
  157. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -0
  158. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -0
  159. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -0
  160. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -0
  161. data/lib/schema/dc.xsd +118 -0
  162. data/lib/schema/dcmitype.xsd +52 -0
  163. data/lib/schema/dcterms.xsd +331 -0
  164. data/lib/schema/dml-chart.xsd +1499 -0
  165. data/lib/schema/dml-chartDrawing.xsd +146 -0
  166. data/lib/schema/dml-compatibility.xsd +14 -0
  167. data/lib/schema/dml-diagram.xsd +1091 -0
  168. data/lib/schema/dml-lockedCanvas.xsd +11 -0
  169. data/lib/schema/dml-main.xsd +3048 -0
  170. data/lib/schema/dml-picture.xsd +23 -0
  171. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -0
  172. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -0
  173. data/lib/schema/opc-contentTypes.xsd +42 -0
  174. data/lib/schema/opc-coreProperties.xsd +54 -0
  175. data/lib/schema/opc-digSig.xsd +49 -0
  176. data/lib/schema/opc-relationships.xsd +33 -0
  177. data/lib/schema/pml.xsd +1676 -0
  178. data/lib/schema/shared-additionalCharacteristics.xsd +28 -0
  179. data/lib/schema/shared-bibliography.xsd +144 -0
  180. data/lib/schema/shared-commonSimpleTypes.xsd +166 -0
  181. data/lib/schema/shared-customXmlDataProperties.xsd +25 -0
  182. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -0
  183. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -0
  184. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -0
  185. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -0
  186. data/lib/schema/shared-math.xsd +582 -0
  187. data/lib/schema/shared-relationshipReference.xsd +25 -0
  188. data/lib/schema/sml.xsd +4434 -0
  189. data/lib/schema/vml-main.xsd +569 -0
  190. data/lib/schema/vml-officeDrawing.xsd +509 -0
  191. data/lib/schema/vml-presentationDrawing.xsd +12 -0
  192. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -0
  193. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -0
  194. data/lib/schema/wml.xsd +3644 -0
  195. data/lib/schema/xml.xsd +116 -0
  196. data/test/benchmark.rb +72 -0
  197. data/test/content_type/tc_content_type.rb +76 -0
  198. data/test/content_type/tc_default.rb +16 -0
  199. data/test/content_type/tc_override.rb +14 -0
  200. data/test/doc_props/tc_app.rb +43 -0
  201. data/test/doc_props/tc_core.rb +42 -0
  202. data/test/drawing/tc_axes.rb +8 -0
  203. data/test/drawing/tc_axis.rb +85 -0
  204. data/test/drawing/tc_bar_3D_chart.rb +71 -0
  205. data/test/drawing/tc_bar_series.rb +37 -0
  206. data/test/drawing/tc_cat_axis.rb +31 -0
  207. data/test/drawing/tc_cat_axis_data.rb +27 -0
  208. data/test/drawing/tc_chart.rb +110 -0
  209. data/test/drawing/tc_d_lbls.rb +57 -0
  210. data/test/drawing/tc_data_source.rb +17 -0
  211. data/test/drawing/tc_drawing.rb +80 -0
  212. data/test/drawing/tc_graphic_frame.rb +27 -0
  213. data/test/drawing/tc_hyperlink.rb +64 -0
  214. data/test/drawing/tc_line_3d_chart.rb +47 -0
  215. data/test/drawing/tc_line_chart.rb +39 -0
  216. data/test/drawing/tc_line_series.rb +30 -0
  217. data/test/drawing/tc_marker.rb +44 -0
  218. data/test/drawing/tc_named_axis_data.rb +27 -0
  219. data/test/drawing/tc_num_data.rb +31 -0
  220. data/test/drawing/tc_num_val.rb +29 -0
  221. data/test/drawing/tc_one_cell_anchor.rb +66 -0
  222. data/test/drawing/tc_pic.rb +107 -0
  223. data/test/drawing/tc_picture_locking.rb +72 -0
  224. data/test/drawing/tc_pie_3D_chart.rb +28 -0
  225. data/test/drawing/tc_pie_series.rb +32 -0
  226. data/test/drawing/tc_scaling.rb +36 -0
  227. data/test/drawing/tc_scatter_chart.rb +48 -0
  228. data/test/drawing/tc_scatter_series.rb +21 -0
  229. data/test/drawing/tc_ser_axis.rb +31 -0
  230. data/test/drawing/tc_series.rb +23 -0
  231. data/test/drawing/tc_series_title.rb +33 -0
  232. data/test/drawing/tc_str_data.rb +18 -0
  233. data/test/drawing/tc_str_val.rb +21 -0
  234. data/test/drawing/tc_title.rb +49 -0
  235. data/test/drawing/tc_two_cell_anchor.rb +36 -0
  236. data/test/drawing/tc_val_axis.rb +24 -0
  237. data/test/drawing/tc_view_3D.rb +54 -0
  238. data/test/drawing/tc_vml_drawing.rb +25 -0
  239. data/test/drawing/tc_vml_shape.rb +106 -0
  240. data/test/profile.rb +24 -0
  241. data/test/rels/tc_relationship.rb +44 -0
  242. data/test/rels/tc_relationships.rb +37 -0
  243. data/test/stylesheet/tc_border.rb +37 -0
  244. data/test/stylesheet/tc_border_pr.rb +32 -0
  245. data/test/stylesheet/tc_cell_alignment.rb +81 -0
  246. data/test/stylesheet/tc_cell_protection.rb +29 -0
  247. data/test/stylesheet/tc_cell_style.rb +57 -0
  248. data/test/stylesheet/tc_color.rb +43 -0
  249. data/test/stylesheet/tc_dxf.rb +81 -0
  250. data/test/stylesheet/tc_fill.rb +18 -0
  251. data/test/stylesheet/tc_font.rb +121 -0
  252. data/test/stylesheet/tc_gradient_fill.rb +72 -0
  253. data/test/stylesheet/tc_gradient_stop.rb +31 -0
  254. data/test/stylesheet/tc_num_fmt.rb +30 -0
  255. data/test/stylesheet/tc_pattern_fill.rb +43 -0
  256. data/test/stylesheet/tc_styles.rb +235 -0
  257. data/test/stylesheet/tc_table_style.rb +44 -0
  258. data/test/stylesheet/tc_table_style_element.rb +45 -0
  259. data/test/stylesheet/tc_table_styles.rb +29 -0
  260. data/test/stylesheet/tc_xf.rb +120 -0
  261. data/test/tc_axlsx.rb +72 -0
  262. data/test/tc_helper.rb +10 -0
  263. data/test/tc_package.rb +227 -0
  264. data/test/util/tc_serialized_attributes.rb +19 -0
  265. data/test/util/tc_simple_typed_list.rb +78 -0
  266. data/test/util/tc_validators.rb +186 -0
  267. data/test/workbook/tc_defined_name.rb +41 -0
  268. data/test/workbook/tc_shared_strings_table.rb +44 -0
  269. data/test/workbook/tc_workbook.rb +125 -0
  270. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -0
  271. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -0
  272. data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -0
  273. data/test/workbook/worksheet/tc_break.rb +49 -0
  274. data/test/workbook/worksheet/tc_cell.rb +319 -0
  275. data/test/workbook/worksheet/tc_cfvo.rb +31 -0
  276. data/test/workbook/worksheet/tc_col.rb +78 -0
  277. data/test/workbook/worksheet/tc_color_scale.rb +58 -0
  278. data/test/workbook/worksheet/tc_comment.rb +72 -0
  279. data/test/workbook/worksheet/tc_comments.rb +57 -0
  280. data/test/workbook/worksheet/tc_conditional_formatting.rb +224 -0
  281. data/test/workbook/worksheet/tc_data_bar.rb +46 -0
  282. data/test/workbook/worksheet/tc_data_validation.rb +265 -0
  283. data/test/workbook/worksheet/tc_date_time_converter.rb +124 -0
  284. data/test/workbook/worksheet/tc_header_footer.rb +151 -0
  285. data/test/workbook/worksheet/tc_icon_set.rb +45 -0
  286. data/test/workbook/worksheet/tc_page_margins.rb +97 -0
  287. data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -0
  288. data/test/workbook/worksheet/tc_page_setup.rb +143 -0
  289. data/test/workbook/worksheet/tc_pane.rb +54 -0
  290. data/test/workbook/worksheet/tc_pivot_table.rb +120 -0
  291. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +54 -0
  292. data/test/workbook/worksheet/tc_print_options.rb +72 -0
  293. data/test/workbook/worksheet/tc_protected_range.rb +17 -0
  294. data/test/workbook/worksheet/tc_row.rb +117 -0
  295. data/test/workbook/worksheet/tc_selection.rb +55 -0
  296. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -0
  297. data/test/workbook/worksheet/tc_sheet_format_pr.rb +88 -0
  298. data/test/workbook/worksheet/tc_sheet_pr.rb +27 -0
  299. data/test/workbook/worksheet/tc_sheet_protection.rb +117 -0
  300. data/test/workbook/worksheet/tc_sheet_view.rb +214 -0
  301. data/test/workbook/worksheet/tc_table.rb +68 -0
  302. data/test/workbook/worksheet/tc_table_style_info.rb +53 -0
  303. data/test/workbook/worksheet/tc_worksheet.rb +538 -0
  304. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +55 -0
  305. metadata +546 -0
@@ -0,0 +1,187 @@
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
+ str << '<c:numFmt formatCode="' << @format_code << '" sourceLinked="1"/>'
169
+ str << '<c:majorTickMark val="none"/>'
170
+ str << '<c:minorTickMark val="none"/>'
171
+ str << '<c:tickLblPos val="' << @tick_lbl_pos.to_s << '"/>'
172
+ # TODO - this is also being used for series colors
173
+ # time to extract this into a class spPr - Shape Properties
174
+ if @color
175
+ str << '<c:spPr><a:ln><a:solidFill>'
176
+ str << '<a:srgbClr val="' << @color << '"/>'
177
+ str << '</a:solidFill></a:ln></c:spPr>'
178
+ end
179
+ # some potential value in implementing this in full. Very detailed!
180
+ 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>'
181
+ str << '<c:crossAx val="' << @cross_axis.id.to_s << '"/>'
182
+ str << '<c:crosses val="' << @crosses.to_s << '"/>'
183
+ end
184
+
185
+ end
186
+
187
+ 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 |str_inner|
129
+ str_inner << '<c:bar3DChart>'
130
+ str_inner << '<c:barDir val="' << bar_dir.to_s << '"/>'
131
+ str_inner << '<c:grouping val="' << grouping.to_s << '"/>'
132
+ str_inner << '<c:varyColors val="' << vary_colors.to_s << '"/>'
133
+ @series.each { |ser| ser.to_xml_string(str_inner) }
134
+ @d_lbls.to_xml_string(str_inner) if @d_lbls
135
+ str_inner << '<c:gapWidth val="' << @gap_width.to_s << '"/>' unless @gap_width.nil?
136
+ str_inner << '<c:gapDepth val="' << @gap_depth.to_s << '"/>' unless @gap_depth.nil?
137
+ str_inner << '<c:shape val="' << @shape.to_s << '"/>' unless @shape.nil?
138
+ axes.to_xml_string(str_inner, :ids => true)
139
+ str_inner << '</c:bar3DChart>'
140
+ axes.to_xml_string(str_inner)
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
@@ -0,0 +1,82 @@
1
+ # encoding: UTF-8
2
+ module Axlsx
3
+ # A BarSeries defines the title, data and labels for bar 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 BarSeries < Series
8
+
9
+
10
+ # The data for this series.
11
+ # @return [NumDataSource]
12
+ attr_reader :data
13
+
14
+ # The labels for this series.
15
+ # @return [Array, SimpleTypedList]
16
+ attr_reader :labels
17
+
18
+ # The shabe of the bars or columns
19
+ # must be one of [:percentStacked, :clustered, :standard, :stacked]
20
+ # @return [Symbol]
21
+ attr_reader :shape
22
+
23
+ # An array of rgb colors to apply to your bar chart.
24
+ attr_reader :colors
25
+
26
+ # Creates a new series
27
+ # @option options [Array, SimpleTypedList] data
28
+ # @option options [Array, SimpleTypedList] labels
29
+ # @option options [String] title
30
+ # @option options [String] shape
31
+ # @option options [String] colors an array of colors to use when rendering each data point
32
+ # @param [Chart] chart
33
+ def initialize(chart, options={})
34
+ @shape = :box
35
+ @colors = []
36
+ super(chart, options)
37
+ self.labels = AxDataSource.new({:data => options[:labels]}) unless options[:labels].nil?
38
+ self.data = NumDataSource.new(options) unless options[:data].nil?
39
+ end
40
+
41
+ # @see colors
42
+ def colors=(v) DataTypeValidator.validate "BarSeries.colors", [Array], v; @colors = v end
43
+
44
+ # The shabe of the bars or columns
45
+ # must be one of [:cone, :coneToMax, :box, :cylinder, :pyramid, :pyramidToMax]
46
+ def shape=(v)
47
+ RestrictionValidator.validate "BarSeries.shape", [:cone, :coneToMax, :box, :cylinder, :pyramid, :pyramidToMax], v
48
+ @shape = v
49
+ end
50
+
51
+ # Serializes the object
52
+ # @param [String] str
53
+ # @return [String]
54
+ def to_xml_string(str = '')
55
+ super(str) do |str_inner|
56
+
57
+ colors.each_with_index do |c, index|
58
+ str_inner << '<c:dPt>'
59
+ str_inner << '<c:idx val="' << index.to_s << '"/>'
60
+ str_inner << '<c:spPr><a:solidFill>'
61
+ str_inner << '<a:srgbClr val="' << c << '"/>'
62
+ str_inner << '</a:solidFill></c:spPr></c:dPt>'
63
+ end
64
+
65
+ @labels.to_xml_string(str_inner) unless @labels.nil?
66
+ @data.to_xml_string(str_inner) unless @data.nil?
67
+ # this is actually only required for shapes other than box
68
+ str_inner << '<c:shape val="' << shape.to_s << '"></c:shape>'
69
+ end
70
+ end
71
+
72
+ private
73
+
74
+ # assigns the data for this series
75
+ def data=(v) DataTypeValidator.validate "Series.data", [NumDataSource], v; @data = v; end
76
+
77
+ # assigns the labels for this series
78
+ def labels=(v) DataTypeValidator.validate "Series.labels", [AxDataSource], v; @labels = v; end
79
+
80
+ end
81
+
82
+ end
@@ -0,0 +1,85 @@
1
+ # encoding: UTF-8
2
+ module Axlsx
3
+ #A CatAxis object defines a chart category axis
4
+ class CatAxis < Axis
5
+
6
+ # Creates a new CatAxis object
7
+ # @option options [Integer] tick_lbl_skip
8
+ # @option options [Integer] tick_mark_skip
9
+ def initialize(options={})
10
+ @tick_lbl_skip = 1
11
+ @tick_mark_skip = 1
12
+ self.auto = 1
13
+ self.lbl_algn = :ctr
14
+ self.lbl_offset = "100"
15
+ super(options)
16
+ end
17
+
18
+ # From the docs: This element specifies that this axis is a date or text axis based on the data that is used for the axis labels, not a specific choice.
19
+ # @return [Boolean]
20
+ attr_reader :auto
21
+
22
+ # specifies how the perpendicular axis is crossed
23
+ # must be one of [:ctr, :l, :r]
24
+ # @return [Symbol]
25
+ attr_reader :lbl_algn
26
+ alias :lblAlgn :lbl_algn
27
+
28
+ # The offset of the labels
29
+ # must be between a string between 0 and 1000
30
+ # @return [Integer]
31
+ attr_reader :lbl_offset
32
+ alias :lblOffset :lbl_offset
33
+
34
+ # The number of tick lables to skip between labels
35
+ # @return [Integer]
36
+ attr_reader :tick_lbl_skip
37
+ alias :tickLblSkip :tick_lbl_skip
38
+
39
+ # The number of tickmarks to be skipped before the next one is rendered.
40
+ # @return [Boolean]
41
+ attr_reader :tick_mark_skip
42
+ alias :tickMarkSkip :tick_mark_skip
43
+
44
+ # regex for validating label offset
45
+ LBL_OFFSET_REGEX = /0*(([0-9])|([1-9][0-9])|([1-9][0-9][0-9])|1000)/
46
+
47
+ # @see tick_lbl_skip
48
+ def tick_lbl_skip=(v) Axlsx::validate_unsigned_int(v); @tick_lbl_skip = v; end
49
+ alias :tickLblSkip= :tick_lbl_skip=
50
+
51
+ # @see tick_mark_skip
52
+ def tick_mark_skip=(v) Axlsx::validate_unsigned_int(v); @tick_mark_skip = v; end
53
+ alias :tickMarkSkip= :tick_mark_skip=
54
+
55
+ # From the docs: This element specifies that this axis is a date or text axis based on the data that is used for the axis labels, not a specific choice.
56
+ def auto=(v) Axlsx::validate_boolean(v); @auto = v; end
57
+
58
+ # specifies how the perpendicular axis is crossed
59
+ # must be one of [:ctr, :l, :r]
60
+ def lbl_algn=(v) RestrictionValidator.validate "#{self.class}.lbl_algn", [:ctr, :l, :r], v; @lbl_algn = v; end
61
+ alias :lblAlgn= :lbl_algn=
62
+
63
+ # The offset of the labels
64
+ # must be between a string between 0 and 1000
65
+ def lbl_offset=(v) RegexValidator.validate "#{self.class}.lbl_offset", LBL_OFFSET_REGEX, v; @lbl_offset = v; end
66
+ alias :lblOffset= :lbl_offset=
67
+
68
+ # Serializes the object
69
+ # @param [String] str
70
+ # @return [String]
71
+ def to_xml_string(str = '')
72
+ str << '<c:catAx>'
73
+ super(str)
74
+ str << '<c:auto val="' << @auto.to_s << '"/>'
75
+ str << '<c:lblAlgn val="' << @lbl_algn.to_s << '"/>'
76
+ str << '<c:lblOffset val="' << @lbl_offset.to_i.to_s << '"/>'
77
+ str << '<c:tickLblSkip val="' << @tick_lbl_skip.to_s << '"/>'
78
+ str << '<c:tickMarkSkip val="' << @tick_mark_skip.to_s << '"/>'
79
+ str << '</c:catAx>'
80
+ end
81
+
82
+ end
83
+
84
+
85
+ end