caxlsx 3.2.0 → 3.3.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 (300) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +9 -9
  3. data/.yardopts_guide +18 -18
  4. data/CHANGELOG.md +385 -354
  5. data/LICENSE +21 -21
  6. data/README.md +165 -168
  7. data/Rakefile +29 -29
  8. data/examples/generate.rb +15 -15
  9. data/lib/axlsx/content_type/abstract_content_type.rb +32 -32
  10. data/lib/axlsx/content_type/content_type.rb +26 -26
  11. data/lib/axlsx/content_type/default.rb +25 -25
  12. data/lib/axlsx/content_type/override.rb +25 -25
  13. data/lib/axlsx/doc_props/app.rb +235 -235
  14. data/lib/axlsx/doc_props/core.rb +39 -39
  15. data/lib/axlsx/drawing/area_chart.rb +99 -99
  16. data/lib/axlsx/drawing/area_series.rb +110 -110
  17. data/lib/axlsx/drawing/ax_data_source.rb +26 -26
  18. data/lib/axlsx/drawing/axes.rb +61 -61
  19. data/lib/axlsx/drawing/axis.rb +190 -190
  20. data/lib/axlsx/drawing/bar_3D_chart.rb +148 -148
  21. data/lib/axlsx/drawing/bar_chart.rb +138 -138
  22. data/lib/axlsx/drawing/bar_series.rb +97 -97
  23. data/lib/axlsx/drawing/bubble_chart.rb +59 -59
  24. data/lib/axlsx/drawing/bubble_series.rb +63 -63
  25. data/lib/axlsx/drawing/cat_axis.rb +85 -85
  26. data/lib/axlsx/drawing/chart.rb +299 -276
  27. data/lib/axlsx/drawing/d_lbls.rb +91 -90
  28. data/lib/axlsx/drawing/drawing.rb +167 -167
  29. data/lib/axlsx/drawing/graphic_frame.rb +54 -54
  30. data/lib/axlsx/drawing/hyperlink.rb +100 -100
  31. data/lib/axlsx/drawing/line_3D_chart.rb +68 -68
  32. data/lib/axlsx/drawing/line_chart.rb +99 -99
  33. data/lib/axlsx/drawing/line_series.rb +110 -110
  34. data/lib/axlsx/drawing/marker.rb +84 -84
  35. data/lib/axlsx/drawing/num_data.rb +52 -52
  36. data/lib/axlsx/drawing/num_data_source.rb +62 -62
  37. data/lib/axlsx/drawing/num_val.rb +34 -34
  38. data/lib/axlsx/drawing/one_cell_anchor.rb +99 -99
  39. data/lib/axlsx/drawing/pic.rb +211 -211
  40. data/lib/axlsx/drawing/picture_locking.rb +42 -42
  41. data/lib/axlsx/drawing/pie_3D_chart.rb +47 -47
  42. data/lib/axlsx/drawing/pie_series.rb +74 -74
  43. data/lib/axlsx/drawing/scaling.rb +60 -60
  44. data/lib/axlsx/drawing/scatter_chart.rb +74 -74
  45. data/lib/axlsx/drawing/scatter_series.rb +129 -129
  46. data/lib/axlsx/drawing/ser_axis.rb +45 -45
  47. data/lib/axlsx/drawing/series.rb +69 -69
  48. data/lib/axlsx/drawing/series_title.rb +25 -25
  49. data/lib/axlsx/drawing/str_data.rb +42 -42
  50. data/lib/axlsx/drawing/str_val.rb +34 -34
  51. data/lib/axlsx/drawing/title.rb +107 -97
  52. data/lib/axlsx/drawing/two_cell_anchor.rb +97 -97
  53. data/lib/axlsx/drawing/val_axis.rb +37 -37
  54. data/lib/axlsx/drawing/view_3D.rb +115 -115
  55. data/lib/axlsx/drawing/vml_drawing.rb +42 -42
  56. data/lib/axlsx/drawing/vml_shape.rb +66 -66
  57. data/lib/axlsx/package.rb +398 -388
  58. data/lib/axlsx/rels/relationship.rb +130 -130
  59. data/lib/axlsx/rels/relationships.rb +32 -32
  60. data/lib/axlsx/stylesheet/border.rb +73 -73
  61. data/lib/axlsx/stylesheet/border_pr.rb +71 -71
  62. data/lib/axlsx/stylesheet/cell_alignment.rb +132 -132
  63. data/lib/axlsx/stylesheet/cell_protection.rb +41 -41
  64. data/lib/axlsx/stylesheet/cell_style.rb +72 -72
  65. data/lib/axlsx/stylesheet/color.rb +76 -76
  66. data/lib/axlsx/stylesheet/dxf.rb +79 -79
  67. data/lib/axlsx/stylesheet/fill.rb +35 -35
  68. data/lib/axlsx/stylesheet/font.rb +156 -156
  69. data/lib/axlsx/stylesheet/gradient_fill.rb +103 -103
  70. data/lib/axlsx/stylesheet/gradient_stop.rb +37 -37
  71. data/lib/axlsx/stylesheet/num_fmt.rb +86 -86
  72. data/lib/axlsx/stylesheet/pattern_fill.rb +73 -73
  73. data/lib/axlsx/stylesheet/styles.rb +535 -494
  74. data/lib/axlsx/stylesheet/table_style.rb +54 -54
  75. data/lib/axlsx/stylesheet/table_style_element.rb +77 -77
  76. data/lib/axlsx/stylesheet/table_styles.rb +46 -46
  77. data/lib/axlsx/stylesheet/xf.rb +147 -147
  78. data/lib/axlsx/util/accessors.rb +64 -64
  79. data/lib/axlsx/util/constants.rb +416 -410
  80. data/lib/axlsx/util/mime_type_utils.rb +11 -11
  81. data/lib/axlsx/util/options_parser.rb +16 -16
  82. data/lib/axlsx/util/serialized_attributes.rb +89 -89
  83. data/lib/axlsx/util/simple_typed_list.rb +179 -179
  84. data/lib/axlsx/util/storage.rb +146 -146
  85. data/lib/axlsx/util/validators.rb +312 -312
  86. data/lib/axlsx/util/zip_command.rb +73 -73
  87. data/lib/axlsx/version.rb +5 -5
  88. data/lib/axlsx/workbook/defined_name.rb +128 -128
  89. data/lib/axlsx/workbook/defined_names.rb +21 -21
  90. data/lib/axlsx/workbook/shared_strings_table.rb +77 -77
  91. data/lib/axlsx/workbook/workbook.rb +425 -395
  92. data/lib/axlsx/workbook/workbook_view.rb +80 -80
  93. data/lib/axlsx/workbook/workbook_views.rb +22 -22
  94. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -77
  95. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -94
  96. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +244 -244
  97. data/lib/axlsx/workbook/worksheet/border_creator.rb +76 -0
  98. data/lib/axlsx/workbook/worksheet/break.rb +35 -35
  99. data/lib/axlsx/workbook/worksheet/cell.rb +532 -506
  100. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +164 -164
  101. data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -60
  102. data/lib/axlsx/workbook/worksheet/cfvos.rb +18 -18
  103. data/lib/axlsx/workbook/worksheet/col.rb +145 -145
  104. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -35
  105. data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -110
  106. data/lib/axlsx/workbook/worksheet/cols.rb +23 -23
  107. data/lib/axlsx/workbook/worksheet/comment.rb +91 -91
  108. data/lib/axlsx/workbook/worksheet/comments.rb +82 -82
  109. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -82
  110. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -220
  111. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -25
  112. data/lib/axlsx/workbook/worksheet/data_bar.rb +129 -129
  113. data/lib/axlsx/workbook/worksheet/data_validation.rb +267 -246
  114. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -28
  115. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -30
  116. data/lib/axlsx/workbook/worksheet/dimension.rb +64 -64
  117. data/lib/axlsx/workbook/worksheet/header_footer.rb +52 -52
  118. data/lib/axlsx/workbook/worksheet/icon_set.rb +81 -81
  119. data/lib/axlsx/workbook/worksheet/merged_cells.rb +37 -37
  120. data/lib/axlsx/workbook/worksheet/outline_pr.rb +33 -33
  121. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -97
  122. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -44
  123. data/lib/axlsx/workbook/worksheet/page_setup.rb +240 -240
  124. data/lib/axlsx/workbook/worksheet/pane.rb +139 -139
  125. data/lib/axlsx/workbook/worksheet/pivot_table.rb +335 -296
  126. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -66
  127. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -24
  128. data/lib/axlsx/workbook/worksheet/print_options.rb +39 -39
  129. data/lib/axlsx/workbook/worksheet/protected_range.rb +47 -47
  130. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +37 -37
  131. data/lib/axlsx/workbook/worksheet/rich_text.rb +55 -55
  132. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +250 -250
  133. data/lib/axlsx/workbook/worksheet/row.rb +164 -164
  134. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -33
  135. data/lib/axlsx/workbook/worksheet/selection.rb +101 -101
  136. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -29
  137. data/lib/axlsx/workbook/worksheet/sheet_data.rb +27 -27
  138. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +87 -87
  139. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +118 -118
  140. data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -213
  141. data/lib/axlsx/workbook/worksheet/table.rb +102 -102
  142. data/lib/axlsx/workbook/worksheet/table_style_info.rb +49 -49
  143. data/lib/axlsx/workbook/worksheet/tables.rb +34 -34
  144. data/lib/axlsx/workbook/worksheet/worksheet.rb +829 -786
  145. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -58
  146. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -58
  147. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -74
  148. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -38
  149. data/lib/axlsx.rb +204 -185
  150. data/lib/caxlsx.rb +2 -2
  151. data/lib/schema/dc.xsd +118 -118
  152. data/lib/schema/dcmitype.xsd +51 -51
  153. data/lib/schema/dcterms.xsd +331 -331
  154. data/lib/schema/dml-chartDrawing.xsd +146 -146
  155. data/lib/schema/dml-compatibility.xsd +14 -14
  156. data/lib/schema/dml-lockedCanvas.xsd +11 -11
  157. data/lib/schema/dml-main.xsd +3048 -3048
  158. data/lib/schema/dml-picture.xsd +23 -23
  159. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -185
  160. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -185
  161. data/lib/schema/shared-additionalCharacteristics.xsd +28 -28
  162. data/lib/schema/shared-bibliography.xsd +144 -144
  163. data/lib/schema/shared-commonSimpleTypes.xsd +166 -166
  164. data/lib/schema/shared-customXmlDataProperties.xsd +25 -25
  165. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -18
  166. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -59
  167. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -56
  168. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -195
  169. data/lib/schema/shared-relationshipReference.xsd +25 -25
  170. data/lib/schema/vml-main.xsd +569 -569
  171. data/lib/schema/vml-officeDrawing.xsd +509 -509
  172. data/lib/schema/vml-presentationDrawing.xsd +12 -12
  173. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -108
  174. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -96
  175. data/lib/schema/xml.xsd +116 -116
  176. metadata +5 -252
  177. data/test/benchmark.rb +0 -72
  178. data/test/content_type/tc_content_type.rb +0 -76
  179. data/test/content_type/tc_default.rb +0 -16
  180. data/test/content_type/tc_override.rb +0 -14
  181. data/test/doc_props/tc_app.rb +0 -43
  182. data/test/doc_props/tc_core.rb +0 -42
  183. data/test/drawing/tc_area_chart.rb +0 -39
  184. data/test/drawing/tc_area_series.rb +0 -71
  185. data/test/drawing/tc_axes.rb +0 -8
  186. data/test/drawing/tc_axis.rb +0 -112
  187. data/test/drawing/tc_bar_3D_chart.rb +0 -86
  188. data/test/drawing/tc_bar_chart.rb +0 -86
  189. data/test/drawing/tc_bar_series.rb +0 -46
  190. data/test/drawing/tc_bubble_chart.rb +0 -44
  191. data/test/drawing/tc_bubble_series.rb +0 -21
  192. data/test/drawing/tc_cat_axis.rb +0 -31
  193. data/test/drawing/tc_cat_axis_data.rb +0 -27
  194. data/test/drawing/tc_chart.rb +0 -123
  195. data/test/drawing/tc_d_lbls.rb +0 -57
  196. data/test/drawing/tc_data_source.rb +0 -23
  197. data/test/drawing/tc_drawing.rb +0 -80
  198. data/test/drawing/tc_graphic_frame.rb +0 -27
  199. data/test/drawing/tc_hyperlink.rb +0 -64
  200. data/test/drawing/tc_line_3d_chart.rb +0 -47
  201. data/test/drawing/tc_line_chart.rb +0 -39
  202. data/test/drawing/tc_line_series.rb +0 -71
  203. data/test/drawing/tc_marker.rb +0 -44
  204. data/test/drawing/tc_named_axis_data.rb +0 -27
  205. data/test/drawing/tc_num_data.rb +0 -31
  206. data/test/drawing/tc_num_val.rb +0 -29
  207. data/test/drawing/tc_one_cell_anchor.rb +0 -66
  208. data/test/drawing/tc_pic.rb +0 -103
  209. data/test/drawing/tc_picture_locking.rb +0 -72
  210. data/test/drawing/tc_pie_3D_chart.rb +0 -28
  211. data/test/drawing/tc_pie_series.rb +0 -33
  212. data/test/drawing/tc_scaling.rb +0 -36
  213. data/test/drawing/tc_scatter_chart.rb +0 -48
  214. data/test/drawing/tc_scatter_series.rb +0 -74
  215. data/test/drawing/tc_ser_axis.rb +0 -31
  216. data/test/drawing/tc_series.rb +0 -23
  217. data/test/drawing/tc_series_title.rb +0 -54
  218. data/test/drawing/tc_str_data.rb +0 -18
  219. data/test/drawing/tc_str_val.rb +0 -30
  220. data/test/drawing/tc_title.rb +0 -70
  221. data/test/drawing/tc_two_cell_anchor.rb +0 -36
  222. data/test/drawing/tc_val_axis.rb +0 -24
  223. data/test/drawing/tc_view_3D.rb +0 -54
  224. data/test/drawing/tc_vml_drawing.rb +0 -25
  225. data/test/drawing/tc_vml_shape.rb +0 -106
  226. data/test/fixtures/image1.gif +0 -0
  227. data/test/fixtures/image1.jpeg +0 -0
  228. data/test/fixtures/image1.jpg +0 -0
  229. data/test/fixtures/image1.png +0 -0
  230. data/test/fixtures/image1_fake.jpg +0 -0
  231. data/test/profile.rb +0 -24
  232. data/test/rels/tc_relationship.rb +0 -52
  233. data/test/rels/tc_relationships.rb +0 -37
  234. data/test/stylesheet/tc_border.rb +0 -37
  235. data/test/stylesheet/tc_border_pr.rb +0 -32
  236. data/test/stylesheet/tc_cell_alignment.rb +0 -81
  237. data/test/stylesheet/tc_cell_protection.rb +0 -29
  238. data/test/stylesheet/tc_cell_style.rb +0 -57
  239. data/test/stylesheet/tc_color.rb +0 -43
  240. data/test/stylesheet/tc_dxf.rb +0 -81
  241. data/test/stylesheet/tc_fill.rb +0 -18
  242. data/test/stylesheet/tc_font.rb +0 -133
  243. data/test/stylesheet/tc_gradient_fill.rb +0 -72
  244. data/test/stylesheet/tc_gradient_stop.rb +0 -31
  245. data/test/stylesheet/tc_num_fmt.rb +0 -30
  246. data/test/stylesheet/tc_pattern_fill.rb +0 -43
  247. data/test/stylesheet/tc_styles.rb +0 -309
  248. data/test/stylesheet/tc_table_style.rb +0 -44
  249. data/test/stylesheet/tc_table_style_element.rb +0 -45
  250. data/test/stylesheet/tc_table_styles.rb +0 -29
  251. data/test/stylesheet/tc_xf.rb +0 -120
  252. data/test/tc_axlsx.rb +0 -109
  253. data/test/tc_helper.rb +0 -10
  254. data/test/tc_package.rb +0 -317
  255. data/test/util/tc_mime_type_utils.rb +0 -13
  256. data/test/util/tc_serialized_attributes.rb +0 -19
  257. data/test/util/tc_simple_typed_list.rb +0 -77
  258. data/test/util/tc_validators.rb +0 -210
  259. data/test/workbook/tc_defined_name.rb +0 -49
  260. data/test/workbook/tc_shared_strings_table.rb +0 -59
  261. data/test/workbook/tc_workbook.rb +0 -165
  262. data/test/workbook/tc_workbook_view.rb +0 -50
  263. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +0 -38
  264. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +0 -76
  265. data/test/workbook/worksheet/auto_filter/tc_filters.rb +0 -50
  266. data/test/workbook/worksheet/tc_break.rb +0 -49
  267. data/test/workbook/worksheet/tc_cell.rb +0 -465
  268. data/test/workbook/worksheet/tc_cfvo.rb +0 -31
  269. data/test/workbook/worksheet/tc_col.rb +0 -93
  270. data/test/workbook/worksheet/tc_color_scale.rb +0 -58
  271. data/test/workbook/worksheet/tc_comment.rb +0 -72
  272. data/test/workbook/worksheet/tc_comments.rb +0 -57
  273. data/test/workbook/worksheet/tc_conditional_formatting.rb +0 -224
  274. data/test/workbook/worksheet/tc_data_bar.rb +0 -46
  275. data/test/workbook/worksheet/tc_data_validation.rb +0 -265
  276. data/test/workbook/worksheet/tc_date_time_converter.rb +0 -124
  277. data/test/workbook/worksheet/tc_header_footer.rb +0 -151
  278. data/test/workbook/worksheet/tc_icon_set.rb +0 -45
  279. data/test/workbook/worksheet/tc_outline_pr.rb +0 -19
  280. data/test/workbook/worksheet/tc_page_margins.rb +0 -97
  281. data/test/workbook/worksheet/tc_page_set_up_pr.rb +0 -15
  282. data/test/workbook/worksheet/tc_page_setup.rb +0 -143
  283. data/test/workbook/worksheet/tc_pane.rb +0 -54
  284. data/test/workbook/worksheet/tc_pivot_table.rb +0 -180
  285. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +0 -62
  286. data/test/workbook/worksheet/tc_print_options.rb +0 -72
  287. data/test/workbook/worksheet/tc_protected_range.rb +0 -17
  288. data/test/workbook/worksheet/tc_rich_text.rb +0 -44
  289. data/test/workbook/worksheet/tc_rich_text_run.rb +0 -173
  290. data/test/workbook/worksheet/tc_row.rb +0 -160
  291. data/test/workbook/worksheet/tc_selection.rb +0 -55
  292. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +0 -18
  293. data/test/workbook/worksheet/tc_sheet_format_pr.rb +0 -88
  294. data/test/workbook/worksheet/tc_sheet_pr.rb +0 -49
  295. data/test/workbook/worksheet/tc_sheet_protection.rb +0 -117
  296. data/test/workbook/worksheet/tc_sheet_view.rb +0 -214
  297. data/test/workbook/worksheet/tc_table.rb +0 -77
  298. data/test/workbook/worksheet/tc_table_style_info.rb +0 -53
  299. data/test/workbook/worksheet/tc_worksheet.rb +0 -632
  300. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +0 -55
