axlsx-alt 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (330) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +9 -0
  3. data/.yardopts_guide +19 -0
  4. data/CHANGELOG.md +244 -0
  5. data/LICENSE +22 -0
  6. data/README.md +180 -0
  7. data/Rakefile +29 -0
  8. data/examples/2010_comments.rb +17 -0
  9. data/examples/anchor_swapping.rb +28 -0
  10. data/examples/auto_filter.rb +25 -0
  11. data/examples/basic_charts.rb +58 -0
  12. data/examples/chart_colors.rb +88 -0
  13. data/examples/colored_links.rb +59 -0
  14. data/examples/conditional_formatting/example_conditional_formatting.rb +89 -0
  15. data/examples/conditional_formatting/getting_barred.rb +37 -0
  16. data/examples/conditional_formatting/hitting_the_high_notes.rb +37 -0
  17. data/examples/conditional_formatting/scaled_colors.rb +39 -0
  18. data/examples/conditional_formatting/stop_and_go.rb +37 -0
  19. data/examples/data_validation.rb +67 -0
  20. data/examples/example.rb +885 -0
  21. data/examples/extractive.rb +45 -0
  22. data/examples/image1.jpeg +0 -0
  23. data/examples/ios_preview.rb +14 -0
  24. data/examples/merge_cells.rb +17 -0
  25. data/examples/no_grid_with_borders.rb +18 -0
  26. data/examples/page_setup.rb +11 -0
  27. data/examples/pivot_table.rb +39 -0
  28. data/examples/pivot_test.rb +63 -0
  29. data/examples/sheet_protection.rb +10 -0
  30. data/examples/skydrive/real_example.rb +63 -0
  31. data/examples/split.rb +16 -0
  32. data/examples/styles.rb +66 -0
  33. data/examples/underline.rb +13 -0
  34. data/examples/wrap_text.rb +21 -0
  35. data/lib/axlsx.rb +171 -0
  36. data/lib/axlsx/content_type/abstract_content_type.rb +32 -0
  37. data/lib/axlsx/content_type/content_type.rb +26 -0
  38. data/lib/axlsx/content_type/default.rb +25 -0
  39. data/lib/axlsx/content_type/override.rb +25 -0
  40. data/lib/axlsx/doc_props/app.rb +235 -0
  41. data/lib/axlsx/doc_props/core.rb +39 -0
  42. data/lib/axlsx/drawing/area_chart.rb +99 -0
  43. data/lib/axlsx/drawing/area_series.rb +110 -0
  44. data/lib/axlsx/drawing/ax_data_source.rb +26 -0
  45. data/lib/axlsx/drawing/axes.rb +61 -0
  46. data/lib/axlsx/drawing/axis.rb +190 -0
  47. data/lib/axlsx/drawing/bar_3D_chart.rb +151 -0
  48. data/lib/axlsx/drawing/bar_chart.rb +143 -0
  49. data/lib/axlsx/drawing/bar_series.rb +82 -0
  50. data/lib/axlsx/drawing/bubble_chart.rb +59 -0
  51. data/lib/axlsx/drawing/bubble_series.rb +63 -0
  52. data/lib/axlsx/drawing/cat_axis.rb +85 -0
  53. data/lib/axlsx/drawing/chart.rb +276 -0
  54. data/lib/axlsx/drawing/d_lbls.rb +90 -0
  55. data/lib/axlsx/drawing/drawing.rb +167 -0
  56. data/lib/axlsx/drawing/graphic_frame.rb +54 -0
  57. data/lib/axlsx/drawing/hyperlink.rb +100 -0
  58. data/lib/axlsx/drawing/line_3D_chart.rb +68 -0
  59. data/lib/axlsx/drawing/line_chart.rb +99 -0
  60. data/lib/axlsx/drawing/line_series.rb +110 -0
  61. data/lib/axlsx/drawing/marker.rb +84 -0
  62. data/lib/axlsx/drawing/num_data.rb +52 -0
  63. data/lib/axlsx/drawing/num_data_source.rb +62 -0
  64. data/lib/axlsx/drawing/num_val.rb +34 -0
  65. data/lib/axlsx/drawing/one_cell_anchor.rb +99 -0
  66. data/lib/axlsx/drawing/pic.rb +211 -0
  67. data/lib/axlsx/drawing/picture_locking.rb +42 -0
  68. data/lib/axlsx/drawing/pie_3D_chart.rb +47 -0
  69. data/lib/axlsx/drawing/pie_series.rb +74 -0
  70. data/lib/axlsx/drawing/scaling.rb +60 -0
  71. data/lib/axlsx/drawing/scatter_chart.rb +74 -0
  72. data/lib/axlsx/drawing/scatter_series.rb +98 -0
  73. data/lib/axlsx/drawing/ser_axis.rb +45 -0
  74. data/lib/axlsx/drawing/series.rb +69 -0
  75. data/lib/axlsx/drawing/series_title.rb +23 -0
  76. data/lib/axlsx/drawing/str_data.rb +42 -0
  77. data/lib/axlsx/drawing/str_val.rb +34 -0
  78. data/lib/axlsx/drawing/title.rb +96 -0
  79. data/lib/axlsx/drawing/two_cell_anchor.rb +97 -0
  80. data/lib/axlsx/drawing/val_axis.rb +37 -0
  81. data/lib/axlsx/drawing/view_3D.rb +115 -0
  82. data/lib/axlsx/drawing/vml_drawing.rb +42 -0
  83. data/lib/axlsx/drawing/vml_shape.rb +66 -0
  84. data/lib/axlsx/package.rb +358 -0
  85. data/lib/axlsx/rels/relationship.rb +137 -0
  86. data/lib/axlsx/rels/relationships.rb +32 -0
  87. data/lib/axlsx/stylesheet/border.rb +71 -0
  88. data/lib/axlsx/stylesheet/border_pr.rb +71 -0
  89. data/lib/axlsx/stylesheet/cell_alignment.rb +132 -0
  90. data/lib/axlsx/stylesheet/cell_protection.rb +41 -0
  91. data/lib/axlsx/stylesheet/cell_style.rb +72 -0
  92. data/lib/axlsx/stylesheet/color.rb +76 -0
  93. data/lib/axlsx/stylesheet/dxf.rb +79 -0
  94. data/lib/axlsx/stylesheet/fill.rb +35 -0
  95. data/lib/axlsx/stylesheet/font.rb +148 -0
  96. data/lib/axlsx/stylesheet/gradient_fill.rb +103 -0
  97. data/lib/axlsx/stylesheet/gradient_stop.rb +37 -0
  98. data/lib/axlsx/stylesheet/num_fmt.rb +86 -0
  99. data/lib/axlsx/stylesheet/pattern_fill.rb +73 -0
  100. data/lib/axlsx/stylesheet/styles.rb +420 -0
  101. data/lib/axlsx/stylesheet/table_style.rb +54 -0
  102. data/lib/axlsx/stylesheet/table_style_element.rb +77 -0
  103. data/lib/axlsx/stylesheet/table_styles.rb +46 -0
  104. data/lib/axlsx/stylesheet/xf.rb +147 -0
  105. data/lib/axlsx/util/accessors.rb +64 -0
  106. data/lib/axlsx/util/constants.rb +400 -0
  107. data/lib/axlsx/util/mime_type_utils.rb +11 -0
  108. data/lib/axlsx/util/options_parser.rb +16 -0
  109. data/lib/axlsx/util/parser.rb +44 -0
  110. data/lib/axlsx/util/serialized_attributes.rb +89 -0
  111. data/lib/axlsx/util/simple_typed_list.rb +179 -0
  112. data/lib/axlsx/util/storage.rb +146 -0
  113. data/lib/axlsx/util/validators.rb +312 -0
  114. data/lib/axlsx/version.rb +3 -0
  115. data/lib/axlsx/workbook/defined_name.rb +128 -0
  116. data/lib/axlsx/workbook/defined_names.rb +21 -0
  117. data/lib/axlsx/workbook/shared_strings_table.rb +77 -0
  118. data/lib/axlsx/workbook/workbook.rb +379 -0
  119. data/lib/axlsx/workbook/workbook_view.rb +80 -0
  120. data/lib/axlsx/workbook/workbook_views.rb +22 -0
  121. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -0
  122. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -0
  123. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +244 -0
  124. data/lib/axlsx/workbook/worksheet/break.rb +35 -0
  125. data/lib/axlsx/workbook/worksheet/cell.rb +478 -0
  126. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +164 -0
  127. data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -0
  128. data/lib/axlsx/workbook/worksheet/cfvos.rb +18 -0
  129. data/lib/axlsx/workbook/worksheet/col.rb +141 -0
  130. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -0
  131. data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -0
  132. data/lib/axlsx/workbook/worksheet/cols.rb +23 -0
  133. data/lib/axlsx/workbook/worksheet/comment.rb +90 -0
  134. data/lib/axlsx/workbook/worksheet/comments.rb +97 -0
  135. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -0
  136. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -0
  137. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -0
  138. data/lib/axlsx/workbook/worksheet/data_bar.rb +129 -0
  139. data/lib/axlsx/workbook/worksheet/data_validation.rb +246 -0
  140. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -0
  141. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -0
  142. data/lib/axlsx/workbook/worksheet/dimension.rb +64 -0
  143. data/lib/axlsx/workbook/worksheet/header_footer.rb +52 -0
  144. data/lib/axlsx/workbook/worksheet/icon_set.rb +81 -0
  145. data/lib/axlsx/workbook/worksheet/merged_cells.rb +37 -0
  146. data/lib/axlsx/workbook/worksheet/outline_pr.rb +33 -0
  147. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -0
  148. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -0
  149. data/lib/axlsx/workbook/worksheet/page_setup.rb +240 -0
  150. data/lib/axlsx/workbook/worksheet/pane.rb +139 -0
  151. data/lib/axlsx/workbook/worksheet/pivot_table.rb +289 -0
  152. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -0
  153. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -0
  154. data/lib/axlsx/workbook/worksheet/print_options.rb +39 -0
  155. data/lib/axlsx/workbook/worksheet/protected_range.rb +47 -0
  156. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +37 -0
  157. data/lib/axlsx/workbook/worksheet/rich_text.rb +55 -0
  158. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +250 -0
  159. data/lib/axlsx/workbook/worksheet/row.rb +161 -0
  160. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -0
  161. data/lib/axlsx/workbook/worksheet/selection.rb +101 -0
  162. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -0
  163. data/lib/axlsx/workbook/worksheet/sheet_data.rb +27 -0
  164. data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +60 -0
  165. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +87 -0
  166. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +118 -0
  167. data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -0
  168. data/lib/axlsx/workbook/worksheet/table.rb +102 -0
  169. data/lib/axlsx/workbook/worksheet/table_style_info.rb +49 -0
  170. data/lib/axlsx/workbook/worksheet/tables.rb +34 -0
  171. data/lib/axlsx/workbook/worksheet/worksheet.rb +756 -0
  172. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -0
  173. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -0
  174. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -0
  175. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -0
  176. data/lib/schema/dc.xsd +118 -0
  177. data/lib/schema/dcmitype.xsd +52 -0
  178. data/lib/schema/dcterms.xsd +331 -0
  179. data/lib/schema/dml-chart.xsd +1499 -0
  180. data/lib/schema/dml-chartDrawing.xsd +146 -0
  181. data/lib/schema/dml-compatibility.xsd +14 -0
  182. data/lib/schema/dml-diagram.xsd +1091 -0
  183. data/lib/schema/dml-lockedCanvas.xsd +11 -0
  184. data/lib/schema/dml-main.xsd +3048 -0
  185. data/lib/schema/dml-picture.xsd +23 -0
  186. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -0
  187. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -0
  188. data/lib/schema/opc-contentTypes.xsd +42 -0
  189. data/lib/schema/opc-coreProperties.xsd +54 -0
  190. data/lib/schema/opc-digSig.xsd +49 -0
  191. data/lib/schema/opc-relationships.xsd +33 -0
  192. data/lib/schema/pml.xsd +1676 -0
  193. data/lib/schema/shared-additionalCharacteristics.xsd +28 -0
  194. data/lib/schema/shared-bibliography.xsd +144 -0
  195. data/lib/schema/shared-commonSimpleTypes.xsd +166 -0
  196. data/lib/schema/shared-customXmlDataProperties.xsd +25 -0
  197. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -0
  198. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -0
  199. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -0
  200. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -0
  201. data/lib/schema/shared-math.xsd +582 -0
  202. data/lib/schema/shared-relationshipReference.xsd +25 -0
  203. data/lib/schema/sml.xsd +4434 -0
  204. data/lib/schema/vml-main.xsd +569 -0
  205. data/lib/schema/vml-officeDrawing.xsd +509 -0
  206. data/lib/schema/vml-presentationDrawing.xsd +12 -0
  207. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -0
  208. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -0
  209. data/lib/schema/wml.xsd +3644 -0
  210. data/lib/schema/xml.xsd +116 -0
  211. data/test/benchmark.rb +72 -0
  212. data/test/content_type/tc_content_type.rb +76 -0
  213. data/test/content_type/tc_default.rb +16 -0
  214. data/test/content_type/tc_override.rb +14 -0
  215. data/test/doc_props/tc_app.rb +43 -0
  216. data/test/doc_props/tc_core.rb +42 -0
  217. data/test/drawing/tc_area_chart.rb +39 -0
  218. data/test/drawing/tc_area_series.rb +71 -0
  219. data/test/drawing/tc_axes.rb +8 -0
  220. data/test/drawing/tc_axis.rb +112 -0
  221. data/test/drawing/tc_bar_3D_chart.rb +71 -0
  222. data/test/drawing/tc_bar_chart.rb +71 -0
  223. data/test/drawing/tc_bar_series.rb +37 -0
  224. data/test/drawing/tc_bubble_chart.rb +44 -0
  225. data/test/drawing/tc_bubble_series.rb +21 -0
  226. data/test/drawing/tc_cat_axis.rb +31 -0
  227. data/test/drawing/tc_cat_axis_data.rb +27 -0
  228. data/test/drawing/tc_chart.rb +123 -0
  229. data/test/drawing/tc_d_lbls.rb +57 -0
  230. data/test/drawing/tc_data_source.rb +23 -0
  231. data/test/drawing/tc_drawing.rb +80 -0
  232. data/test/drawing/tc_graphic_frame.rb +27 -0
  233. data/test/drawing/tc_hyperlink.rb +64 -0
  234. data/test/drawing/tc_line_3d_chart.rb +47 -0
  235. data/test/drawing/tc_line_chart.rb +39 -0
  236. data/test/drawing/tc_line_series.rb +71 -0
  237. data/test/drawing/tc_marker.rb +44 -0
  238. data/test/drawing/tc_named_axis_data.rb +27 -0
  239. data/test/drawing/tc_num_data.rb +31 -0
  240. data/test/drawing/tc_num_val.rb +29 -0
  241. data/test/drawing/tc_one_cell_anchor.rb +66 -0
  242. data/test/drawing/tc_pic.rb +103 -0
  243. data/test/drawing/tc_picture_locking.rb +72 -0
  244. data/test/drawing/tc_pie_3D_chart.rb +28 -0
  245. data/test/drawing/tc_pie_series.rb +32 -0
  246. data/test/drawing/tc_scaling.rb +36 -0
  247. data/test/drawing/tc_scatter_chart.rb +48 -0
  248. data/test/drawing/tc_scatter_series.rb +56 -0
  249. data/test/drawing/tc_ser_axis.rb +31 -0
  250. data/test/drawing/tc_series.rb +23 -0
  251. data/test/drawing/tc_series_title.rb +33 -0
  252. data/test/drawing/tc_str_data.rb +18 -0
  253. data/test/drawing/tc_str_val.rb +30 -0
  254. data/test/drawing/tc_title.rb +54 -0
  255. data/test/drawing/tc_two_cell_anchor.rb +36 -0
  256. data/test/drawing/tc_val_axis.rb +24 -0
  257. data/test/drawing/tc_view_3D.rb +54 -0
  258. data/test/drawing/tc_vml_drawing.rb +25 -0
  259. data/test/drawing/tc_vml_shape.rb +106 -0
  260. data/test/profile.rb +24 -0
  261. data/test/rels/tc_relationship.rb +44 -0
  262. data/test/rels/tc_relationships.rb +37 -0
  263. data/test/stylesheet/tc_border.rb +37 -0
  264. data/test/stylesheet/tc_border_pr.rb +32 -0
  265. data/test/stylesheet/tc_cell_alignment.rb +81 -0
  266. data/test/stylesheet/tc_cell_protection.rb +29 -0
  267. data/test/stylesheet/tc_cell_style.rb +57 -0
  268. data/test/stylesheet/tc_color.rb +43 -0
  269. data/test/stylesheet/tc_dxf.rb +81 -0
  270. data/test/stylesheet/tc_fill.rb +18 -0
  271. data/test/stylesheet/tc_font.rb +121 -0
  272. data/test/stylesheet/tc_gradient_fill.rb +72 -0
  273. data/test/stylesheet/tc_gradient_stop.rb +31 -0
  274. data/test/stylesheet/tc_num_fmt.rb +30 -0
  275. data/test/stylesheet/tc_pattern_fill.rb +43 -0
  276. data/test/stylesheet/tc_styles.rb +235 -0
  277. data/test/stylesheet/tc_table_style.rb +44 -0
  278. data/test/stylesheet/tc_table_style_element.rb +45 -0
  279. data/test/stylesheet/tc_table_styles.rb +29 -0
  280. data/test/stylesheet/tc_xf.rb +120 -0
  281. data/test/tc_axlsx.rb +103 -0
  282. data/test/tc_helper.rb +12 -0
  283. data/test/tc_package.rb +245 -0
  284. data/test/util/tc_mime_type_utils.rb +13 -0
  285. data/test/util/tc_serialized_attributes.rb +19 -0
  286. data/test/util/tc_simple_typed_list.rb +77 -0
  287. data/test/util/tc_validators.rb +210 -0
  288. data/test/workbook/tc_defined_name.rb +49 -0
  289. data/test/workbook/tc_shared_strings_table.rb +59 -0
  290. data/test/workbook/tc_workbook.rb +160 -0
  291. data/test/workbook/tc_workbook_view.rb +50 -0
  292. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -0
  293. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -0
  294. data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -0
  295. data/test/workbook/worksheet/tc_break.rb +49 -0
  296. data/test/workbook/worksheet/tc_cell.rb +387 -0
  297. data/test/workbook/worksheet/tc_cfvo.rb +31 -0
  298. data/test/workbook/worksheet/tc_col.rb +78 -0
  299. data/test/workbook/worksheet/tc_color_scale.rb +58 -0
  300. data/test/workbook/worksheet/tc_comment.rb +72 -0
  301. data/test/workbook/worksheet/tc_comments.rb +57 -0
  302. data/test/workbook/worksheet/tc_conditional_formatting.rb +224 -0
  303. data/test/workbook/worksheet/tc_data_bar.rb +46 -0
  304. data/test/workbook/worksheet/tc_data_validation.rb +265 -0
  305. data/test/workbook/worksheet/tc_date_time_converter.rb +124 -0
  306. data/test/workbook/worksheet/tc_header_footer.rb +151 -0
  307. data/test/workbook/worksheet/tc_icon_set.rb +45 -0
  308. data/test/workbook/worksheet/tc_outline_pr.rb +19 -0
  309. data/test/workbook/worksheet/tc_page_margins.rb +97 -0
  310. data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -0
  311. data/test/workbook/worksheet/tc_page_setup.rb +143 -0
  312. data/test/workbook/worksheet/tc_pane.rb +54 -0
  313. data/test/workbook/worksheet/tc_pivot_table.rb +135 -0
  314. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +54 -0
  315. data/test/workbook/worksheet/tc_print_options.rb +72 -0
  316. data/test/workbook/worksheet/tc_protected_range.rb +17 -0
  317. data/test/workbook/worksheet/tc_rich_text.rb +44 -0
  318. data/test/workbook/worksheet/tc_rich_text_run.rb +172 -0
  319. data/test/workbook/worksheet/tc_row.rb +122 -0
  320. data/test/workbook/worksheet/tc_selection.rb +55 -0
  321. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -0
  322. data/test/workbook/worksheet/tc_sheet_format_pr.rb +88 -0
  323. data/test/workbook/worksheet/tc_sheet_pr.rb +49 -0
  324. data/test/workbook/worksheet/tc_sheet_protection.rb +117 -0
  325. data/test/workbook/worksheet/tc_sheet_view.rb +214 -0
  326. data/test/workbook/worksheet/tc_table.rb +67 -0
  327. data/test/workbook/worksheet/tc_table_style_info.rb +53 -0
  328. data/test/workbook/worksheet/tc_worksheet.rb +597 -0
  329. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +55 -0
  330. metadata +601 -0
