caxlsx 3.0.4 → 3.2.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 (294) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +9 -9
  3. data/.yardopts_guide +18 -18
  4. data/CHANGELOG.md +354 -334
  5. data/LICENSE +21 -21
  6. data/README.md +168 -170
  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 -151
  21. data/lib/axlsx/drawing/bar_chart.rb +138 -143
  22. data/lib/axlsx/drawing/bar_series.rb +97 -80
  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 +276 -276
  27. data/lib/axlsx/drawing/d_lbls.rb +90 -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 -98
  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 +97 -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 +388 -363
  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 -71
  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 +494 -420
  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 +410 -401
  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 +395 -370
  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/break.rb +35 -35
  98. data/lib/axlsx/workbook/worksheet/cell.rb +506 -505
  99. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +164 -164
  100. data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -60
  101. data/lib/axlsx/workbook/worksheet/cfvos.rb +18 -18
  102. data/lib/axlsx/workbook/worksheet/col.rb +145 -145
  103. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -35
  104. data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -110
  105. data/lib/axlsx/workbook/worksheet/cols.rb +23 -23
  106. data/lib/axlsx/workbook/worksheet/comment.rb +91 -91
  107. data/lib/axlsx/workbook/worksheet/comments.rb +82 -82
  108. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -82
  109. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -220
  110. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -25
  111. data/lib/axlsx/workbook/worksheet/data_bar.rb +129 -129
  112. data/lib/axlsx/workbook/worksheet/data_validation.rb +246 -246
  113. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -28
  114. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -30
  115. data/lib/axlsx/workbook/worksheet/dimension.rb +64 -64
  116. data/lib/axlsx/workbook/worksheet/header_footer.rb +52 -52
  117. data/lib/axlsx/workbook/worksheet/icon_set.rb +81 -81
  118. data/lib/axlsx/workbook/worksheet/merged_cells.rb +37 -37
  119. data/lib/axlsx/workbook/worksheet/outline_pr.rb +33 -33
  120. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -97
  121. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -44
  122. data/lib/axlsx/workbook/worksheet/page_setup.rb +240 -240
  123. data/lib/axlsx/workbook/worksheet/pane.rb +139 -139
  124. data/lib/axlsx/workbook/worksheet/pivot_table.rb +296 -289
  125. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -66
  126. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -24
  127. data/lib/axlsx/workbook/worksheet/print_options.rb +39 -39
  128. data/lib/axlsx/workbook/worksheet/protected_range.rb +47 -47
  129. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +37 -37
  130. data/lib/axlsx/workbook/worksheet/rich_text.rb +55 -55
  131. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +250 -250
  132. data/lib/axlsx/workbook/worksheet/row.rb +164 -162
  133. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -33
  134. data/lib/axlsx/workbook/worksheet/selection.rb +101 -101
  135. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -29
  136. data/lib/axlsx/workbook/worksheet/sheet_data.rb +27 -27
  137. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +87 -87
  138. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +118 -118
  139. data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -213
  140. data/lib/axlsx/workbook/worksheet/table.rb +102 -102
  141. data/lib/axlsx/workbook/worksheet/table_style_info.rb +49 -49
  142. data/lib/axlsx/workbook/worksheet/tables.rb +34 -34
  143. data/lib/axlsx/workbook/worksheet/worksheet.rb +786 -764
  144. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -58
  145. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -58
  146. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -74
  147. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -38
  148. data/lib/axlsx.rb +185 -170
  149. data/lib/caxlsx.rb +2 -2
  150. data/lib/schema/dc.xsd +118 -118
  151. data/lib/schema/dcmitype.xsd +51 -51
  152. data/lib/schema/dcterms.xsd +331 -331
  153. data/lib/schema/dml-chartDrawing.xsd +146 -146
  154. data/lib/schema/dml-compatibility.xsd +14 -14
  155. data/lib/schema/dml-lockedCanvas.xsd +11 -11
  156. data/lib/schema/dml-main.xsd +3048 -3048
  157. data/lib/schema/dml-picture.xsd +23 -23
  158. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -185
  159. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -185
  160. data/lib/schema/shared-additionalCharacteristics.xsd +28 -28
  161. data/lib/schema/shared-bibliography.xsd +144 -144
  162. data/lib/schema/shared-commonSimpleTypes.xsd +166 -166
  163. data/lib/schema/shared-customXmlDataProperties.xsd +25 -25
  164. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -18
  165. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -59
  166. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -56
  167. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -195
  168. data/lib/schema/shared-relationshipReference.xsd +25 -25
  169. data/lib/schema/vml-main.xsd +569 -569
  170. data/lib/schema/vml-officeDrawing.xsd +509 -509
  171. data/lib/schema/vml-presentationDrawing.xsd +12 -12
  172. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -108
  173. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -96
  174. data/lib/schema/xml.xsd +116 -116
  175. data/test/benchmark.rb +72 -72
  176. data/test/content_type/tc_content_type.rb +76 -76
  177. data/test/content_type/tc_default.rb +16 -16
  178. data/test/content_type/tc_override.rb +14 -14
  179. data/test/doc_props/tc_app.rb +43 -43
  180. data/test/doc_props/tc_core.rb +42 -42
  181. data/test/drawing/tc_area_chart.rb +39 -39
  182. data/test/drawing/tc_area_series.rb +71 -71
  183. data/test/drawing/tc_axes.rb +7 -7
  184. data/test/drawing/tc_axis.rb +112 -112
  185. data/test/drawing/tc_bar_3D_chart.rb +86 -71
  186. data/test/drawing/tc_bar_chart.rb +86 -71
  187. data/test/drawing/tc_bar_series.rb +46 -37
  188. data/test/drawing/tc_bubble_chart.rb +44 -44
  189. data/test/drawing/tc_bubble_series.rb +21 -21
  190. data/test/drawing/tc_cat_axis.rb +31 -31
  191. data/test/drawing/tc_cat_axis_data.rb +27 -27
  192. data/test/drawing/tc_chart.rb +123 -123
  193. data/test/drawing/tc_d_lbls.rb +57 -57
  194. data/test/drawing/tc_data_source.rb +23 -23
  195. data/test/drawing/tc_drawing.rb +80 -80
  196. data/test/drawing/tc_graphic_frame.rb +27 -27
  197. data/test/drawing/tc_hyperlink.rb +64 -64
  198. data/test/drawing/tc_line_3d_chart.rb +47 -47
  199. data/test/drawing/tc_line_chart.rb +39 -39
  200. data/test/drawing/tc_line_series.rb +71 -71
  201. data/test/drawing/tc_marker.rb +44 -44
  202. data/test/drawing/tc_named_axis_data.rb +27 -27
  203. data/test/drawing/tc_num_data.rb +31 -31
  204. data/test/drawing/tc_num_val.rb +29 -29
  205. data/test/drawing/tc_one_cell_anchor.rb +66 -66
  206. data/test/drawing/tc_pic.rb +103 -103
  207. data/test/drawing/tc_picture_locking.rb +72 -72
  208. data/test/drawing/tc_pie_3D_chart.rb +28 -28
  209. data/test/drawing/tc_pie_series.rb +33 -33
  210. data/test/drawing/tc_scaling.rb +36 -36
  211. data/test/drawing/tc_scatter_chart.rb +48 -48
  212. data/test/drawing/tc_scatter_series.rb +74 -56
  213. data/test/drawing/tc_ser_axis.rb +31 -31
  214. data/test/drawing/tc_series.rb +23 -23
  215. data/test/drawing/tc_series_title.rb +54 -54
  216. data/test/drawing/tc_str_data.rb +18 -18
  217. data/test/drawing/tc_str_val.rb +30 -30
  218. data/test/drawing/tc_title.rb +70 -70
  219. data/test/drawing/tc_two_cell_anchor.rb +36 -36
  220. data/test/drawing/tc_val_axis.rb +24 -24
  221. data/test/drawing/tc_view_3D.rb +54 -54
  222. data/test/drawing/tc_vml_drawing.rb +25 -25
  223. data/test/drawing/tc_vml_shape.rb +106 -106
  224. data/test/profile.rb +24 -24
  225. data/test/rels/tc_relationship.rb +52 -52
  226. data/test/rels/tc_relationships.rb +37 -37
  227. data/test/stylesheet/tc_border.rb +37 -37
  228. data/test/stylesheet/tc_border_pr.rb +32 -32
  229. data/test/stylesheet/tc_cell_alignment.rb +81 -81
  230. data/test/stylesheet/tc_cell_protection.rb +29 -29
  231. data/test/stylesheet/tc_cell_style.rb +57 -57
  232. data/test/stylesheet/tc_color.rb +43 -43
  233. data/test/stylesheet/tc_dxf.rb +81 -81
  234. data/test/stylesheet/tc_fill.rb +18 -18
  235. data/test/stylesheet/tc_font.rb +133 -133
  236. data/test/stylesheet/tc_gradient_fill.rb +72 -72
  237. data/test/stylesheet/tc_gradient_stop.rb +31 -31
  238. data/test/stylesheet/tc_num_fmt.rb +30 -30
  239. data/test/stylesheet/tc_pattern_fill.rb +43 -43
  240. data/test/stylesheet/tc_styles.rb +309 -261
  241. data/test/stylesheet/tc_table_style.rb +44 -44
  242. data/test/stylesheet/tc_table_style_element.rb +45 -45
  243. data/test/stylesheet/tc_table_styles.rb +29 -29
  244. data/test/stylesheet/tc_xf.rb +120 -120
  245. data/test/tc_axlsx.rb +109 -109
  246. data/test/tc_helper.rb +10 -12
  247. data/test/tc_package.rb +317 -264
  248. data/test/util/tc_mime_type_utils.rb +13 -13
  249. data/test/util/tc_serialized_attributes.rb +19 -19
  250. data/test/util/tc_simple_typed_list.rb +77 -77
  251. data/test/util/tc_validators.rb +210 -210
  252. data/test/workbook/tc_defined_name.rb +49 -49
  253. data/test/workbook/tc_shared_strings_table.rb +59 -59
  254. data/test/workbook/tc_workbook.rb +165 -160
  255. data/test/workbook/tc_workbook_view.rb +50 -50
  256. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -38
  257. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -76
  258. data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -50
  259. data/test/workbook/worksheet/tc_break.rb +49 -49
  260. data/test/workbook/worksheet/tc_cell.rb +465 -453
  261. data/test/workbook/worksheet/tc_cfvo.rb +31 -31
  262. data/test/workbook/worksheet/tc_col.rb +93 -93
  263. data/test/workbook/worksheet/tc_color_scale.rb +58 -58
  264. data/test/workbook/worksheet/tc_comment.rb +72 -72
  265. data/test/workbook/worksheet/tc_comments.rb +57 -57
  266. data/test/workbook/worksheet/tc_conditional_formatting.rb +224 -224
  267. data/test/workbook/worksheet/tc_data_bar.rb +46 -46
  268. data/test/workbook/worksheet/tc_data_validation.rb +265 -265
  269. data/test/workbook/worksheet/tc_date_time_converter.rb +124 -124
  270. data/test/workbook/worksheet/tc_header_footer.rb +151 -151
  271. data/test/workbook/worksheet/tc_icon_set.rb +45 -45
  272. data/test/workbook/worksheet/tc_outline_pr.rb +19 -19
  273. data/test/workbook/worksheet/tc_page_margins.rb +97 -97
  274. data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -15
  275. data/test/workbook/worksheet/tc_page_setup.rb +143 -143
  276. data/test/workbook/worksheet/tc_pane.rb +54 -54
  277. data/test/workbook/worksheet/tc_pivot_table.rb +180 -135
  278. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +62 -54
  279. data/test/workbook/worksheet/tc_print_options.rb +72 -72
  280. data/test/workbook/worksheet/tc_protected_range.rb +17 -17
  281. data/test/workbook/worksheet/tc_rich_text.rb +44 -44
  282. data/test/workbook/worksheet/tc_rich_text_run.rb +173 -173
  283. data/test/workbook/worksheet/tc_row.rb +160 -139
  284. data/test/workbook/worksheet/tc_selection.rb +55 -55
  285. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -18
  286. data/test/workbook/worksheet/tc_sheet_format_pr.rb +88 -88
  287. data/test/workbook/worksheet/tc_sheet_pr.rb +49 -49
  288. data/test/workbook/worksheet/tc_sheet_protection.rb +117 -117
  289. data/test/workbook/worksheet/tc_sheet_view.rb +214 -214
  290. data/test/workbook/worksheet/tc_table.rb +77 -67
  291. data/test/workbook/worksheet/tc_table_style_info.rb +53 -53
  292. data/test/workbook/worksheet/tc_worksheet.rb +632 -601
  293. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +55 -55
  294. metadata +11 -11
@@ -1,276 +1,276 @@
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
+ 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