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