@@ -0,0 +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 :bestFilt, :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
@@ -0,0 +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
@@ -0,0 +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
@@ -0,0 +1,100 @@
1
+ # encoding: UTF-8
2
+ module Axlsx
3
+ # a hyperlink object adds an action to an image when clicked so that when the image is clicked the link is fecthed.
4
+ # @note using the hyperlink option when calling add_image on a drawing object is the recommended way to manage hyperlinks
5
+ # @see {file:README} README
6
+ class Hyperlink
7
+
8
+ include Axlsx::SerializedAttributes
9
+ include Axlsx::OptionsParser
10
+
11
+ #Creates a hyperlink object
12
+ # parent must be a Pic for now, although I expect that other object support this tag and its cNvPr parent
13
+ # @param [Pic] parent
14
+ # @option options [String] tooltip message shown when hyperlinked object is hovered over with mouse.
15
+ # @option options [String] tgtFrame Target frame for opening hyperlink
16
+ # @option options [String] invalidUrl supposedly use to store the href when we know it is an invalid resource.
17
+ # @option options [String] href the target resource this hyperlink links to. This is actually stored on the relationship.
18
+ # @option options [String] action A string that can be used to perform specific actions. For excel please see this reference: http://msdn.microsoft.com/en-us/library/ff532419%28v=office.12%29.aspx
19
+ # @option options [Boolean] endSnd terminate any sound events when processing this link
20
+ # @option options [Boolean] history include this link in the list of visited links for the applications history.
21
+ # @option options [Boolean] highlightClick indicate that the link has already been visited.
22
+ def initialize(parent, options={})
23
+ DataTypeValidator.validate "Hyperlink.parent", [Pic], parent
24
+ @parent = parent
25
+ parse_options options
26
+ yield self if block_given?
27
+ end
28
+
29
+ serializable_attributes :invalid_url, :action, :end_snd, :highlight_click, :history, :tgt_frame, :tooltip
30
+
31
+ # The destination of the hyperlink stored in the drawing's relationships document.
32
+ # @return [String]
33
+ attr_accessor :href
34
+
35
+ # The spec says: Specifies the URL when it has been determined by the generating application that the URL is invalid. That is the generating application can still store the URL but it is known that this URL is not correct.
36
+ #
37
+ # What exactly that means is beyond me so if you ever use this, let me know!
38
+ # @return [String]
39
+ attr_accessor :invalid_url
40
+ alias :invalidUrl :invalid_url
41
+ alias :invalidUrl= :invalid_url=
42
+
43
+ #An action to take when the link is clicked. The specification says "This can be used to specify a slide to be navigated to or a script of code to be run." but in most cases you will not need to do anything with this. MS does reserve a few interesting strings. @see http://msdn.microsoft.com/en-us/library/ff532419%28v=office.12%29.aspx
44
+ # @return [String]
45
+ attr_accessor :action
46
+
47
+ # Specifies if all sound events should be terminated when this link is clicked.
48
+ # @return [Boolean]
49
+ attr_reader :end_snd
50
+ alias :endSnd :end_snd
51
+
52
+ # @see endSnd
53
+ # @param [Boolean] v The boolean value indicating the termination of playing sounds on click
54
+ # @return [Boolean]
55
+ def end_snd=(v) Axlsx::validate_boolean(v); @end_snd = v end
56
+ alias :endSnd= :end_snd=
57
+
58
+ # indicates that the link has already been clicked.
59
+ # @return [Boolean]
60
+ attr_reader :highlight_click
61
+ alias :highlightClick :highlight_click
62
+
63
+ # @see highlightClick
64
+ # @param [Boolean] v The value to assign
65
+ def highlight_click=(v) Axlsx::validate_boolean(v); @highlight_click = v end
66
+ alias :highlightClick= :highlight_click=
67
+
68
+ # From the specs: Specifies whether to add this URI to the history when navigating to it. This allows for the viewing of this presentation without the storing of history information on the viewing machine. If this attribute is omitted, then a value of 1 or true is assumed.
69
+ # @return [Boolean]
70
+ attr_reader :history
71
+
72
+ # @see history
73
+ # param [Boolean] v The value to assing
74
+ def history=(v) Axlsx::validate_boolean(v); @history = v end
75
+
76
+ # From the specs: Specifies the target frame that is to be used when opening this hyperlink. When the hyperlink is activated this attribute is used to determine if a new window is launched for viewing or if an existing one can be used. If this attribute is omitted, than a new window is opened.
77
+ # @return [String]
78
+ attr_accessor :tgt_frame
79
+ alias :tgtFrame :tgt_frame
80
+ alias :tgtFrame= :tgt_frame=
81
+
82
+ # Text to show when you mouse over the hyperlink. If you do not set this, the href property will be shown.
83
+ # @return [String]
84
+ attr_accessor :tooltip
85
+
86
+ # The relationship object for this hyperlink.
87
+ # @return [Relationship]
88
+ def relationship
89
+ Relationship.new(self, HYPERLINK_R, href, :target_mode => :External)
90
+ end
91
+
92
+ # Serializes the object
93
+ # @param [String] str
94
+ # @return [String]
95
+ def to_xml_string(str = '')
96
+ serialized_tag 'a:hlinkClick', str, {:'r:id' => relationship.Id, :'xmlns:r' => XML_NS_R }
97
+ end
98
+
99
+ end
100
+ end
@@ -0,0 +1,68 @@
1
+ # encoding: UTF-8
2
+ module Axlsx
3
+
4
+ # The Line3DChart is a three dimentional line chart (who would have guessed?) that you can add to your worksheet.
5
+ # @example Creating a chart
6
+ # # This example creates a line in a single sheet.
7
+ # require "rubygems" # if that is your preferred way to manage gems!
8
+ # require "axlsx"
9
+ #
10
+ # p = Axlsx::Package.new
11
+ # ws = p.workbook.add_worksheet
12
+ # ws.add_row ["This is a chart with no data in the sheet"]
13
+ #
14
+ # chart = ws.add_chart(Axlsx::Line3DChart, :start_at=> [0,1], :end_at=>[0,6], :t#itle=>"Most Popular Pets")
15
+ # chart.add_series :data => [1, 9, 10], :labels => ["Slimy Reptiles", "Fuzzy Bunnies", "Rottweiler"]
16
+ #
17
+ # @see Worksheet#add_chart
18
+ # @see Worksheet#add_row
19
+ # @see Chart#add_series
20
+ # @see Series
21
+ # @see Package#serialize
22
+ class Line3DChart < Axlsx::LineChart
23
+
24
+ # space between bar or column clusters, as a percentage of the bar or column width.
25
+ # @return [String]
26
+ attr_reader :gap_depth
27
+ alias :gapDepth :gap_depth
28
+
29
+ # validation regex for gap amount percent
30
+ GAP_AMOUNT_PERCENT = /0*(([0-9])|([1-9][0-9])|([1-4][0-9][0-9])|500)%/
31
+
32
+ # the category axis
33
+ # @return [Axis]
34
+ def ser_axis
35
+ axes[:ser_axis]
36
+ end
37
+ alias :serAxis :ser_axis
38
+
39
+ # Creates a new line chart object
40
+ # @option options [String] gap_depth
41
+ # @see Chart
42
+ # @see lineChart
43
+ # @see View3D
44
+ def initialize(frame, options={})
45
+ @gap_depth = nil
46
+ @view_3D = View3D.new({:r_ang_ax=>1}.merge(options))
47
+ super(frame, options)
48
+ axes.add_axis :ser_axis, SerAxis
49
+ end
50
+
51
+
52
+ # @see gapDepth
53
+ def gap_depth=(v)
54
+ RegexValidator.validate "Line3DChart.gapWidth", GAP_AMOUNT_PERCENT, v
55
+ @gap_depth=(v)
56
+ end
57
+ alias :gapDepth= :gap_depth=
58
+
59
+ # Serializes the object
60
+ # @param [String] str
61
+ # @return [String]
62
+ def to_xml_string(str = '')
63
+ super(str) do
64
+ str << ('<c:gapDepth val="' << @gap_depth.to_s << '"/>') unless @gap_depth.nil?
65
+ end
66
+ end
67
+ end
68
+ end