axlsx-alt 3.0.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 (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,137 @@
1
+ # encoding: UTF-8
2
+ module Axlsx
3
+ # A relationship defines a reference between package parts.
4
+ # @note Packages automatically manage relationships.
5
+ class Relationship
6
+
7
+ class << self
8
+ # Keeps track of all instances of this class.
9
+ # @return [Array]
10
+ def instances
11
+ Thread.current[:axlsx_relationship_cached_instances] ||= []
12
+ end
13
+
14
+ # Initialize cached instances.
15
+ #
16
+ # This should be called before serializing a package (see {Package#serialize} and
17
+ # {Package#to_stream}) to make sure that serialization is idempotent (i.e.
18
+ # Relationship instances are generated with the same IDs everytime the package
19
+ # is serialized).
20
+ def initialize_cached_instances
21
+ Thread.current[:axlsx_relationship_cached_instances] = []
22
+ end
23
+
24
+ # Clear cached instances.
25
+ #
26
+ # This should be called after serializing a package (see {Package#serialize} and
27
+ # {Package#to_stream}) to free the memory allocated for cache.
28
+ #
29
+ # Also, calling this avoids memory leaks (cached instances lingering around
30
+ # forever).
31
+ def clear_cached_instances
32
+ Thread.current[:axlsx_relationship_cached_instances] = nil
33
+ end
34
+
35
+ # Generate and return a unique id (eg. `rId123`) Used for setting {#Id}.
36
+ #
37
+ # The generated id depends on the number of cached instances, so using
38
+ # {clear_cached_instances} will automatically reset the generated ids, too.
39
+ # @return [String]
40
+ def next_free_id
41
+ "rId#{instances.size + 1}"
42
+ end
43
+ end
44
+
45
+ # The id of the relationship (eg. "rId123"). Most instances get their own unique id.
46
+ # However, some instances need to share the same id – see {#should_use_same_id_as?}
47
+ # for details.
48
+ # @return [String]
49
+ attr_reader :Id
50
+
51
+ # The location of the relationship target
52
+ # @return [String]
53
+ attr_reader :Target
54
+
55
+ # The type of relationship
56
+ # @note Supported types are defined as constants in Axlsx:
57
+ # @see XML_NS_R
58
+ # @see TABLE_R
59
+ # @see PIVOT_TABLE_R
60
+ # @see WORKBOOK_R
61
+ # @see WORKSHEET_R
62
+ # @see APP_R
63
+ # @see RELS_R
64
+ # @see CORE_R
65
+ # @see STYLES_R
66
+ # @see CHART_R
67
+ # @see DRAWING_R
68
+ # @return [String]
69
+ attr_reader :Type
70
+
71
+ # The target mode of the relationship
72
+ # used for hyperlink type relationships to mark the relationship to an external resource
73
+ # TargetMode can be specified during initialization by passing in a :target_mode option
74
+ # Target mode must be :external for now.
75
+ attr_reader :TargetMode
76
+
77
+ # The source object the relations belongs to (e.g. a hyperlink, drawing, ...). Needed when
78
+ # looking up the relationship for a specific object (see {Relationships#for}).
79
+ attr_reader :source_obj
80
+
81
+ # Initializes a new relationship.
82
+ # @param [Object] source_obj see {#source_obj}
83
+ # @param [String] type The type of the relationship
84
+ # @param [String] target The target for the relationship
85
+ # @option [Symbol] :target_mode only accepts :external.
86
+ def initialize(source_obj, type, target, options={})
87
+ @source_obj = source_obj
88
+ self.Target=target
89
+ self.Type=type
90
+ self.TargetMode = options[:target_mode] if options[:target_mode]
91
+ @Id = if (existing = self.class.instances.find{ |i| should_use_same_id_as?(i) })
92
+ existing.Id
93
+ else
94
+ self.class.next_free_id
95
+ end
96
+ self.class.instances << self
97
+ end
98
+
99
+ # @see Target
100
+ def Target=(v) Axlsx::validate_string v; @Target = v end
101
+ # @see Type
102
+ def Type=(v) Axlsx::validate_relationship_type v; @Type = v end
103
+
104
+ # @see TargetMode
105
+ def TargetMode=(v) RestrictionValidator.validate 'Relationship.TargetMode', [:External, :Internal], v; @TargetMode = v; end
106
+
107
+ # serialize relationship
108
+ # @param [String] str
109
+ # @return [String]
110
+ def to_xml_string(str = '')
111
+ h = self.instance_values.reject{|k, _| k == "source_obj"}
112
+ str << '<Relationship '
113
+ str << (h.map { |key, value| '' << key.to_s << '="' << Axlsx::coder.encode(value.to_s) << '"'}.join(' '))
114
+ str << '/>'
115
+ end
116
+
117
+ # Whether this relationship should use the same id as `other`.
118
+ #
119
+ # Instances designating the same relationship need to use the same id. We can not simply
120
+ # compare the {#Target} attribute, though: `foo/bar.xml`, `../foo/bar.xml`,
121
+ # `../../foo/bar.xml` etc. are all different but probably mean the same file (this
122
+ # is especially an issue for relationships in the context of pivot tables). So lets
123
+ # just ignore this attribute for now (except when {#TargetMode} is set to `:External` –
124
+ # then {#Target} will be an absolute URL and thus can safely be compared).
125
+ #
126
+ # @todo Implement comparison of {#Target} based on normalized path names.
127
+ # @param other [Relationship]
128
+ def should_use_same_id_as?(other)
129
+ result = self.source_obj == other.source_obj && self.Type == other.Type && self.TargetMode == other.TargetMode
130
+ if self.TargetMode == :External
131
+ result &&= self.Target == other.Target
132
+ end
133
+ result
134
+ end
135
+
136
+ end
137
+ end
@@ -0,0 +1,32 @@
1
+ # encoding: UTF-8
2
+ module Axlsx
3
+ require 'axlsx/rels/relationship.rb'
4
+
5
+ # Relationships are a collection of Relations that define how package parts are related.
6
+ # @note The package automatically manages releationships.
7
+ class Relationships < SimpleTypedList
8
+
9
+ # Creates a new Relationships collection based on SimpleTypedList
10
+ def initialize
11
+ super Relationship
12
+ end
13
+
14
+ # The relationship instance for the given source object, or nil if none exists.
15
+ # @see Relationship#source_obj
16
+ # @return [Relationship]
17
+ def for(source_obj)
18
+ find{ |rel| rel.source_obj == source_obj }
19
+ end
20
+
21
+ # serialize relationships
22
+ # @param [String] str
23
+ # @return [String]
24
+ def to_xml_string(str = '')
25
+ str << '<?xml version="1.0" encoding="UTF-8"?>'
26
+ str << ('<Relationships xmlns="' << RELS_R << '">')
27
+ each{ |rel| rel.to_xml_string(str) }
28
+ str << '</Relationships>'
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,71 @@
1
+ # encoding: UTF-8
2
+ module Axlsx
3
+ # This class details a border used in Office Open XML spreadsheet styles.
4
+ class Border
5
+
6
+ include Axlsx::SerializedAttributes
7
+ include Axlsx::OptionsParser
8
+
9
+ # Creates a new Border object
10
+ # @option options [Boolean] diagonal_up
11
+ # @option options [Boolean] diagonal_down
12
+ # @option options [Boolean] outline
13
+ # @example - Making a border
14
+ # p = Axlsx::Package.new
15
+ # red_border = p.workbook.styles.add_style :border => { :style => :thin, :color => "FFFF0000" }
16
+ # ws = p.workbook.add_worksheet
17
+ # ws.add_row [1,2,3], :style => red_border
18
+ # p.serialize('red_border.xlsx')
19
+ #
20
+ # @note The recommended way to manage borders is with Style#add_style
21
+ # @see Style#add_style
22
+ def initialize(options={})
23
+ @prs = SimpleTypedList.new BorderPr
24
+ parse_options options
25
+ end
26
+
27
+ serializable_attributes :diagonal_up, :diagonal_down, :outline
28
+
29
+ # @return [Boolean] The diagonal up property for the border that indicates if the border should include a diagonal line from the bottom left to the top right of the cell.
30
+ attr_reader :diagonal_up
31
+ alias :diagonalUp :diagonal_up
32
+
33
+ # @return [Boolean] The diagonal down property for the border that indicates if the border should include a diagonal line from the top left to the top right of the cell.
34
+ attr_reader :diagonal_down
35
+ alias :diagonalDown :diagonal_down
36
+
37
+ # @return [Boolean] The outline property for the border indicating that top, left, right and bottom borders should only be applied to the outside border of a range of cells.
38
+ attr_reader :outline
39
+
40
+ # @return [SimpleTypedList] A list of BorderPr objects for this border.
41
+ attr_reader :prs
42
+
43
+ # @see diagonalUp
44
+ def diagonal_up=(v) Axlsx::validate_boolean v; @diagonal_up = v end
45
+ alias :diagonalUp= :diagonal_up=
46
+
47
+ # @see diagonalDown
48
+ def diagonal_down=(v) Axlsx::validate_boolean v; @diagonal_down = v end
49
+ alias :diagonalDown= :diagonal_down=
50
+
51
+ # @see outline
52
+ def outline=(v) Axlsx::validate_boolean v; @outline = v end
53
+
54
+ # Serializes the object
55
+ # @param [String] str
56
+ # @return [String]
57
+ def to_xml_string(str = '')
58
+ str << '<border '
59
+ serialized_attributes str
60
+ str << '>'
61
+ # enforces order
62
+ [:start, :end, :left, :right, :top, :bottom, :diagonal, :vertical, :horizontal].each do |k|
63
+ @prs.select { |pr| pr.name == k }.each do |part|
64
+ part.to_xml_string(str)
65
+ end
66
+ end
67
+ str << '</border>'
68
+ end
69
+
70
+ end
71
+ end
@@ -0,0 +1,71 @@
1
+ # encoding: UTF-8
2
+ module Axlsx
3
+ # A border part.
4
+ class BorderPr
5
+ include Axlsx::OptionsParser
6
+ # @return [Color] The color of this border part.
7
+ attr_reader :color
8
+
9
+ # @return [Symbol] The syle of this border part.
10
+ # @note
11
+ # The following are allowed
12
+ # :none
13
+ # :thin
14
+ # :medium
15
+ # :dashed
16
+ # :dotted
17
+ # :thick
18
+ # :double
19
+ # :hair
20
+ # :mediumDashed
21
+ # :dashDot
22
+ # :mediumDashDot
23
+ # :dashDotDot
24
+ # :mediumDashDotDot
25
+ # :slantDashDot
26
+ attr_reader :style
27
+
28
+ # @return [Symbol] The name of this border part
29
+ # @note
30
+ # The following are allowed
31
+ # :start
32
+ # :end
33
+ # :left
34
+ # :right
35
+ # :top
36
+ # :bottom
37
+ # :diagonal
38
+ # :vertical
39
+ # :horizontal
40
+ attr_reader :name
41
+
42
+ # Creates a new Border Part Object
43
+ # @option options [Color] color
44
+ # @option options [Symbol] name
45
+ # @option options [Symbol] style
46
+ # @see Axlsx::Border
47
+ def initialize(options={})
48
+ parse_options(options)
49
+ #options.each do |o|
50
+ # self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}="
51
+ #end
52
+ end
53
+
54
+ # @see name
55
+ def name=(v) RestrictionValidator.validate "BorderPr.name", [:start, :end, :left, :right, :top, :bottom, :diagonal, :vertical, :horizontal], v; @name = v end
56
+ # @see color
57
+ def color=(v) DataTypeValidator.validate(:color, Color, v); @color = v end
58
+ # @see style
59
+ def style=(v) RestrictionValidator.validate "BorderPr.style", [:none, :thin, :medium, :dashed, :dotted, :thick, :double, :hair, :mediumDashed, :dashDot, :mediumDashDot, :dashDotDot, :mediumDashDotDot, :slantDashDot], v; @style = v end
60
+
61
+ # Serializes the object
62
+ # @param [String] str
63
+ # @return [String]
64
+ def to_xml_string(str = '')
65
+ str << ('<' << @name.to_s << ' style="' << @style.to_s << '">')
66
+ @color.to_xml_string(str) if @color.is_a?(Color)
67
+ str << ('</' << @name.to_s << '>')
68
+ end
69
+
70
+ end
71
+ end
@@ -0,0 +1,132 @@
1
+ # encoding: UTF-8
2
+ module Axlsx
3
+
4
+
5
+ # CellAlignment stores information about the cell alignment of a style Xf Object.
6
+ # @note Using Styles#add_style is the recommended way to manage cell alignment.
7
+ # @see Styles#add_style
8
+ class CellAlignment
9
+
10
+
11
+ include Axlsx::SerializedAttributes
12
+ include Axlsx::OptionsParser
13
+
14
+ serializable_attributes :horizontal, :vertical, :text_rotation, :wrap_text, :indent, :relative_indent, :justify_last_line, :shrink_to_fit, :reading_order
15
+ # Create a new cell_alignment object
16
+ # @option options [Symbol] horizontal
17
+ # @option options [Symbol] vertical
18
+ # @option options [Integer] text_rotation
19
+ # @option options [Boolean] wrap_text
20
+ # @option options [Integer] indent
21
+ # @option options [Integer] relative_indent
22
+ # @option options [Boolean] justify_last_line
23
+ # @option options [Boolean] shrink_to_fit
24
+ # @option options [Integer] reading_order
25
+ def initialize(options={})
26
+ parse_options options
27
+ end
28
+
29
+
30
+
31
+ # The horizontal alignment of the cell.
32
+ # @note
33
+ # The horizontal cell alignement style must be one of
34
+ # :general
35
+ # :left
36
+ # :center
37
+ # :right
38
+ # :fill
39
+ # :justify
40
+ # :centerContinuous
41
+ # :distributed
42
+ # @return [Symbol]
43
+ attr_reader :horizontal
44
+
45
+ # The vertical alignment of the cell.
46
+ # @note
47
+ # The vertical cell allingment style must be one of the following:
48
+ # :top
49
+ # :center
50
+ # :bottom
51
+ # :justify
52
+ # :distributed
53
+ # @return [Symbol]
54
+ attr_reader :vertical
55
+
56
+ # The textRotation of the cell.
57
+ # @return [Integer]
58
+ attr_reader :text_rotation
59
+ alias :textRotation :text_rotation
60
+
61
+ # Indicate if the text of the cell should wrap
62
+ # @return [Boolean]
63
+ attr_reader :wrap_text
64
+ alias :wrapText :wrap_text
65
+
66
+ # The amount of indent
67
+ # @return [Integer]
68
+ attr_reader :indent
69
+
70
+ # The amount of relativeIndent
71
+ # @return [Integer]
72
+ attr_reader :relative_indent
73
+ alias :relativeIndent :relative_indent
74
+
75
+ # Indicate if the last line should be justified.
76
+ # @return [Boolean]
77
+ attr_reader :justify_last_line
78
+ alias :justifyLastLine :justify_last_line
79
+
80
+ # Indicate if the text should be shrunk to the fit in the cell.
81
+ # @return [Boolean]
82
+ attr_reader :shrink_to_fit
83
+ alias :shrinkToFit :shrink_to_fit
84
+
85
+ # The reading order of the text
86
+ # 0 Context Dependent
87
+ # 1 Left-to-Right
88
+ # 2 Right-to-Left
89
+ # @return [Integer]
90
+ attr_reader :reading_order
91
+ alias :readingOrder :reading_order
92
+
93
+ # @see horizontal
94
+ def horizontal=(v) Axlsx::validate_horizontal_alignment v; @horizontal = v end
95
+ # @see vertical
96
+ def vertical=(v) Axlsx::validate_vertical_alignment v; @vertical = v end
97
+ # @see textRotation
98
+ def text_rotation=(v) Axlsx::validate_unsigned_int v; @text_rotation = v end
99
+ alias :textRotation= :text_rotation=
100
+
101
+ # @see wrapText
102
+ def wrap_text=(v) Axlsx::validate_boolean v; @wrap_text = v end
103
+ alias :wrapText= :wrap_text=
104
+
105
+ # @see indent
106
+ def indent=(v) Axlsx::validate_unsigned_int v; @indent = v end
107
+
108
+ # @see relativeIndent
109
+ def relative_indent=(v) Axlsx::validate_int v; @relative_indent = v end
110
+ alias :relativeIndent= :relative_indent=
111
+
112
+ # @see justifyLastLine
113
+ def justify_last_line=(v) Axlsx::validate_boolean v; @justify_last_line = v end
114
+ alias :justifyLastLine= :justify_last_line=
115
+
116
+ # @see shrinkToFit
117
+ def shrink_to_fit=(v) Axlsx::validate_boolean v; @shrink_to_fit = v end
118
+ alias :shrinkToFit= :shrink_to_fit=
119
+
120
+ # @see readingOrder
121
+ def reading_order=(v) Axlsx::validate_unsigned_int v; @reading_order = v end
122
+ alias :readingOrder= :reading_order=
123
+
124
+ # Serializes the object
125
+ # @param [String] str
126
+ # @return [String]
127
+ def to_xml_string(str = '')
128
+ serialized_tag('alignment', str)
129
+ end
130
+
131
+ end
132
+ end
@@ -0,0 +1,41 @@
1
+ # encoding: UTF-8
2
+ module Axlsx
3
+ # CellProtection stores information about locking or hiding cells in spreadsheet.
4
+ # @note Using Styles#add_style is the recommended way to manage cell protection.
5
+ # @see Styles#add_style
6
+ class CellProtection
7
+
8
+ include Axlsx::OptionsParser
9
+ include Axlsx::SerializedAttributes
10
+
11
+ serializable_attributes :hidden, :locked
12
+
13
+ # specifies locking for cells that have the style containing this protection
14
+ # @return [Boolean]
15
+ attr_reader :hidden
16
+
17
+ # specifies if the cells that have the style containing this protection
18
+ # @return [Boolean]
19
+ attr_reader :locked
20
+
21
+ # Creates a new CellProtection
22
+ # @option options [Boolean] hidden value for hidden protection
23
+ # @option options [Boolean] locked value for locked protection
24
+ def initialize(options={})
25
+ parse_options options
26
+ end
27
+
28
+ # @see hidden
29
+ def hidden=(v) Axlsx::validate_boolean v; @hidden = v end
30
+ # @see locked
31
+ def locked=(v) Axlsx::validate_boolean v; @locked = v end
32
+
33
+ # Serializes the object
34
+ # @param [String] str
35
+ # @return [String]
36
+ def to_xml_string(str = '')
37
+ serialized_tag('protection', str)
38
+ end
39
+
40
+ end
41
+ end