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,90 +1,90 @@
1
- module Axlsx
2
- # There are more elements in the dLbls spec that allow for
3
- # customizations and formatting. For now, I am just implementing the
4
- # basics.
5
- #The DLbls class manages serialization of data labels
6
- # showLeaderLines and leaderLines are not currently implemented
7
- class DLbls
8
-
9
- include Axlsx::Accessors
10
- include Axlsx::OptionsParser
11
- # creates a new DLbls object
12
- def initialize(chart_type, options={})
13
- raise ArgumentError, 'chart_type must inherit from Chart' unless [Chart, LineChart].include?(chart_type.superclass)
14
- @chart_type = chart_type
15
- initialize_defaults
16
- parse_options options
17
- end
18
-
19
- # These attributes are all boolean so I'm doing a bit of a hand
20
- # waving magic show to set up the attriubte accessors
21
- # @note
22
- # not all charts support all methods!
23
- # Bar3DChart and Line3DChart and ScatterChart do not support d_lbl_pos or show_leader_lines
24
- #
25
- boolean_attr_accessor :show_legend_key,
26
- :show_val,
27
- :show_cat_name,
28
- :show_ser_name,
29
- :show_percent,
30
- :show_bubble_size,
31
- :show_leader_lines
32
-
33
- # Initialize all the values to false as Excel requires them to
34
- # explicitly be disabled or all will show.
35
- def initialize_defaults
36
- [:show_legend_key, :show_val, :show_cat_name,
37
- :show_ser_name, :show_percent, :show_bubble_size,
38
- :show_leader_lines].each do |attr|
39
- self.send("#{attr}=", false)
40
- end
41
- end
42
-
43
- # The chart type that is using this data lables instance.
44
- # This affects the xml output as not all chart types support the
45
- # same data label attributes.
46
- attr_reader :chart_type
47
-
48
- # The position of the data labels in the chart
49
- # @see d_lbl_pos= for a list of allowed values
50
- # @return [Symbol]
51
- def d_lbl_pos
52
- return unless [Pie3DChart, LineChart].include? @chart_type
53
- @d_lbl_pos ||= :bestFit
54
- end
55
-
56
- # @see DLbls#d_lbl_pos
57
- # Assigns the label postion for this data labels on this chart.
58
- # Allowed positions are :bestFit, :b, :ctr, :inBase, :inEnd, :l,
59
- # :outEnd, :r and :t
60
- # The default is :bestFit
61
- # @param [Symbol] label_position the postion you want to use.
62
- def d_lbl_pos=(label_position)
63
- return unless [Pie3DChart, LineChart].include? @chart_type
64
- Axlsx::RestrictionValidator.validate 'DLbls#d_lbl_pos', [:bestFit, :b, :ctr, :inBase, :inEnd, :l, :outEnd, :r, :t], label_position
65
- @d_lbl_pos = label_position
66
- end
67
-
68
-
69
- # serializes the data labels
70
- # @return [String]
71
- def to_xml_string(str = '')
72
- validate_attributes_for_chart_type
73
- str << '<c:dLbls>'
74
- %w(d_lbl_pos show_legend_key show_val show_cat_name show_ser_name show_percent show_bubble_size show_leader_lines).each do |key|
75
- next unless instance_values.keys.include?(key) && instance_values[key] != nil
76
- str << "<c:#{Axlsx::camel(key, false)} val='#{instance_values[key]}' />"
77
- end
78
- str << '</c:dLbls>'
79
- end
80
-
81
- # nills out d_lbl_pos and show_leader_lines as these attributes, while valid in the spec actually chrash excel for any chart type other than pie charts.
82
- def validate_attributes_for_chart_type
83
- return if [Pie3DChart, LineChart].include? @chart_type
84
- @d_lbl_pos = nil
85
- @show_leader_lines = nil
86
- end
87
-
88
-
89
- end
90
- end
1
+ module Axlsx
2
+ # There are more elements in the dLbls spec that allow for
3
+ # customizations and formatting. For now, I am just implementing the
4
+ # basics.
5
+ #The DLbls class manages serialization of data labels
6
+ # showLeaderLines and leaderLines are not currently implemented
7
+ class DLbls
8
+
9
+ include Axlsx::Accessors
10
+ include Axlsx::OptionsParser
11
+ # creates a new DLbls object
12
+ def initialize(chart_type, options={})
13
+ raise ArgumentError, 'chart_type must inherit from Chart' unless [Chart, LineChart].include?(chart_type.superclass)
14
+ @chart_type = chart_type
15
+ initialize_defaults
16
+ parse_options options
17
+ end
18
+
19
+ # These attributes are all boolean so I'm doing a bit of a hand
20
+ # waving magic show to set up the attriubte accessors
21
+ # @note
22
+ # not all charts support all methods!
23
+ # Bar3DChart and Line3DChart and ScatterChart do not support d_lbl_pos or show_leader_lines
24
+ #
25
+ boolean_attr_accessor :show_legend_key,
26
+ :show_val,
27
+ :show_cat_name,
28
+ :show_ser_name,
29
+ :show_percent,
30
+ :show_bubble_size,
31
+ :show_leader_lines
32
+
33
+ # Initialize all the values to false as Excel requires them to
34
+ # explicitly be disabled or all will show.
35
+ def initialize_defaults
36
+ [:show_legend_key, :show_val, :show_cat_name,
37
+ :show_ser_name, :show_percent, :show_bubble_size,
38
+ :show_leader_lines].each do |attr|
39
+ self.send("#{attr}=", false)
40
+ end
41
+ end
42
+
43
+ # The chart type that is using this data lables instance.
44
+ # This affects the xml output as not all chart types support the
45
+ # same data label attributes.
46
+ attr_reader :chart_type
47
+
48
+ # The position of the data labels in the chart
49
+ # @see d_lbl_pos= for a list of allowed values
50
+ # @return [Symbol]
51
+ def d_lbl_pos
52
+ return unless [Pie3DChart, LineChart].include? @chart_type
53
+ @d_lbl_pos ||= :bestFit
54
+ end
55
+
56
+ # @see DLbls#d_lbl_pos
57
+ # Assigns the label postion for this data labels on this chart.
58
+ # Allowed positions are :bestFit, :b, :ctr, :inBase, :inEnd, :l,
59
+ # :outEnd, :r and :t
60
+ # The default is :bestFit
61
+ # @param [Symbol] label_position the postion you want to use.
62
+ def d_lbl_pos=(label_position)
63
+ return unless [Pie3DChart, LineChart].include? @chart_type
64
+ Axlsx::RestrictionValidator.validate 'DLbls#d_lbl_pos', [:bestFit, :b, :ctr, :inBase, :inEnd, :l, :outEnd, :r, :t], label_position
65
+ @d_lbl_pos = label_position
66
+ end
67
+
68
+
69
+ # serializes the data labels
70
+ # @return [String]
71
+ def to_xml_string(str = '')
72
+ validate_attributes_for_chart_type
73
+ str << '<c:dLbls>'
74
+ %w(d_lbl_pos show_legend_key show_val show_cat_name show_ser_name show_percent show_bubble_size show_leader_lines).each do |key|
75
+ next unless instance_values.keys.include?(key) && instance_values[key] != nil
76
+ str << "<c:#{Axlsx::camel(key, false)} val='#{instance_values[key]}' />"
77
+ end
78
+ str << '</c:dLbls>'
79
+ end
80
+
81
+ # nills out d_lbl_pos and show_leader_lines as these attributes, while valid in the spec actually chrash excel for any chart type other than pie charts.
82
+ def validate_attributes_for_chart_type
83
+ return if [Pie3DChart, LineChart].include? @chart_type
84
+ @d_lbl_pos = nil
85
+ @show_leader_lines = nil
86
+ end
87
+
88
+
89
+ end
90
+ end
@@ -1,167 +1,167 @@
1
- # encoding: UTF-8
2
- module Axlsx
3
- require 'axlsx/drawing/d_lbls.rb'
4
- require 'axlsx/drawing/title.rb'
5
- require 'axlsx/drawing/series_title.rb'
6
- require 'axlsx/drawing/series.rb'
7
- require 'axlsx/drawing/pie_series.rb'
8
- require 'axlsx/drawing/bar_series.rb'
9
- require 'axlsx/drawing/line_series.rb'
10
- require 'axlsx/drawing/scatter_series.rb'
11
- require 'axlsx/drawing/bubble_series.rb'
12
- require 'axlsx/drawing/area_series.rb'
13
-
14
- require 'axlsx/drawing/scaling.rb'
15
- require 'axlsx/drawing/axis.rb'
16
-
17
- require 'axlsx/drawing/str_val.rb'
18
- require 'axlsx/drawing/num_val.rb'
19
- require 'axlsx/drawing/str_data.rb'
20
- require 'axlsx/drawing/num_data.rb'
21
- require 'axlsx/drawing/num_data_source.rb'
22
- require 'axlsx/drawing/ax_data_source.rb'
23
-
24
- require 'axlsx/drawing/ser_axis.rb'
25
- require 'axlsx/drawing/cat_axis.rb'
26
- require 'axlsx/drawing/val_axis.rb'
27
- require 'axlsx/drawing/axes.rb'
28
-
29
- require 'axlsx/drawing/marker.rb'
30
-
31
- require 'axlsx/drawing/one_cell_anchor.rb'
32
- require 'axlsx/drawing/two_cell_anchor.rb'
33
- require 'axlsx/drawing/graphic_frame.rb'
34
-
35
- require 'axlsx/drawing/view_3D.rb'
36
- require 'axlsx/drawing/chart.rb'
37
- require 'axlsx/drawing/pie_3D_chart.rb'
38
- require 'axlsx/drawing/bar_3D_chart.rb'
39
- require 'axlsx/drawing/bar_chart.rb'
40
- require 'axlsx/drawing/line_chart.rb'
41
- require 'axlsx/drawing/line_3D_chart.rb'
42
- require 'axlsx/drawing/scatter_chart.rb'
43
- require 'axlsx/drawing/bubble_chart.rb'
44
- require 'axlsx/drawing/area_chart.rb'
45
-
46
- require 'axlsx/drawing/picture_locking.rb'
47
- require 'axlsx/drawing/pic.rb'
48
- require 'axlsx/drawing/hyperlink.rb'
49
-
50
- require 'axlsx/drawing/vml_drawing.rb'
51
- require 'axlsx/drawing/vml_shape.rb'
52
-
53
- # A Drawing is a canvas for charts and images. Each worksheet has a single drawing that manages anchors.
54
- # The anchors reference the charts or images via graphical frames. This is not a trivial relationship so please do follow the advice in the note.
55
- # @note The recommended way to manage drawings is to use the Worksheet.add_chart and Worksheet.add_image methods.
56
- # @see Worksheet#add_chart
57
- # @see Worksheet#add_image
58
- # @see Chart
59
- # see examples/example.rb for an example of how to create a chart.
60
- class Drawing
61
-
62
- # The worksheet that owns the drawing
63
- # @return [Worksheet]
64
- attr_reader :worksheet
65
-
66
- # A collection of anchors for this drawing
67
- # only TwoCellAnchors are supported in this version
68
- # @return [SimpleTypedList]
69
- attr_reader :anchors
70
-
71
- # Creates a new Drawing object
72
- # @param [Worksheet] worksheet The worksheet that owns this drawing
73
- def initialize(worksheet)
74
- DataTypeValidator.validate "Drawing.worksheet", Worksheet, worksheet
75
- @worksheet = worksheet
76
- @worksheet.workbook.drawings << self
77
- @anchors = SimpleTypedList.new [TwoCellAnchor, OneCellAnchor]
78
- end
79
-
80
-
81
- # Adds an image to the chart If th end_at option is specified we create a two cell anchor. By default we use a one cell anchor.
82
- # @note The recommended way to manage images is to use Worksheet.add_image. Please refer to that method for documentation.
83
- # @see Worksheet#add_image
84
- # @return [Pic]
85
- def add_image(options={})
86
- if options[:end_at]
87
- TwoCellAnchor.new(self, options).add_pic(options)
88
- else
89
- OneCellAnchor.new(self, options)
90
- end
91
- @anchors.last.object
92
- end
93
-
94
- # Adds a chart to the drawing.
95
- # @note The recommended way to manage charts is to use Worksheet.add_chart. Please refer to that method for documentation.
96
- # @see Worksheet#add_chart
97
- def add_chart(chart_type, options={})
98
- TwoCellAnchor.new(self, options)
99
- @anchors.last.add_chart(chart_type, options)
100
- end
101
-
102
- # An array of charts that are associated with this drawing's anchors
103
- # @return [Array]
104
- def charts
105
- charts = @anchors.select { |a| a.object.is_a?(GraphicFrame) }
106
- charts.map { |a| a.object.chart }
107
- end
108
-
109
- # An array of hyperlink objects associated with this drawings images
110
- # @return [Array]
111
- def hyperlinks
112
- links = self.images.select { |a| a.hyperlink.is_a?(Hyperlink) }
113
- links.map { |a| a.hyperlink }
114
- end
115
-
116
- # An array of image objects that are associated with this drawing's anchors
117
- # @return [Array]
118
- def images
119
- images = @anchors.select { |a| a.object.is_a?(Pic) }
120
- images.map { |a| a.object }
121
- end
122
-
123
- # The index of this drawing in the owning workbooks's drawings collection.
124
- # @return [Integer]
125
- def index
126
- @worksheet.workbook.drawings.index(self)
127
- end
128
-
129
- # The part name for this drawing
130
- # @return [String]
131
- def pn
132
- "#{DRAWING_PN % (index+1)}"
133
- end
134
-
135
- # The relational part name for this drawing
136
- # #NOTE This should be rewritten to return an Axlsx::Relationship object.
137
- # @return [String]
138
- def rels_pn
139
- "#{DRAWING_RELS_PN % (index+1)}"
140
- end
141
-
142
- # A list of objects this drawing holds.
143
- # @return [Array]
144
- def child_objects
145
- charts + images + hyperlinks
146
- end
147
-
148
- # The drawing's relationships.
149
- # @return [Relationships]
150
- def relationships
151
- r = Relationships.new
152
- child_objects.each { |child| r << child.relationship }
153
- r
154
- end
155
-
156
- # Serializes the object
157
- # @param [String] str
158
- # @return [String]
159
- def to_xml_string(str = '')
160
- str << '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'
161
- str << ('<xdr:wsDr xmlns:xdr="' << XML_NS_XDR << '" xmlns:a="' << XML_NS_A << '">')
162
- anchors.each { |anchor| anchor.to_xml_string(str) }
163
- str << '</xdr:wsDr>'
164
- end
165
-
166
- end
167
- end
1
+ # encoding: UTF-8
2
+ module Axlsx
3
+ require 'axlsx/drawing/d_lbls.rb'
4
+ require 'axlsx/drawing/title.rb'
5
+ require 'axlsx/drawing/series_title.rb'
6
+ require 'axlsx/drawing/series.rb'
7
+ require 'axlsx/drawing/pie_series.rb'
8
+ require 'axlsx/drawing/bar_series.rb'
9
+ require 'axlsx/drawing/line_series.rb'
10
+ require 'axlsx/drawing/scatter_series.rb'
11
+ require 'axlsx/drawing/bubble_series.rb'
12
+ require 'axlsx/drawing/area_series.rb'
13
+
14
+ require 'axlsx/drawing/scaling.rb'
15
+ require 'axlsx/drawing/axis.rb'
16
+
17
+ require 'axlsx/drawing/str_val.rb'
18
+ require 'axlsx/drawing/num_val.rb'
19
+ require 'axlsx/drawing/str_data.rb'
20
+ require 'axlsx/drawing/num_data.rb'
21
+ require 'axlsx/drawing/num_data_source.rb'
22
+ require 'axlsx/drawing/ax_data_source.rb'
23
+
24
+ require 'axlsx/drawing/ser_axis.rb'
25
+ require 'axlsx/drawing/cat_axis.rb'
26
+ require 'axlsx/drawing/val_axis.rb'
27
+ require 'axlsx/drawing/axes.rb'
28
+
29
+ require 'axlsx/drawing/marker.rb'
30
+
31
+ require 'axlsx/drawing/one_cell_anchor.rb'
32
+ require 'axlsx/drawing/two_cell_anchor.rb'
33
+ require 'axlsx/drawing/graphic_frame.rb'
34
+
35
+ require 'axlsx/drawing/view_3D.rb'
36
+ require 'axlsx/drawing/chart.rb'
37
+ require 'axlsx/drawing/pie_3D_chart.rb'
38
+ require 'axlsx/drawing/bar_3D_chart.rb'
39
+ require 'axlsx/drawing/bar_chart.rb'
40
+ require 'axlsx/drawing/line_chart.rb'
41
+ require 'axlsx/drawing/line_3D_chart.rb'
42
+ require 'axlsx/drawing/scatter_chart.rb'
43
+ require 'axlsx/drawing/bubble_chart.rb'
44
+ require 'axlsx/drawing/area_chart.rb'
45
+
46
+ require 'axlsx/drawing/picture_locking.rb'
47
+ require 'axlsx/drawing/pic.rb'
48
+ require 'axlsx/drawing/hyperlink.rb'
49
+
50
+ require 'axlsx/drawing/vml_drawing.rb'
51
+ require 'axlsx/drawing/vml_shape.rb'
52
+
53
+ # A Drawing is a canvas for charts and images. Each worksheet has a single drawing that manages anchors.
54
+ # The anchors reference the charts or images via graphical frames. This is not a trivial relationship so please do follow the advice in the note.
55
+ # @note The recommended way to manage drawings is to use the Worksheet.add_chart and Worksheet.add_image methods.
56
+ # @see Worksheet#add_chart
57
+ # @see Worksheet#add_image
58
+ # @see Chart
59
+ # see examples/example.rb for an example of how to create a chart.
60
+ class Drawing
61
+
62
+ # The worksheet that owns the drawing
63
+ # @return [Worksheet]
64
+ attr_reader :worksheet
65
+
66
+ # A collection of anchors for this drawing
67
+ # only TwoCellAnchors are supported in this version
68
+ # @return [SimpleTypedList]
69
+ attr_reader :anchors
70
+
71
+ # Creates a new Drawing object
72
+ # @param [Worksheet] worksheet The worksheet that owns this drawing
73
+ def initialize(worksheet)
74
+ DataTypeValidator.validate "Drawing.worksheet", Worksheet, worksheet
75
+ @worksheet = worksheet
76
+ @worksheet.workbook.drawings << self
77
+ @anchors = SimpleTypedList.new [TwoCellAnchor, OneCellAnchor]
78
+ end
79
+
80
+
81
+ # Adds an image to the chart If th end_at option is specified we create a two cell anchor. By default we use a one cell anchor.
82
+ # @note The recommended way to manage images is to use Worksheet.add_image. Please refer to that method for documentation.
83
+ # @see Worksheet#add_image
84
+ # @return [Pic]
85
+ def add_image(options={})
86
+ if options[:end_at]
87
+ TwoCellAnchor.new(self, options).add_pic(options)
88
+ else
89
+ OneCellAnchor.new(self, options)
90
+ end
91
+ @anchors.last.object
92
+ end
93
+
94
+ # Adds a chart to the drawing.
95
+ # @note The recommended way to manage charts is to use Worksheet.add_chart. Please refer to that method for documentation.
96
+ # @see Worksheet#add_chart
97
+ def add_chart(chart_type, options={})
98
+ TwoCellAnchor.new(self, options)
99
+ @anchors.last.add_chart(chart_type, options)
100
+ end
101
+
102
+ # An array of charts that are associated with this drawing's anchors
103
+ # @return [Array]
104
+ def charts
105
+ charts = @anchors.select { |a| a.object.is_a?(GraphicFrame) }
106
+ charts.map { |a| a.object.chart }
107
+ end
108
+
109
+ # An array of hyperlink objects associated with this drawings images
110
+ # @return [Array]
111
+ def hyperlinks
112
+ links = self.images.select { |a| a.hyperlink.is_a?(Hyperlink) }
113
+ links.map { |a| a.hyperlink }
114
+ end
115
+
116
+ # An array of image objects that are associated with this drawing's anchors
117
+ # @return [Array]
118
+ def images
119
+ images = @anchors.select { |a| a.object.is_a?(Pic) }
120
+ images.map { |a| a.object }
121
+ end
122
+
123
+ # The index of this drawing in the owning workbooks's drawings collection.
124
+ # @return [Integer]
125
+ def index
126
+ @worksheet.workbook.drawings.index(self)
127
+ end
128
+
129
+ # The part name for this drawing
130
+ # @return [String]
131
+ def pn
132
+ "#{DRAWING_PN % (index+1)}"
133
+ end
134
+
135
+ # The relational part name for this drawing
136
+ # #NOTE This should be rewritten to return an Axlsx::Relationship object.
137
+ # @return [String]
138
+ def rels_pn
139
+ "#{DRAWING_RELS_PN % (index+1)}"
140
+ end
141
+
142
+ # A list of objects this drawing holds.
143
+ # @return [Array]
144
+ def child_objects
145
+ charts + images + hyperlinks
146
+ end
147
+
148
+ # The drawing's relationships.
149
+ # @return [Relationships]
150
+ def relationships
151
+ r = Relationships.new
152
+ child_objects.each { |child| r << child.relationship }
153
+ r
154
+ end
155
+
156
+ # Serializes the object
157
+ # @param [String] str
158
+ # @return [String]
159
+ def to_xml_string(str = '')
160
+ str << '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'
161
+ str << ('<xdr:wsDr xmlns:xdr="' << XML_NS_XDR << '" xmlns:a="' << XML_NS_A << '">')
162
+ anchors.each { |anchor| anchor.to_xml_string(str) }
163
+ str << '</xdr:wsDr>'
164
+ end
165
+
166
+ end
167
+ end
@@ -1,54 +1,54 @@
1
- # encoding: UTF-8
2
- module Axlsx
3
- # A graphic frame defines a container for a chart object
4
- # @note The recommended way to manage charts is Worksheet#add_chart
5
- # @see Worksheet#add_chart
6
- class GraphicFrame
7
-
8
- # A reference to the chart object associated with this frame
9
- # @return [Chart]
10
- attr_reader :chart
11
-
12
- # A anchor that holds this frame
13
- # @return [TwoCellAnchor]
14
- attr_reader :anchor
15
-
16
- # Creates a new GraphicFrame object
17
- # @param [TwoCellAnchor] anchor
18
- # @param [Class] chart_type
19
- def initialize(anchor, chart_type, options)
20
- DataTypeValidator.validate "Drawing.chart_type", Chart, chart_type
21
- @anchor = anchor
22
- @chart = chart_type.new(self, options)
23
- end
24
-
25
- # The relationship id for this graphic frame.
26
- # @return [String]
27
- def rId
28
- @anchor.drawing.relationships.for(chart).Id
29
- end
30
-
31
- # Serializes the object
32
- # @param [String] str
33
- # @return [String]
34
- def to_xml_string(str = '')
35
- # macro attribute should be optional!
36
- str << '<xdr:graphicFrame>'
37
- str << '<xdr:nvGraphicFramePr>'
38
- str << ('<xdr:cNvPr id="' << @anchor.drawing.index.to_s << '" name="' << 'item_' << @anchor.drawing.index.to_s << '"/>')
39
- str << '<xdr:cNvGraphicFramePr/>'
40
- str << '</xdr:nvGraphicFramePr>'
41
- str << '<xdr:xfrm>'
42
- str << '<a:off x="0" y="0"/>'
43
- str << '<a:ext cx="0" cy="0"/>'
44
- str << '</xdr:xfrm>'
45
- str << '<a:graphic>'
46
- str << ('<a:graphicData uri="' << XML_NS_C << '">')
47
- str << ('<c:chart xmlns:c="' << XML_NS_C << '" xmlns:r="' << XML_NS_R << '" r:id="' << rId << '"/>')
48
- str << '</a:graphicData>'
49
- str << '</a:graphic>'
50
- str << '</xdr:graphicFrame>'
51
- end
52
-
53
- end
54
- end
1
+ # encoding: UTF-8
2
+ module Axlsx
3
+ # A graphic frame defines a container for a chart object
4
+ # @note The recommended way to manage charts is Worksheet#add_chart
5
+ # @see Worksheet#add_chart
6
+ class GraphicFrame
7
+
8
+ # A reference to the chart object associated with this frame
9
+ # @return [Chart]
10
+ attr_reader :chart
11
+
12
+ # A anchor that holds this frame
13
+ # @return [TwoCellAnchor]
14
+ attr_reader :anchor
15
+
16
+ # Creates a new GraphicFrame object
17
+ # @param [TwoCellAnchor] anchor
18
+ # @param [Class] chart_type
19
+ def initialize(anchor, chart_type, options)
20
+ DataTypeValidator.validate "Drawing.chart_type", Chart, chart_type
21
+ @anchor = anchor
22
+ @chart = chart_type.new(self, options)
23
+ end
24
+
25
+ # The relationship id for this graphic frame.
26
+ # @return [String]
27
+ def rId
28
+ @anchor.drawing.relationships.for(chart).Id
29
+ end
30
+
31
+ # Serializes the object
32
+ # @param [String] str
33
+ # @return [String]
34
+ def to_xml_string(str = '')
35
+ # macro attribute should be optional!
36
+ str << '<xdr:graphicFrame>'
37
+ str << '<xdr:nvGraphicFramePr>'
38
+ str << ('<xdr:cNvPr id="' << @anchor.drawing.index.to_s << '" name="' << 'item_' << @anchor.drawing.index.to_s << '"/>')
39
+ str << '<xdr:cNvGraphicFramePr/>'
40
+ str << '</xdr:nvGraphicFramePr>'
41
+ str << '<xdr:xfrm>'
42
+ str << '<a:off x="0" y="0"/>'
43
+ str << '<a:ext cx="0" cy="0"/>'
44
+ str << '</xdr:xfrm>'
45
+ str << '<a:graphic>'
46
+ str << ('<a:graphicData uri="' << XML_NS_C << '">')
47
+ str << ('<c:chart xmlns:c="' << XML_NS_C << '" xmlns:r="' << XML_NS_R << '" r:id="' << rId << '"/>')
48
+ str << '</a:graphicData>'
49
+ str << '</a:graphic>'
50
+ str << '</xdr:graphicFrame>'
51
+ end
52
+
53
+ end
54
+ end