@@ -1,276 +1,299 @@
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 [Symbol] legend_position
15
- # @option options [Array|String|Cell] start_at The X, Y coordinates defining the top left corner of the chart.
16
- # @option options [Array|String|Cell] end_at The X, Y coordinates defining the bottom right corner of the chart.
17
- def initialize(frame, options={})
18
- @style = 18
19
- @view_3D = nil
20
- @graphic_frame=frame
21
- @graphic_frame.anchor.drawing.worksheet.workbook.charts << self
22
- @series = SimpleTypedList.new Series
23
- @show_legend = true
24
- @legend_position = :r
25
- @display_blanks_as = :gap
26
- @series_type = Series
27
- @title = Title.new
28
- @bg_color = nil
29
- parse_options options
30
- start_at(*options[:start_at]) if options[:start_at]
31
- end_at(*options[:end_at]) if options[:end_at]
32
- yield self if block_given?
33
- end
34
-
35
- # The 3D view properties for the chart
36
- attr_reader :view_3D
37
- alias :view3D :view_3D
38
-
39
- # A reference to the graphic frame that owns this chart
40
- # @return [GraphicFrame]
41
- attr_reader :graphic_frame
42
-
43
- # A collection of series objects that are applied to the chart
44
- # @return [SimpleTypedList]
45
- attr_reader :series
46
-
47
- # The type of series to use for this chart.
48
- # @return [Series]
49
- attr_reader :series_type
50
-
51
- #TODO data labels!
52
- def d_lbls
53
- @d_lbls ||= DLbls.new(self.class)
54
- end
55
-
56
- # Indicates that colors should be varied by datum
57
- # @return [Boolean]
58
- attr_reader :vary_colors
59
-
60
- # Configures the vary_colors options for this chart
61
- # @param [Boolean] v The value to set
62
- def vary_colors=(v) Axlsx::validate_boolean(v); @vary_colors = v; end
63
-
64
- # The title object for the chart.
65
- # @return [Title]
66
- attr_reader :title
67
-
68
- # The style for the chart.
69
- # see ECMA Part 1 §21.2.2.196
70
- # @return [Integer]
71
- attr_reader :style
72
-
73
- # Show the legend in the chart
74
- # @return [Boolean]
75
- attr_reader :show_legend
76
-
77
- # Set the location of the chart's legend
78
- # @return [Symbol] The position of this legend
79
- # @note
80
- # The following are allowed
81
- # :b
82
- # :l
83
- # :r
84
- # :t
85
- # :tr
86
- attr_reader :legend_position
87
-
88
- # How to display blank values
89
- # Options are
90
- # * gap: Display nothing
91
- # * span: Not sure what this does
92
- # * zero: Display as if the value were zero, not blank
93
- # @return [Symbol]
94
- # Default :gap (although this really should vary by chart type and grouping)
95
- attr_reader :display_blanks_as
96
-
97
- # Background color for the chart
98
- # @return [String]
99
- attr_reader :bg_color
100
-
101
- # The relationship object for this chart.
102
- # @return [Relationship]
103
- def relationship
104
- Relationship.new(self, CHART_R, "../#{pn}")
105
- end
106
-
107
- # The index of this chart in the workbooks charts collection
108
- # @return [Integer]
109
- def index
110
- @graphic_frame.anchor.drawing.worksheet.workbook.charts.index(self)
111
- end
112
-
113
- # The part name for this chart
114
- # @return [String]
115
- def pn
116
- "#{CHART_PN % (index+1)}"
117
- end
118
-
119
- # The title object for the chart.
120
- # @param [String, Cell] v
121
- # @return [Title]
122
- def title=(v)
123
- DataTypeValidator.validate "#{self.class}.title", [String, Cell], v
124
- if v.is_a?(String)
125
- @title.text = v
126
- elsif v.is_a?(Cell)
127
- @title.cell = v
128
- end
129
- end
130
-
131
- # The size of the Title object of the chart.
132
- # @param [String] v The size for the title object
133
- # @see Title
134
- def title_size=(v)
135
- @title.text_size = v unless v.to_s.empty?
136
- end
137
-
138
- # Show the legend in the chart
139
- # @param [Boolean] v
140
- # @return [Boolean]
141
- def show_legend=(v) Axlsx::validate_boolean(v); @show_legend = v; end
142
-
143
- # How to display blank values
144
- # @see display_blanks_as
145
- # @param [Symbol] v
146
- # @return [Symbol]
147
- def display_blanks_as=(v) Axlsx::validate_display_blanks_as(v); @display_blanks_as = v; end
148
-
149
- # The style for the chart.
150
- # see ECMA Part 1 §21.2.2.196
151
- # @param [Integer] v must be between 1 and 48
152
- def style=(v) DataTypeValidator.validate "Chart.style", Integer, v, lambda { |arg| arg >= 1 && arg <= 48 }; @style = v; end
153
-
154
- # @see legend_position
155
- def legend_position=(v) RestrictionValidator.validate "Chart.legend_position", [:b, :l, :r, :t, :tr], v; @legend_position = v; end
156
-
157
- # backwards compatibility to allow chart.to and chart.from access to anchor markers
158
- # @note This will be disconinued in version 2.0.0. Please use the end_at method
159
- def to
160
- @graphic_frame.anchor.to
161
- end
162
-
163
- # backwards compatibility to allow chart.to and chart.from access to anchor markers
164
- # @note This will be disconinued in version 2.0.0. please use the start_at method
165
- def from
166
- @graphic_frame.anchor.from
167
- end
168
-
169
- # Adds a new series to the chart's series collection.
170
- # @return [Series]
171
- # @see Series
172
- def add_series(options={})
173
- @series_type.new(self, options)
174
- @series.last
175
- end
176
-
177
- # Assigns a background color to chart area
178
- def bg_color=(v)
179
- DataTypeValidator.validate(:color, Color, Color.new(:rgb => v))
180
- @bg_color = v
181
- end
182
-
183
- # Serializes the object
184
- # @param [String] str
185
- # @return [String]
186
- def to_xml_string(str = '')
187
- str << '<?xml version="1.0" encoding="UTF-8"?>'
188
- str << ('<c:chartSpace xmlns:c="' << XML_NS_C << '" xmlns:a="' << XML_NS_A << '" xmlns:r="' << XML_NS_R << '">')
189
- str << ('<c:date1904 val="' << Axlsx::Workbook.date1904.to_s << '"/>')
190
- str << ('<c:style val="' << style.to_s << '"/>')
191
- str << '<c:chart>'
192
- @title.to_xml_string str
193
- str << ('<c:autoTitleDeleted val="' << (@title == nil).to_s << '"/>')
194
- @view_3D.to_xml_string(str) if @view_3D
195
- str << '<c:floor><c:thickness val="0"/></c:floor>'
196
- str << '<c:sideWall><c:thickness val="0"/></c:sideWall>'
197
- str << '<c:backWall><c:thickness val="0"/></c:backWall>'
198
- str << '<c:plotArea>'
199
- str << '<c:layout/>'
200
- yield if block_given?
201
- str << '</c:plotArea>'
202
- if @show_legend
203
- str << '<c:legend>'
204
- str << ('<c:legendPos val="' << @legend_position.to_s << '"/>')
205
- str << '<c:layout/>'
206
- str << '<c:overlay val="0"/>'
207
- str << '</c:legend>'
208
- end
209
- str << '<c:plotVisOnly val="1"/>'
210
- str << ('<c:dispBlanksAs val="' << display_blanks_as.to_s << '"/>')
211
- str << '<c:showDLblsOverMax val="1"/>'
212
- str << '</c:chart>'
213
- if bg_color
214
- str << '<c:spPr>'
215
- str << '<a:solidFill>'
216
- str << '<a:srgbClr val="' << bg_color << '"/>'
217
- str << '</a:solidFill>'
218
- str << '<a:ln>'
219
- str << '<a:noFill/>'
220
- str << '</a:ln>'
221
- str << '</c:spPr>'
222
- end
223
- str << '<c:printSettings>'
224
- str << '<c:headerFooter/>'
225
- str << '<c:pageMargins b="1.0" l="0.75" r="0.75" t="1.0" header="0.5" footer="0.5"/>'
226
- str << '<c:pageSetup/>'
227
- str << '</c:printSettings>'
228
- str << '</c:chartSpace>'
229
- end
230
-
231
- # This is a short cut method to set the anchor start marker position
232
- # If you need finer granularity in positioning use
233
- #
234
- # This helper method acceps a fairly wide range of inputs exampled
235
- # below
236
- #
237
- # @example
238
- #
239
- # start_at 0, 5 # The anchor start marker is set to 6th row of
240
- # the first column
241
- #
242
- # start_at [0, 5] # The anchor start marker is set to start on the 6th row
243
- # of the first column
244
- #
245
- # start_at "C1" # The anchor start marker is set to start on the first row
246
- # of the third column
247
- #
248
- # start_at sheet.rows.first.cells.last # The anchor start
249
- # marker is set to the location of a specific cell.
250
- #
251
- # @param [Array|String|Cell] x the column, coordinates, string
252
- # reference or cell to use in setting the start marker position.
253
- # @param [Integer] y The row
254
- # @return [Marker]
255
- def start_at(x=0, y=0)
256
- @graphic_frame.anchor.start_at(x, y)
257
- end
258
-
259
- # This is a short cut method to set the end anchor position
260
- # If you need finer granularity in positioning use
261
- # graphic_frame.anchor.to.colOff / rowOff
262
- # @param [Integer] x The column - default 10
263
- # @param [Integer] y The row - default 10
264
- # @return [Marker]
265
- # @see start_at
266
- def end_at(x=10, y=10)
267
- @graphic_frame.anchor.end_at(x, y)
268
- end
269
-
270
- # sets the view_3D object for the chart
271
- def view_3D=(v) DataTypeValidator.validate "#{self.class}.view_3D", View3D, v; @view_3D = v; end
272
- alias :view3D= :view_3D=
273
-
274
- end
275
-
276
- end
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 [Symbol] legend_position
15
+ # @option options [Array|String|Cell] start_at The X, Y coordinates defining the top left corner of the chart.
16
+ # @option options [Array|String|Cell] end_at The X, Y coordinates defining the bottom right corner of the chart.
17
+ # @option options [Boolean] plot_visible_only (true) Whether only data from visible cells should be plotted.
18
+ # @option options [Boolean] rounded_corners (true) Whether the chart area shall have rounded corners.
19
+ def initialize(frame, options={})
20
+ @style = 18
21
+ @view_3D = nil
22
+ @graphic_frame=frame
23
+ @graphic_frame.anchor.drawing.worksheet.workbook.charts << self
24
+ @series = SimpleTypedList.new Series
25
+ @show_legend = true
26
+ @legend_position = :r
27
+ @display_blanks_as = :gap
28
+ @series_type = Series
29
+ @title = Title.new
30
+ @bg_color = nil
31
+ @plot_visible_only = true
32
+ @rounded_corners = true
33
+ parse_options options
34
+ start_at(*options[:start_at]) if options[:start_at]
35
+ end_at(*options[:end_at]) if options[:end_at]
36
+ yield self if block_given?
37
+ end
38
+
39
+ # The 3D view properties for the chart
40
+ attr_reader :view_3D
41
+ alias :view3D :view_3D
42
+
43
+ # A reference to the graphic frame that owns this chart
44
+ # @return [GraphicFrame]
45
+ attr_reader :graphic_frame
46
+
47
+ # A collection of series objects that are applied to the chart
48
+ # @return [SimpleTypedList]
49
+ attr_reader :series
50
+
51
+ # The type of series to use for this chart.
52
+ # @return [Series]
53
+ attr_reader :series_type
54
+
55
+ #TODO data labels!
56
+ def d_lbls
57
+ @d_lbls ||= DLbls.new(self.class)
58
+ end
59
+
60
+ # Indicates that colors should be varied by datum
61
+ # @return [Boolean]
62
+ attr_reader :vary_colors
63
+
64
+ # Configures the vary_colors options for this chart
65
+ # @param [Boolean] v The value to set
66
+ def vary_colors=(v) Axlsx::validate_boolean(v); @vary_colors = v; end
67
+
68
+ # The title object for the chart.
69
+ # @return [Title]
70
+ attr_reader :title
71
+
72
+ # The style for the chart.
73
+ # see ECMA Part 1 §21.2.2.196
74
+ # @return [Integer]
75
+ attr_reader :style
76
+
77
+ # Show the legend in the chart
78
+ # @return [Boolean]
79
+ attr_reader :show_legend
80
+
81
+ # Set the location of the chart's legend
82
+ # @return [Symbol] The position of this legend
83
+ # @note
84
+ # The following are allowed
85
+ # :b
86
+ # :l
87
+ # :r
88
+ # :t
89
+ # :tr
90
+ attr_reader :legend_position
91
+
92
+ # How to display blank values
93
+ # Options are
94
+ # * gap: Display nothing
95
+ # * span: Not sure what this does
96
+ # * zero: Display as if the value were zero, not blank
97
+ # @return [Symbol]
98
+ # Default :gap (although this really should vary by chart type and grouping)
99
+ attr_reader :display_blanks_as
100
+
101
+ # Background color for the chart
102
+ # @return [String]
103
+ attr_reader :bg_color
104
+
105
+ # Whether only data from visible cells should be plotted.
106
+ # @return [Boolean]
107
+ attr_reader :plot_visible_only
108
+
109
+ # Whether the chart area shall have rounded corners.
110
+ # @return [Boolean]
111
+ attr_reader :rounded_corners
112
+
113
+ # The relationship object for this chart.
114
+ # @return [Relationship]
115
+ def relationship
116
+ Relationship.new(self, CHART_R, "../#{pn}")
117
+ end
118
+
119
+ # The index of this chart in the workbooks charts collection
120
+ # @return [Integer]
121
+ def index
122
+ @graphic_frame.anchor.drawing.worksheet.workbook.charts.index(self)
123
+ end
124
+
125
+ # The part name for this chart
126
+ # @return [String]
127
+ def pn
128
+ "#{CHART_PN % (index+1)}"
129
+ end
130
+
131
+ # The title object for the chart.
132
+ # @param [String, Cell] v
133
+ # @return [Title]
134
+ def title=(v)
135
+ DataTypeValidator.validate "#{self.class}.title", [String, Cell], v
136
+ if v.is_a?(String)
137
+ @title.text = v
138
+ elsif v.is_a?(Cell)
139
+ @title.cell = v
140
+ end
141
+ end
142
+
143
+ # The size of the Title object of the chart.
144
+ # @param [String] v The size for the title object
145
+ # @see Title
146
+ def title_size=(v)
147
+ @title.text_size = v unless v.to_s.empty?
148
+ end
149
+
150
+ # Show the legend in the chart
151
+ # @param [Boolean] v
152
+ # @return [Boolean]
153
+ def show_legend=(v) Axlsx::validate_boolean(v); @show_legend = v; end
154
+
155
+ # How to display blank values
156
+ # @see display_blanks_as
157
+ # @param [Symbol] v
158
+ # @return [Symbol]
159
+ def display_blanks_as=(v) Axlsx::validate_display_blanks_as(v); @display_blanks_as = v; end
160
+
161
+ # The style for the chart.
162
+ # see ECMA Part 1 §21.2.2.196
163
+ # @param [Integer] v must be between 1 and 48
164
+ def style=(v) DataTypeValidator.validate "Chart.style", Integer, v, lambda { |arg| arg >= 1 && arg <= 48 }; @style = v; end
165
+
166
+ # @see legend_position
167
+ def legend_position=(v) RestrictionValidator.validate "Chart.legend_position", [:b, :l, :r, :t, :tr], v; @legend_position = v; end
168
+
169
+ # backwards compatibility to allow chart.to and chart.from access to anchor markers
170
+ # @note This will be disconinued in version 2.0.0. Please use the end_at method
171
+ def to
172
+ @graphic_frame.anchor.to
173
+ end
174
+
175
+ # backwards compatibility to allow chart.to and chart.from access to anchor markers
176
+ # @note This will be disconinued in version 2.0.0. please use the start_at method
177
+ def from
178
+ @graphic_frame.anchor.from
179
+ end
180
+
181
+ # Adds a new series to the chart's series collection.
182
+ # @return [Series]
183
+ # @see Series
184
+ def add_series(options={})
185
+ @series_type.new(self, options)
186
+ @series.last
187
+ end
188
+
189
+ # Assigns a background color to chart area
190
+ def bg_color=(v)
191
+ DataTypeValidator.validate(:color, Color, Color.new(:rgb => v))
192
+ @bg_color = v
193
+ end
194
+
195
+ # Whether only data from visible cells should be plotted.
196
+ # @param [Boolean] v
197
+ # @return [Boolean]
198
+ def plot_visible_only=(v) Axlsx::validate_boolean(v); @plot_visible_only = v; end
199
+
200
+ # Whether the chart area shall have rounded corners.
201
+ # @param [Boolean] v
202
+ # @return [Boolean]
203
+ def rounded_corners=(v) Axlsx::validate_boolean(v); @rounded_corners = v; end
204
+
205
+ # Serializes the object
206
+ # @param [String] str
207
+ # @return [String]
208
+ def to_xml_string(str = '')
209
+ str << '<?xml version="1.0" encoding="UTF-8"?>'
210
+ str << ('<c:chartSpace xmlns:c="' << XML_NS_C << '" xmlns:a="' << XML_NS_A << '" xmlns:r="' << XML_NS_R << '">')
211
+ str << ('<c:date1904 val="' << Axlsx::Workbook.date1904.to_s << '"/>')
212
+ str << ('<c:roundedCorners val="' << rounded_corners.to_s << '"/>')
213
+ str << ('<c:style val="' << style.to_s << '"/>')
214
+ str << '<c:chart>'
215
+ @title.to_xml_string(str) unless @title.empty?
216
+ str << ('<c:autoTitleDeleted val="' << (@title == nil).to_s << '"/>')
217
+ @view_3D.to_xml_string(str) if @view_3D
218
+ str << '<c:floor><c:thickness val="0"/></c:floor>'
219
+ str << '<c:sideWall><c:thickness val="0"/></c:sideWall>'
220
+ str << '<c:backWall><c:thickness val="0"/></c:backWall>'
221
+ str << '<c:plotArea>'
222
+ str << '<c:layout/>'
223
+ yield if block_given?
224
+ str << '</c:plotArea>'
225
+ if @show_legend
226
+ str << '<c:legend>'
227
+ str << ('<c:legendPos val="' << @legend_position.to_s << '"/>')
228
+ str << '<c:layout/>'
229
+ str << '<c:overlay val="0"/>'
230
+ str << '</c:legend>'
231
+ end
232
+ str << ('<c:plotVisOnly val="' << @plot_visible_only.to_s << '"/>')
233
+ str << ('<c:dispBlanksAs val="' << display_blanks_as.to_s << '"/>')
234
+ str << '<c:showDLblsOverMax val="1"/>'
235
+ str << '</c:chart>'
236
+ if bg_color
237
+ str << '<c:spPr>'
238
+ str << '<a:solidFill>'
239
+ str << '<a:srgbClr val="' << bg_color << '"/>'
240
+ str << '</a:solidFill>'
241
+ str << '<a:ln>'
242
+ str << '<a:noFill/>'
243
+ str << '</a:ln>'
244
+ str << '</c:spPr>'
245
+ end
246
+ str << '<c:printSettings>'
247
+ str << '<c:headerFooter/>'
248
+ str << '<c:pageMargins b="1.0" l="0.75" r="0.75" t="1.0" header="0.5" footer="0.5"/>'
249
+ str << '<c:pageSetup/>'
250
+ str << '</c:printSettings>'
251
+ str << '</c:chartSpace>'
252
+ end
253
+
254
+ # This is a short cut method to set the anchor start marker position
255
+ # If you need finer granularity in positioning use
256
+ #
257
+ # This helper method acceps a fairly wide range of inputs exampled
258
+ # below
259
+ #
260
+ # @example
261
+ #
262
+ # start_at 0, 5 # The anchor start marker is set to 6th row of
263
+ # the first column
264
+ #
265
+ # start_at [0, 5] # The anchor start marker is set to start on the 6th row
266
+ # of the first column
267
+ #
268
+ # start_at "C1" # The anchor start marker is set to start on the first row
269
+ # of the third column
270
+ #
271
+ # start_at sheet.rows.first.cells.last # The anchor start
272
+ # marker is set to the location of a specific cell.
273
+ #
274
+ # @param [Array|String|Cell] x the column, coordinates, string
275
+ # reference or cell to use in setting the start marker position.
276
+ # @param [Integer] y The row
277
+ # @return [Marker]
278
+ def start_at(x=0, y=0)
279
+ @graphic_frame.anchor.start_at(x, y)
280
+ end
281
+
282
+ # This is a short cut method to set the end anchor position
283
+ # If you need finer granularity in positioning use
284
+ # graphic_frame.anchor.to.colOff / rowOff
285
+ # @param [Integer] x The column - default 10
286
+ # @param [Integer] y The row - default 10
287
+ # @return [Marker]
288
+ # @see start_at
289
+ def end_at(x=10, y=10)
290
+ @graphic_frame.anchor.end_at(x, y)
291
+ end
292
+
293
+ # sets the view_3D object for the chart
294
+ def view_3D=(v) DataTypeValidator.validate "#{self.class}.view_3D", View3D, v; @view_3D = v; end
295
+ alias :view3D= :view_3D=
296
+
297
+ end
298
+
299
+ end