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,232 @@
1
+ # encoding: UTF-8
2
+ module Axlsx
3
+
4
+ # A Chart is the superclass for specific charts
5
+ # @note Worksheet#add_chart is the recommended way to create charts for your worksheets.
6
+ # @see README for examples
7
+ class Chart
8
+
9
+ include Axlsx::OptionsParser
10
+ # Creates a new chart object
11
+ # @param [GraphicalFrame] frame The frame that holds this chart.
12
+ # @option options [Cell, String] title
13
+ # @option options [Boolean] show_legend
14
+ # @option options [Array|String|Cell] start_at The X, Y coordinates defining the top left corner of the chart.
15
+ # @option options [Array|String|Cell] end_at The X, Y coordinates defining the bottom right corner of the chart.
16
+ def initialize(frame, options={})
17
+ @style = 18
18
+ @view_3D = nil
19
+ @graphic_frame=frame
20
+ @graphic_frame.anchor.drawing.worksheet.workbook.charts << self
21
+ @series = SimpleTypedList.new Series
22
+ @show_legend = true
23
+ @display_blanks_as = :gap
24
+ @series_type = Series
25
+ @title = Title.new
26
+ parse_options options
27
+ start_at(*options[:start_at]) if options[:start_at]
28
+ end_at(*options[:end_at]) if options[:end_at]
29
+ yield self if block_given?
30
+ end
31
+
32
+ # The 3D view properties for the chart
33
+ attr_reader :view_3D
34
+ alias :view3D :view_3D
35
+
36
+ # A reference to the graphic frame that owns this chart
37
+ # @return [GraphicFrame]
38
+ attr_reader :graphic_frame
39
+
40
+ # A collection of series objects that are applied to the chart
41
+ # @return [SimpleTypedList]
42
+ attr_reader :series
43
+
44
+ # The type of series to use for this chart.
45
+ # @return [Series]
46
+ attr_reader :series_type
47
+
48
+ #TODO data labels!
49
+ def d_lbls
50
+ @d_lbls ||= DLbls.new(self.class)
51
+ end
52
+
53
+ # Indicates that colors should be varied by datum
54
+ # @return [Boolean]
55
+ attr_reader :vary_colors
56
+
57
+ # Configures the vary_colors options for this chart
58
+ # @param [Boolean] v The value to set
59
+ def vary_colors=(v) Axlsx::validate_boolean(v); @vary_colors = v; end
60
+
61
+ # The title object for the chart.
62
+ # @return [Title]
63
+ attr_reader :title
64
+
65
+ # The style for the chart.
66
+ # see ECMA Part 1 §21.2.2.196
67
+ # @return [Integer]
68
+ attr_reader :style
69
+
70
+ # Show the legend in the chart
71
+ # @return [Boolean]
72
+ attr_reader :show_legend
73
+
74
+ # How to display blank values
75
+ # Options are
76
+ # * gap: Display nothing
77
+ # * span: Not sure what this does
78
+ # * zero: Display as if the value were zero, not blank
79
+ # @return [Symbol]
80
+ # Default :gap (although this really should vary by chart type and grouping)
81
+ attr_reader :display_blanks_as
82
+
83
+ # The relationship object for this chart.
84
+ # @return [Relationship]
85
+ def relationship
86
+ Relationship.new(self, CHART_R, "../#{pn}")
87
+ end
88
+
89
+ # The index of this chart in the workbooks charts collection
90
+ # @return [Integer]
91
+ def index
92
+ @graphic_frame.anchor.drawing.worksheet.workbook.charts.index(self)
93
+ end
94
+
95
+ # The part name for this chart
96
+ # @return [String]
97
+ def pn
98
+ "#{CHART_PN % (index+1)}"
99
+ end
100
+
101
+ # The title object for the chart.
102
+ # @param [String, Cell] v
103
+ # @return [Title]
104
+ def title=(v)
105
+ DataTypeValidator.validate "#{self.class}.title", [String, Cell], v
106
+ if v.is_a?(String)
107
+ @title.text = v
108
+ elsif v.is_a?(Cell)
109
+ @title.cell = v
110
+ end
111
+ end
112
+
113
+ # Show the legend in the chart
114
+ # @param [Boolean] v
115
+ # @return [Boolean]
116
+ def show_legend=(v) Axlsx::validate_boolean(v); @show_legend = v; end
117
+
118
+ # How to display blank values
119
+ # @see display_blanks_as
120
+ # @param [Symbol] v
121
+ # @return [Symbol]
122
+ def display_blanks_as=(v) Axlsx::validate_display_blanks_as(v); @display_blanks_as = v; end
123
+
124
+ # The style for the chart.
125
+ # see ECMA Part 1 §21.2.2.196
126
+ # @param [Integer] v must be between 1 and 48
127
+ def style=(v) DataTypeValidator.validate "Chart.style", Integer, v, lambda { |arg| arg >= 1 && arg <= 48 }; @style = v; end
128
+
129
+ # backwards compatibility to allow chart.to and chart.from access to anchor markers
130
+ # @note This will be disconinued in version 2.0.0. Please use the end_at method
131
+ def to
132
+ @graphic_frame.anchor.to
133
+ end
134
+
135
+ # backwards compatibility to allow chart.to and chart.from access to anchor markers
136
+ # @note This will be disconinued in version 2.0.0. please use the start_at method
137
+ def from
138
+ @graphic_frame.anchor.from
139
+ end
140
+
141
+ # Adds a new series to the chart's series collection.
142
+ # @return [Series]
143
+ # @see Series
144
+ def add_series(options={})
145
+ @series_type.new(self, options)
146
+ @series.last
147
+ end
148
+
149
+ # Serializes the object
150
+ # @param [String] str
151
+ # @return [String]
152
+ def to_xml_string(str = '')
153
+ str << '<?xml version="1.0" encoding="UTF-8"?>'
154
+ str << '<c:chartSpace xmlns:c="' << XML_NS_C << '" xmlns:a="' << XML_NS_A << '" xmlns:r="' << XML_NS_R << '">'
155
+ str << '<c:date1904 val="' << Axlsx::Workbook.date1904.to_s << '"/>'
156
+ str << '<c:style val="' << style.to_s << '"/>'
157
+ str << '<c:chart>'
158
+ @title.to_xml_string str
159
+ str << '<c:autoTitleDeleted val="' << (@title == nil).to_s << '"/>'
160
+ @view_3D.to_xml_string(str) if @view_3D
161
+ str << '<c:floor><c:thickness val="0"/></c:floor>'
162
+ str << '<c:sideWall><c:thickness val="0"/></c:sideWall>'
163
+ str << '<c:backWall><c:thickness val="0"/></c:backWall>'
164
+ str << '<c:plotArea>'
165
+ str << '<c:layout/>'
166
+ yield str if block_given?
167
+ str << '</c:plotArea>'
168
+ if @show_legend
169
+ str << '<c:legend>'
170
+ str << '<c:legendPos val="r"/>'
171
+ str << '<c:layout/>'
172
+ str << '<c:overlay val="0"/>'
173
+ str << '</c:legend>'
174
+ end
175
+ str << '<c:plotVisOnly val="1"/>'
176
+ str << '<c:dispBlanksAs val="' << display_blanks_as.to_s << '"/>'
177
+ str << '<c:showDLblsOverMax val="1"/>'
178
+ str << '</c:chart>'
179
+ str << '<c:printSettings>'
180
+ str << '<c:headerFooter/>'
181
+ str << '<c:pageMargins b="1.0" l="0.75" r="0.75" t="1.0" header="0.5" footer="0.5"/>'
182
+ str << '<c:pageSetup/>'
183
+ str << '</c:printSettings>'
184
+ str << '</c:chartSpace>'
185
+ end
186
+
187
+ # This is a short cut method to set the anchor start marker position
188
+ # If you need finer granularity in positioning use
189
+ #
190
+ # This helper method acceps a fairly wide range of inputs exampled
191
+ # below
192
+ #
193
+ # @example
194
+ #
195
+ # start_at 0, 5 # The anchor start marker is set to 6th row of
196
+ # the first column
197
+ #
198
+ # start_at [0, 5] # The anchor start marker is set to start on the 6th row
199
+ # of the first column
200
+ #
201
+ # start_at "C1" # The anchor start marker is set to start on the first row
202
+ # of the third column
203
+ #
204
+ # start_at sheet.rows.first.cells.last # The anchor start
205
+ # marker is set to the location of a specific cell.
206
+ #
207
+ # @param [Array|String|Cell] x the column, coordinates, string
208
+ # reference or cell to use in setting the start marker position.
209
+ # @param [Integer] y The row
210
+ # @return [Marker]
211
+ def start_at(x=0, y=0)
212
+ @graphic_frame.anchor.start_at(x, y)
213
+ end
214
+
215
+ # This is a short cut method to set the end anchor position
216
+ # If you need finer granularity in positioning use
217
+ # graphic_frame.anchor.to.colOff / rowOff
218
+ # @param [Integer] x The column - default 10
219
+ # @param [Integer] y The row - default 10
220
+ # @return [Marker]
221
+ # @see start_at
222
+ def end_at(x=10, y=10)
223
+ @graphic_frame.anchor.end_at(x, y)
224
+ end
225
+
226
+ # sets the view_3D object for the chart
227
+ def view_3D=(v) DataTypeValidator.validate "#{self.class}.view_3D", View3D, v; @view_3D = v; end
228
+ alias :view3D= :view_3D=
229
+
230
+ end
231
+
232
+ end
@@ -0,0 +1,90 @@
1
+ module Axlsx
2
+ # There are more elements in the dLbls spec that allow for
3
+ # customizations and formatting. For now, I am just implementing the
4
+ # basics.
5
+ #The DLbls class manages serialization of data labels
6
+ # showLeaderLines and leaderLines are not currently implemented
7
+ class DLbls
8
+
9
+ include Axlsx::Accessors
10
+ include Axlsx::OptionsParser
11
+ # creates a new DLbls object
12
+ def initialize(chart_type, options={})
13
+ raise ArgumentError, 'chart_type must inherit from Chart' unless [Chart, LineChart].include?(chart_type.superclass)
14
+ @chart_type = chart_type
15
+ initialize_defaults
16
+ parse_options options
17
+ end
18
+
19
+ # These attributes are all boolean so I'm doing a bit of a hand
20
+ # waving magic show to set up the attriubte accessors
21
+ # @note
22
+ # not all charts support all methods!
23
+ # Bar3DChart and Line3DChart and ScatterChart do not support d_lbl_pos or show_leader_lines
24
+ #
25
+ boolean_attr_accessor :show_legend_key,
26
+ :show_val,
27
+ :show_cat_name,
28
+ :show_ser_name,
29
+ :show_percent,
30
+ :show_bubble_size,
31
+ :show_leader_lines
32
+
33
+ # Initialize all the values to false as Excel requires them to
34
+ # explicitly be disabled or all will show.
35
+ def initialize_defaults
36
+ [:show_legend_key, :show_val, :show_cat_name,
37
+ :show_ser_name, :show_percent, :show_bubble_size,
38
+ :show_leader_lines].each do |attr|
39
+ self.send("#{attr}=", false)
40
+ end
41
+ end
42
+
43
+ # The chart type that is using this data lables instance.
44
+ # This affects the xml output as not all chart types support the
45
+ # same data label attributes.
46
+ attr_reader :chart_type
47
+
48
+ # The position of the data labels in the chart
49
+ # @see d_lbl_pos= for a list of allowed values
50
+ # @return [Symbol]
51
+ def d_lbl_pos
52
+ return unless @chart_type == Pie3DChart
53
+ @d_lbl_pos ||= :bestFit
54
+ end
55
+
56
+ # @see DLbls#d_lbl_pos
57
+ # Assigns the label postion for this data labels on this chart.
58
+ # Allowed positions are :bestFilt, :b, :ctr, :inBase, :inEnd, :l,
59
+ # :outEnd, :r and :t
60
+ # The default is :bestFit
61
+ # @param [Symbol] label_position the postion you want to use.
62
+ def d_lbl_pos=(label_position)
63
+ return unless @chart_type == Pie3DChart
64
+ Axlsx::RestrictionValidator.validate 'DLbls#d_lbl_pos', [:bestFit, :b, :ctr, :inBase, :inEnd, :l, :outEnd, :r, :t], label_position
65
+ @d_lbl_pos = label_position
66
+ end
67
+
68
+
69
+ # serializes the data labels
70
+ # @return [String]
71
+ def to_xml_string(str = '')
72
+ validate_attributes_for_chart_type
73
+ str << '<c:dLbls>'
74
+ %w(d_lbl_pos show_legend_key show_val show_cat_name show_ser_name show_percent show_bubble_size show_leader_lines).each do |key|
75
+ next unless instance_values.keys.include?(key) && instance_values[key] != nil
76
+ str << "<c:#{Axlsx::camel(key, false)} val='#{instance_values[key]}' />"
77
+ end
78
+ str << '</c:dLbls>'
79
+ end
80
+
81
+ # nills out d_lbl_pos and show_leader_lines as these attributes, while valid in the spec actually chrash excel for any chart type other than pie charts.
82
+ def validate_attributes_for_chart_type
83
+ return if @chart_type == Pie3DChart
84
+ @d_lbl_pos = nil
85
+ @show_leader_lines = nil
86
+ end
87
+
88
+
89
+ end
90
+ end
@@ -0,0 +1,162 @@
1
+ # encoding: UTF-8
2
+ module Axlsx
3
+ require 'axlsx/drawing/d_lbls.rb'
4
+ require 'axlsx/drawing/title.rb'
5
+ require 'axlsx/drawing/series_title.rb'
6
+ require 'axlsx/drawing/series.rb'
7
+ require 'axlsx/drawing/pie_series.rb'
8
+ require 'axlsx/drawing/bar_series.rb'
9
+ require 'axlsx/drawing/line_series.rb'
10
+ require 'axlsx/drawing/scatter_series.rb'
11
+
12
+ require 'axlsx/drawing/scaling.rb'
13
+ require 'axlsx/drawing/axis.rb'
14
+
15
+ require 'axlsx/drawing/str_val.rb'
16
+ require 'axlsx/drawing/num_val.rb'
17
+ require 'axlsx/drawing/str_data.rb'
18
+ require 'axlsx/drawing/num_data.rb'
19
+ require 'axlsx/drawing/num_data_source.rb'
20
+ require 'axlsx/drawing/ax_data_source.rb'
21
+
22
+ require 'axlsx/drawing/ser_axis.rb'
23
+ require 'axlsx/drawing/cat_axis.rb'
24
+ require 'axlsx/drawing/val_axis.rb'
25
+ require 'axlsx/drawing/axes.rb'
26
+
27
+ require 'axlsx/drawing/marker.rb'
28
+
29
+ require 'axlsx/drawing/one_cell_anchor.rb'
30
+ require 'axlsx/drawing/two_cell_anchor.rb'
31
+ require 'axlsx/drawing/graphic_frame.rb'
32
+
33
+ require 'axlsx/drawing/view_3D.rb'
34
+ require 'axlsx/drawing/chart.rb'
35
+ require 'axlsx/drawing/pie_3D_chart.rb'
36
+ require 'axlsx/drawing/bar_3D_chart.rb'
37
+ require 'axlsx/drawing/line_chart.rb'
38
+ require 'axlsx/drawing/line_3D_chart.rb'
39
+ require 'axlsx/drawing/scatter_chart.rb'
40
+
41
+ require 'axlsx/drawing/picture_locking.rb'
42
+ require 'axlsx/drawing/pic.rb'
43
+ require 'axlsx/drawing/hyperlink.rb'
44
+
45
+ require 'axlsx/drawing/vml_drawing.rb'
46
+ require 'axlsx/drawing/vml_shape.rb'
47
+
48
+ # A Drawing is a canvas for charts and images. Each worksheet has a single drawing that manages anchors.
49
+ # The anchors reference the charts or images via graphical frames. This is not a trivial relationship so please do follow the advice in the note.
50
+ # @note The recommended way to manage drawings is to use the Worksheet.add_chart and Worksheet.add_image methods.
51
+ # @see Worksheet#add_chart
52
+ # @see Worksheet#add_image
53
+ # @see Chart
54
+ # see examples/example.rb for an example of how to create a chart.
55
+ class Drawing
56
+
57
+ # The worksheet that owns the drawing
58
+ # @return [Worksheet]
59
+ attr_reader :worksheet
60
+
61
+ # A collection of anchors for this drawing
62
+ # only TwoCellAnchors are supported in this version
63
+ # @return [SimpleTypedList]
64
+ attr_reader :anchors
65
+
66
+ # Creates a new Drawing object
67
+ # @param [Worksheet] worksheet The worksheet that owns this drawing
68
+ def initialize(worksheet)
69
+ DataTypeValidator.validate "Drawing.worksheet", Worksheet, worksheet
70
+ @worksheet = worksheet
71
+ @worksheet.workbook.drawings << self
72
+ @anchors = SimpleTypedList.new [TwoCellAnchor, OneCellAnchor]
73
+ end
74
+
75
+
76
+ # Adds an image to the chart If th end_at option is specified we create a two cell anchor. By default we use a one cell anchor.
77
+ # @note The recommended way to manage images is to use Worksheet.add_image. Please refer to that method for documentation.
78
+ # @see Worksheet#add_image
79
+ # @return [Pic]
80
+ def add_image(options={})
81
+ if options[:end_at]
82
+ TwoCellAnchor.new(self, options).add_pic(options)
83
+ else
84
+ OneCellAnchor.new(self, options)
85
+ end
86
+ @anchors.last.object
87
+ end
88
+
89
+ # Adds a chart to the drawing.
90
+ # @note The recommended way to manage charts is to use Worksheet.add_chart. Please refer to that method for documentation.
91
+ # @see Worksheet#add_chart
92
+ def add_chart(chart_type, options={})
93
+ TwoCellAnchor.new(self, options)
94
+ @anchors.last.add_chart(chart_type, options)
95
+ end
96
+
97
+ # An array of charts that are associated with this drawing's anchors
98
+ # @return [Array]
99
+ def charts
100
+ charts = @anchors.select { |a| a.object.is_a?(GraphicFrame) }
101
+ charts.map { |a| a.object.chart }
102
+ end
103
+
104
+ # An array of hyperlink objects associated with this drawings images
105
+ # @return [Array]
106
+ def hyperlinks
107
+ links = self.images.select { |a| a.hyperlink.is_a?(Hyperlink) }
108
+ links.map { |a| a.hyperlink }
109
+ end
110
+
111
+ # An array of image objects that are associated with this drawing's anchors
112
+ # @return [Array]
113
+ def images
114
+ images = @anchors.select { |a| a.object.is_a?(Pic) }
115
+ images.map { |a| a.object }
116
+ end
117
+
118
+ # The index of this drawing in the owning workbooks's drawings collection.
119
+ # @return [Integer]
120
+ def index
121
+ @worksheet.workbook.drawings.index(self)
122
+ end
123
+
124
+ # The part name for this drawing
125
+ # @return [String]
126
+ def pn
127
+ "#{DRAWING_PN % (index+1)}"
128
+ end
129
+
130
+ # The relational part name for this drawing
131
+ # #NOTE This should be rewritten to return an Axlsx::Relationship object.
132
+ # @return [String]
133
+ def rels_pn
134
+ "#{DRAWING_RELS_PN % (index+1)}"
135
+ end
136
+
137
+ # A list of objects this drawing holds.
138
+ # @return [Array]
139
+ def child_objects
140
+ charts + images + hyperlinks
141
+ end
142
+
143
+ # The drawing's relationships.
144
+ # @return [Relationships]
145
+ def relationships
146
+ r = Relationships.new
147
+ child_objects.each { |child| r << child.relationship }
148
+ r
149
+ end
150
+
151
+ # Serializes the object
152
+ # @param [String] str
153
+ # @return [String]
154
+ def to_xml_string(str = '')
155
+ str << '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'
156
+ str << '<xdr:wsDr xmlns:xdr="' << XML_NS_XDR << '" xmlns:a="' << XML_NS_A << '">'
157
+ anchors.each { |anchor| anchor.to_xml_string(str) }
158
+ str << '</xdr:wsDr>'
159
+ end
160
+
161
+ end
162
+ end