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