caxlsx 2.0.2

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 (305) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +9 -0
  3. data/.yardopts_guide +19 -0
  4. data/CHANGELOG.md +239 -0
  5. data/LICENSE +22 -0
  6. data/README.md +256 -0
  7. data/Rakefile +31 -0
  8. data/examples/2010_comments.rb +17 -0
  9. data/examples/anchor_swapping.rb +28 -0
  10. data/examples/auto_filter.rb +16 -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 +74 -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 +50 -0
  20. data/examples/example.rb +777 -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/page_setup.rb +11 -0
  25. data/examples/pivot_table.rb +39 -0
  26. data/examples/sheet_protection.rb +10 -0
  27. data/examples/skydrive/real_example.rb +63 -0
  28. data/examples/styles.rb +66 -0
  29. data/examples/underline.rb +13 -0
  30. data/examples/wrap_text.rb +21 -0
  31. data/lib/axlsx.rb +152 -0
  32. data/lib/axlsx/content_type/abstract_content_type.rb +32 -0
  33. data/lib/axlsx/content_type/content_type.rb +26 -0
  34. data/lib/axlsx/content_type/default.rb +25 -0
  35. data/lib/axlsx/content_type/override.rb +25 -0
  36. data/lib/axlsx/doc_props/app.rb +235 -0
  37. data/lib/axlsx/doc_props/core.rb +39 -0
  38. data/lib/axlsx/drawing/ax_data_source.rb +26 -0
  39. data/lib/axlsx/drawing/axes.rb +61 -0
  40. data/lib/axlsx/drawing/axis.rb +187 -0
  41. data/lib/axlsx/drawing/bar_3D_chart.rb +151 -0
  42. data/lib/axlsx/drawing/bar_series.rb +82 -0
  43. data/lib/axlsx/drawing/cat_axis.rb +85 -0
  44. data/lib/axlsx/drawing/chart.rb +232 -0
  45. data/lib/axlsx/drawing/d_lbls.rb +90 -0
  46. data/lib/axlsx/drawing/drawing.rb +162 -0
  47. data/lib/axlsx/drawing/graphic_frame.rb +54 -0
  48. data/lib/axlsx/drawing/hyperlink.rb +102 -0
  49. data/lib/axlsx/drawing/line_3D_chart.rb +68 -0
  50. data/lib/axlsx/drawing/line_chart.rb +99 -0
  51. data/lib/axlsx/drawing/line_series.rb +81 -0
  52. data/lib/axlsx/drawing/marker.rb +84 -0
  53. data/lib/axlsx/drawing/num_data.rb +52 -0
  54. data/lib/axlsx/drawing/num_data_source.rb +62 -0
  55. data/lib/axlsx/drawing/num_val.rb +32 -0
  56. data/lib/axlsx/drawing/one_cell_anchor.rb +98 -0
  57. data/lib/axlsx/drawing/pic.rb +205 -0
  58. data/lib/axlsx/drawing/picture_locking.rb +44 -0
  59. data/lib/axlsx/drawing/pie_3D_chart.rb +48 -0
  60. data/lib/axlsx/drawing/pie_series.rb +74 -0
  61. data/lib/axlsx/drawing/scaling.rb +60 -0
  62. data/lib/axlsx/drawing/scatter_chart.rb +74 -0
  63. data/lib/axlsx/drawing/scatter_series.rb +65 -0
  64. data/lib/axlsx/drawing/ser_axis.rb +45 -0
  65. data/lib/axlsx/drawing/series.rb +69 -0
  66. data/lib/axlsx/drawing/series_title.rb +23 -0
  67. data/lib/axlsx/drawing/str_data.rb +42 -0
  68. data/lib/axlsx/drawing/str_val.rb +32 -0
  69. data/lib/axlsx/drawing/title.rb +78 -0
  70. data/lib/axlsx/drawing/two_cell_anchor.rb +92 -0
  71. data/lib/axlsx/drawing/val_axis.rb +37 -0
  72. data/lib/axlsx/drawing/view_3D.rb +115 -0
  73. data/lib/axlsx/drawing/vml_drawing.rb +42 -0
  74. data/lib/axlsx/drawing/vml_shape.rb +66 -0
  75. data/lib/axlsx/package.rb +352 -0
  76. data/lib/axlsx/rels/relationship.rb +129 -0
  77. data/lib/axlsx/rels/relationships.rb +29 -0
  78. data/lib/axlsx/stylesheet/border.rb +71 -0
  79. data/lib/axlsx/stylesheet/border_pr.rb +71 -0
  80. data/lib/axlsx/stylesheet/cell_alignment.rb +134 -0
  81. data/lib/axlsx/stylesheet/cell_protection.rb +43 -0
  82. data/lib/axlsx/stylesheet/cell_style.rb +74 -0
  83. data/lib/axlsx/stylesheet/color.rb +78 -0
  84. data/lib/axlsx/stylesheet/dxf.rb +79 -0
  85. data/lib/axlsx/stylesheet/fill.rb +35 -0
  86. data/lib/axlsx/stylesheet/font.rb +148 -0
  87. data/lib/axlsx/stylesheet/gradient_fill.rb +103 -0
  88. data/lib/axlsx/stylesheet/gradient_stop.rb +37 -0
  89. data/lib/axlsx/stylesheet/num_fmt.rb +79 -0
  90. data/lib/axlsx/stylesheet/pattern_fill.rb +73 -0
  91. data/lib/axlsx/stylesheet/styles.rb +420 -0
  92. data/lib/axlsx/stylesheet/table_style.rb +54 -0
  93. data/lib/axlsx/stylesheet/table_style_element.rb +79 -0
  94. data/lib/axlsx/stylesheet/table_styles.rb +46 -0
  95. data/lib/axlsx/stylesheet/xf.rb +147 -0
  96. data/lib/axlsx/util/accessors.rb +64 -0
  97. data/lib/axlsx/util/constants.rb +392 -0
  98. data/lib/axlsx/util/options_parser.rb +15 -0
  99. data/lib/axlsx/util/parser.rb +44 -0
  100. data/lib/axlsx/util/serialized_attributes.rb +79 -0
  101. data/lib/axlsx/util/simple_typed_list.rb +203 -0
  102. data/lib/axlsx/util/storage.rb +146 -0
  103. data/lib/axlsx/util/validators.rb +300 -0
  104. data/lib/axlsx/version.rb +5 -0
  105. data/lib/axlsx/workbook/defined_name.rb +129 -0
  106. data/lib/axlsx/workbook/defined_names.rb +21 -0
  107. data/lib/axlsx/workbook/shared_strings_table.rb +77 -0
  108. data/lib/axlsx/workbook/workbook.rb +354 -0
  109. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -0
  110. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -0
  111. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +246 -0
  112. data/lib/axlsx/workbook/worksheet/break.rb +37 -0
  113. data/lib/axlsx/workbook/worksheet/cell.rb +416 -0
  114. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +144 -0
  115. data/lib/axlsx/workbook/worksheet/cfvo.rb +62 -0
  116. data/lib/axlsx/workbook/worksheet/cfvos.rb +15 -0
  117. data/lib/axlsx/workbook/worksheet/col.rb +144 -0
  118. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -0
  119. data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -0
  120. data/lib/axlsx/workbook/worksheet/cols.rb +20 -0
  121. data/lib/axlsx/workbook/worksheet/comment.rb +92 -0
  122. data/lib/axlsx/workbook/worksheet/comments.rb +85 -0
  123. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -0
  124. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -0
  125. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -0
  126. data/lib/axlsx/workbook/worksheet/data_bar.rb +131 -0
  127. data/lib/axlsx/workbook/worksheet/data_validation.rb +244 -0
  128. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -0
  129. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -0
  130. data/lib/axlsx/workbook/worksheet/dimension.rb +64 -0
  131. data/lib/axlsx/workbook/worksheet/header_footer.rb +54 -0
  132. data/lib/axlsx/workbook/worksheet/icon_set.rb +83 -0
  133. data/lib/axlsx/workbook/worksheet/merged_cells.rb +35 -0
  134. data/lib/axlsx/workbook/worksheet/page_margins.rb +99 -0
  135. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -0
  136. data/lib/axlsx/workbook/worksheet/page_setup.rb +242 -0
  137. data/lib/axlsx/workbook/worksheet/pane.rb +141 -0
  138. data/lib/axlsx/workbook/worksheet/pivot_table.rb +273 -0
  139. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -0
  140. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -0
  141. data/lib/axlsx/workbook/worksheet/print_options.rb +41 -0
  142. data/lib/axlsx/workbook/worksheet/protected_range.rb +49 -0
  143. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +34 -0
  144. data/lib/axlsx/workbook/worksheet/row.rb +172 -0
  145. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -0
  146. data/lib/axlsx/workbook/worksheet/selection.rb +103 -0
  147. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -0
  148. data/lib/axlsx/workbook/worksheet/sheet_data.rb +25 -0
  149. data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +60 -0
  150. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +69 -0
  151. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +120 -0
  152. data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -0
  153. data/lib/axlsx/workbook/worksheet/table.rb +102 -0
  154. data/lib/axlsx/workbook/worksheet/table_style_info.rb +51 -0
  155. data/lib/axlsx/workbook/worksheet/tables.rb +31 -0
  156. data/lib/axlsx/workbook/worksheet/worksheet.rb +769 -0
  157. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -0
  158. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -0
  159. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -0
  160. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -0
  161. data/lib/schema/dc.xsd +118 -0
  162. data/lib/schema/dcmitype.xsd +52 -0
  163. data/lib/schema/dcterms.xsd +331 -0
  164. data/lib/schema/dml-chart.xsd +1499 -0
  165. data/lib/schema/dml-chartDrawing.xsd +146 -0
  166. data/lib/schema/dml-compatibility.xsd +14 -0
  167. data/lib/schema/dml-diagram.xsd +1091 -0
  168. data/lib/schema/dml-lockedCanvas.xsd +11 -0
  169. data/lib/schema/dml-main.xsd +3048 -0
  170. data/lib/schema/dml-picture.xsd +23 -0
  171. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -0
  172. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -0
  173. data/lib/schema/opc-contentTypes.xsd +42 -0
  174. data/lib/schema/opc-coreProperties.xsd +54 -0
  175. data/lib/schema/opc-digSig.xsd +49 -0
  176. data/lib/schema/opc-relationships.xsd +33 -0
  177. data/lib/schema/pml.xsd +1676 -0
  178. data/lib/schema/shared-additionalCharacteristics.xsd +28 -0
  179. data/lib/schema/shared-bibliography.xsd +144 -0
  180. data/lib/schema/shared-commonSimpleTypes.xsd +166 -0
  181. data/lib/schema/shared-customXmlDataProperties.xsd +25 -0
  182. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -0
  183. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -0
  184. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -0
  185. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -0
  186. data/lib/schema/shared-math.xsd +582 -0
  187. data/lib/schema/shared-relationshipReference.xsd +25 -0
  188. data/lib/schema/sml.xsd +4434 -0
  189. data/lib/schema/vml-main.xsd +569 -0
  190. data/lib/schema/vml-officeDrawing.xsd +509 -0
  191. data/lib/schema/vml-presentationDrawing.xsd +12 -0
  192. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -0
  193. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -0
  194. data/lib/schema/wml.xsd +3644 -0
  195. data/lib/schema/xml.xsd +116 -0
  196. data/test/benchmark.rb +72 -0
  197. data/test/content_type/tc_content_type.rb +76 -0
  198. data/test/content_type/tc_default.rb +16 -0
  199. data/test/content_type/tc_override.rb +14 -0
  200. data/test/doc_props/tc_app.rb +43 -0
  201. data/test/doc_props/tc_core.rb +42 -0
  202. data/test/drawing/tc_axes.rb +8 -0
  203. data/test/drawing/tc_axis.rb +85 -0
  204. data/test/drawing/tc_bar_3D_chart.rb +71 -0
  205. data/test/drawing/tc_bar_series.rb +37 -0
  206. data/test/drawing/tc_cat_axis.rb +31 -0
  207. data/test/drawing/tc_cat_axis_data.rb +27 -0
  208. data/test/drawing/tc_chart.rb +110 -0
  209. data/test/drawing/tc_d_lbls.rb +57 -0
  210. data/test/drawing/tc_data_source.rb +17 -0
  211. data/test/drawing/tc_drawing.rb +80 -0
  212. data/test/drawing/tc_graphic_frame.rb +27 -0
  213. data/test/drawing/tc_hyperlink.rb +64 -0
  214. data/test/drawing/tc_line_3d_chart.rb +47 -0
  215. data/test/drawing/tc_line_chart.rb +39 -0
  216. data/test/drawing/tc_line_series.rb +30 -0
  217. data/test/drawing/tc_marker.rb +44 -0
  218. data/test/drawing/tc_named_axis_data.rb +27 -0
  219. data/test/drawing/tc_num_data.rb +31 -0
  220. data/test/drawing/tc_num_val.rb +29 -0
  221. data/test/drawing/tc_one_cell_anchor.rb +66 -0
  222. data/test/drawing/tc_pic.rb +107 -0
  223. data/test/drawing/tc_picture_locking.rb +72 -0
  224. data/test/drawing/tc_pie_3D_chart.rb +28 -0
  225. data/test/drawing/tc_pie_series.rb +32 -0
  226. data/test/drawing/tc_scaling.rb +36 -0
  227. data/test/drawing/tc_scatter_chart.rb +48 -0
  228. data/test/drawing/tc_scatter_series.rb +21 -0
  229. data/test/drawing/tc_ser_axis.rb +31 -0
  230. data/test/drawing/tc_series.rb +23 -0
  231. data/test/drawing/tc_series_title.rb +33 -0
  232. data/test/drawing/tc_str_data.rb +18 -0
  233. data/test/drawing/tc_str_val.rb +21 -0
  234. data/test/drawing/tc_title.rb +49 -0
  235. data/test/drawing/tc_two_cell_anchor.rb +36 -0
  236. data/test/drawing/tc_val_axis.rb +24 -0
  237. data/test/drawing/tc_view_3D.rb +54 -0
  238. data/test/drawing/tc_vml_drawing.rb +25 -0
  239. data/test/drawing/tc_vml_shape.rb +106 -0
  240. data/test/profile.rb +24 -0
  241. data/test/rels/tc_relationship.rb +44 -0
  242. data/test/rels/tc_relationships.rb +37 -0
  243. data/test/stylesheet/tc_border.rb +37 -0
  244. data/test/stylesheet/tc_border_pr.rb +32 -0
  245. data/test/stylesheet/tc_cell_alignment.rb +81 -0
  246. data/test/stylesheet/tc_cell_protection.rb +29 -0
  247. data/test/stylesheet/tc_cell_style.rb +57 -0
  248. data/test/stylesheet/tc_color.rb +43 -0
  249. data/test/stylesheet/tc_dxf.rb +81 -0
  250. data/test/stylesheet/tc_fill.rb +18 -0
  251. data/test/stylesheet/tc_font.rb +121 -0
  252. data/test/stylesheet/tc_gradient_fill.rb +72 -0
  253. data/test/stylesheet/tc_gradient_stop.rb +31 -0
  254. data/test/stylesheet/tc_num_fmt.rb +30 -0
  255. data/test/stylesheet/tc_pattern_fill.rb +43 -0
  256. data/test/stylesheet/tc_styles.rb +235 -0
  257. data/test/stylesheet/tc_table_style.rb +44 -0
  258. data/test/stylesheet/tc_table_style_element.rb +45 -0
  259. data/test/stylesheet/tc_table_styles.rb +29 -0
  260. data/test/stylesheet/tc_xf.rb +120 -0
  261. data/test/tc_axlsx.rb +72 -0
  262. data/test/tc_helper.rb +10 -0
  263. data/test/tc_package.rb +227 -0
  264. data/test/util/tc_serialized_attributes.rb +19 -0
  265. data/test/util/tc_simple_typed_list.rb +78 -0
  266. data/test/util/tc_validators.rb +186 -0
  267. data/test/workbook/tc_defined_name.rb +41 -0
  268. data/test/workbook/tc_shared_strings_table.rb +44 -0
  269. data/test/workbook/tc_workbook.rb +125 -0
  270. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -0
  271. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -0
  272. data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -0
  273. data/test/workbook/worksheet/tc_break.rb +49 -0
  274. data/test/workbook/worksheet/tc_cell.rb +319 -0
  275. data/test/workbook/worksheet/tc_cfvo.rb +31 -0
  276. data/test/workbook/worksheet/tc_col.rb +78 -0
  277. data/test/workbook/worksheet/tc_color_scale.rb +58 -0
  278. data/test/workbook/worksheet/tc_comment.rb +72 -0
  279. data/test/workbook/worksheet/tc_comments.rb +57 -0
  280. data/test/workbook/worksheet/tc_conditional_formatting.rb +224 -0
  281. data/test/workbook/worksheet/tc_data_bar.rb +46 -0
  282. data/test/workbook/worksheet/tc_data_validation.rb +265 -0
  283. data/test/workbook/worksheet/tc_date_time_converter.rb +124 -0
  284. data/test/workbook/worksheet/tc_header_footer.rb +151 -0
  285. data/test/workbook/worksheet/tc_icon_set.rb +45 -0
  286. data/test/workbook/worksheet/tc_page_margins.rb +97 -0
  287. data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -0
  288. data/test/workbook/worksheet/tc_page_setup.rb +143 -0
  289. data/test/workbook/worksheet/tc_pane.rb +54 -0
  290. data/test/workbook/worksheet/tc_pivot_table.rb +120 -0
  291. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +54 -0
  292. data/test/workbook/worksheet/tc_print_options.rb +72 -0
  293. data/test/workbook/worksheet/tc_protected_range.rb +17 -0
  294. data/test/workbook/worksheet/tc_row.rb +117 -0
  295. data/test/workbook/worksheet/tc_selection.rb +55 -0
  296. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -0
  297. data/test/workbook/worksheet/tc_sheet_format_pr.rb +88 -0
  298. data/test/workbook/worksheet/tc_sheet_pr.rb +27 -0
  299. data/test/workbook/worksheet/tc_sheet_protection.rb +117 -0
  300. data/test/workbook/worksheet/tc_sheet_view.rb +214 -0
  301. data/test/workbook/worksheet/tc_table.rb +68 -0
  302. data/test/workbook/worksheet/tc_table_style_info.rb +53 -0
  303. data/test/workbook/worksheet/tc_worksheet.rb +538 -0
  304. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +55 -0
  305. metadata +546 -0
@@ -0,0 +1,141 @@
1
+ module Axlsx
2
+ # Pane options for a worksheet.
3
+ #
4
+ # @note The recommended way to manage the pane options is via SheetView#pane
5
+ # @see SheetView#pane
6
+ class Pane
7
+
8
+ include Axlsx::OptionsParser
9
+ include Axlsx::SerializedAttributes
10
+ # Creates a new {Pane} object
11
+ # @option options [Symbol] active_pane Active Pane
12
+ # @option options [Symbol] state Split State
13
+ # @option options [Cell, String] top_left_cell Top Left Visible Cell
14
+ # @option options [Integer] x_split Horizontal Split Position
15
+ # @option options [Integer] y_split Vertical Split Position
16
+ def initialize(options={})
17
+ #defaults
18
+ @active_pane = @state = @top_left_cell = nil
19
+ @x_split = @y_split = 0
20
+ parse_options options
21
+ end
22
+
23
+ serializable_attributes :active_pane, :state, :top_left_cell, :x_split, :y_split
24
+
25
+ # Active Pane
26
+ # The pane that is active.
27
+ # Options are
28
+ # * bottom_left: Bottom left pane, when both vertical and horizontal
29
+ # splits are applied. This value is also used when only
30
+ # a horizontal split has been applied, dividing the pane
31
+ # into upper and lower regions. In that case, this value
32
+ # specifies the bottom pane.
33
+ # * bottom_right: Bottom right pane, when both vertical and horizontal
34
+ # splits are applied.
35
+ # * top_left: Top left pane, when both vertical and horizontal splits
36
+ # are applied. This value is also used when only a horizontal
37
+ # split has been applied, dividing the pane into upper and lower
38
+ # regions. In that case, this value specifies the top pane.
39
+ # This value is also used when only a vertical split has
40
+ # been applied, dividing the pane into right and left
41
+ # regions. In that case, this value specifies the left pane
42
+ # * top_right: Top right pane, when both vertical and horizontal
43
+ # splits are applied. This value is also used when only
44
+ # a vertical split has been applied, dividing the pane
45
+ # into right and left regions. In that case, this value
46
+ # specifies the right pane.
47
+ # @see type
48
+ # @return [Symbol]
49
+ # default nil
50
+ attr_reader :active_pane
51
+
52
+
53
+ # Split State
54
+ # Indicates whether the pane has horizontal / vertical
55
+ # splits, and whether those splits are frozen.
56
+ # Options are
57
+ # * frozen: Panes are frozen, but were not split being frozen. In
58
+ # this state, when the panes are unfrozen again, a single
59
+ # pane results, with no split. In this state, the split
60
+ # bars are not adjustable.
61
+ # * frozen_split: Panes are frozen and were split before being frozen. In
62
+ # this state, when the panes are unfrozen again, the split
63
+ # remains, but is adjustable.
64
+ # * split: Panes are split, but not frozen. In this state, the split
65
+ # bars are adjustable by the user.
66
+ # @see type
67
+ # @return [Symbol]
68
+ # default nil
69
+ attr_reader :state
70
+
71
+ # Top Left Visible Cell
72
+ # Location of the top left visible cell in the bottom
73
+ # right pane (when in Left-To-Right mode).
74
+ # @see type
75
+ # @return [String]
76
+ # default nil
77
+ attr_reader :top_left_cell
78
+
79
+ # Horizontal Split Position
80
+ # Horizontal position of the split, in 1/20th of a point; 0 (zero)
81
+ # if none. If the pane is frozen, this value indicates the number
82
+ # of columns visible in the top pane.
83
+ # @see type
84
+ # @return [Integer]
85
+ # default 0
86
+ attr_reader :x_split
87
+
88
+ # Vertical Split Position
89
+ # Vertical position of the split, in 1/20th of a point; 0 (zero)
90
+ # if none. If the pane is frozen, this value indicates the number
91
+ # of rows visible in the left pane.
92
+ # @see type
93
+ # @return [Integer]
94
+ # default 0
95
+ attr_reader :y_split
96
+
97
+ # @see active_pane
98
+ def active_pane=(v)
99
+ Axlsx::validate_pane_type(v)
100
+ @active_pane = Axlsx::camel(v.to_s, false)
101
+ end
102
+
103
+ # @see state
104
+ def state=(v)
105
+ Axlsx::validate_split_state_type(v)
106
+ @state = Axlsx::camel(v.to_s, false)
107
+ end
108
+
109
+ # @see top_left_cell
110
+ def top_left_cell=(v)
111
+ cell = (v.class == Axlsx::Cell ? v.r_abs : v)
112
+ Axlsx::validate_string(cell)
113
+ @top_left_cell = cell
114
+ end
115
+
116
+ # @see x_split
117
+ def x_split=(v); Axlsx::validate_unsigned_int(v); @x_split = v end
118
+
119
+ # @see y_split
120
+ def y_split=(v); Axlsx::validate_unsigned_int(v); @y_split = v end
121
+
122
+ # Serializes the data validation
123
+ # @param [String] str
124
+ # @return [String]
125
+ def to_xml_string(str = '')
126
+ finalize
127
+ str << '<pane '
128
+ serialized_attributes str
129
+ str << '/>'
130
+ end
131
+ private
132
+
133
+ def finalize
134
+ if @state == 'frozen' && @top_left_cell.nil?
135
+ row = @y_split || 0
136
+ column = @x_split || 0
137
+ @top_left_cell = "#{('A'..'ZZ').to_a[column]}#{row+1}"
138
+ end
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,273 @@
1
+ # encoding: UTF-8
2
+ module Axlsx
3
+ # Table
4
+ # @note Worksheet#add_pivot_table is the recommended way to create tables for your worksheets.
5
+ # @see README for examples
6
+ class PivotTable
7
+
8
+ include Axlsx::OptionsParser
9
+
10
+ # Creates a new PivotTable object
11
+ # @param [String] ref The reference to where the pivot table lives like 'G4:L17'.
12
+ # @param [String] range The reference to the pivot table data like 'A1:D31'.
13
+ # @param [Worksheet] sheet The sheet containing the table data.
14
+ # @option options [Cell, String] name
15
+ # @option options [TableStyle] style
16
+ def initialize(ref, range, sheet, options={})
17
+ @ref = ref
18
+ self.range = range
19
+ @sheet = sheet
20
+ @sheet.workbook.pivot_tables << self
21
+ @name = "PivotTable#{index+1}"
22
+ @data_sheet = nil
23
+ @rows = []
24
+ @columns = []
25
+ @data = []
26
+ @pages = []
27
+ @subtotal = nil
28
+ parse_options options
29
+ yield self if block_given?
30
+ end
31
+
32
+ # The reference to the table data
33
+ # @return [String]
34
+ attr_reader :ref
35
+
36
+ # The name of the table.
37
+ # @return [String]
38
+ attr_reader :name
39
+
40
+ # The name of the sheet.
41
+ # @return [String]
42
+ attr_reader :sheet
43
+
44
+ # The sheet used as data source for the pivot table
45
+ # @return [Worksheet]
46
+ attr_writer :data_sheet
47
+
48
+ # @see #data_sheet
49
+ def data_sheet
50
+ @data_sheet || @sheet
51
+ end
52
+
53
+ # The range where the data for this pivot table lives.
54
+ # @return [String]
55
+ attr_reader :range
56
+
57
+ # (see #range)
58
+ def range=(v)
59
+ DataTypeValidator.validate "#{self.class}.range", [String], v
60
+ if v.is_a?(String)
61
+ @range = v
62
+ end
63
+ end
64
+
65
+ # The rows
66
+ # @return [Array]
67
+ attr_reader :rows
68
+
69
+
70
+ # (see #rows)
71
+ def rows=(v)
72
+ DataTypeValidator.validate "#{self.class}.rows", [Array], v
73
+ v.each do |ref|
74
+ DataTypeValidator.validate "#{self.class}.rows[]", [String], ref
75
+ end
76
+ @rows = v
77
+ end
78
+
79
+ # The columns
80
+ # @return [Array]
81
+ attr_reader :columns
82
+
83
+ # (see #columns)
84
+ def columns=(v)
85
+ DataTypeValidator.validate "#{self.class}.columns", [Array], v
86
+ v.each do |ref|
87
+ DataTypeValidator.validate "#{self.class}.columns[]", [String], ref
88
+ end
89
+ @columns = v
90
+ end
91
+
92
+ # The data
93
+ # @return [Array]
94
+ attr_reader :data
95
+
96
+ # (see #data)
97
+ def data=(v)
98
+ DataTypeValidator.validate "#{self.class}.data", [Array], v
99
+ @data = []
100
+ v.each do |data_field|
101
+ if data_field.is_a? String
102
+ data_field = {:ref => data_field}
103
+ end
104
+ data_field.values.each do |value|
105
+ DataTypeValidator.validate "#{self.class}.data[]", [String], value
106
+ end
107
+ @data << data_field
108
+ end
109
+ @data
110
+ end
111
+
112
+ # The pages
113
+ # @return [String]
114
+ attr_reader :pages
115
+
116
+ # (see #pages)
117
+ def pages=(v)
118
+ DataTypeValidator.validate "#{self.class}.pages", [Array], v
119
+ v.each do |ref|
120
+ DataTypeValidator.validate "#{self.class}.pages[]", [String], ref
121
+ end
122
+ @pages = v
123
+ end
124
+
125
+ # The index of this chart in the workbooks charts collection
126
+ # @return [Integer]
127
+ def index
128
+ @sheet.workbook.pivot_tables.index(self)
129
+ end
130
+
131
+ # The part name for this table
132
+ # @return [String]
133
+ def pn
134
+ "#{PIVOT_TABLE_PN % (index+1)}"
135
+ end
136
+
137
+ # The relationship part name of this pivot table
138
+ # @return [String]
139
+ def rels_pn
140
+ "#{PIVOT_TABLE_RELS_PN % (index+1)}"
141
+ end
142
+
143
+ # The cache_definition for this pivot table
144
+ # @return [PivotTableCacheDefinition]
145
+ def cache_definition
146
+ @cache_definition ||= PivotTableCacheDefinition.new(self)
147
+ end
148
+
149
+ # The relationships for this pivot table.
150
+ # @return [Relationships]
151
+ def relationships
152
+ r = Relationships.new
153
+ r << Relationship.new(cache_definition, PIVOT_TABLE_CACHE_DEFINITION_R, "../#{cache_definition.pn}")
154
+ r
155
+ end
156
+
157
+ # Serializes the object
158
+ # @param [String] str
159
+ # @return [String]
160
+ def to_xml_string(str = '')
161
+ str << '<?xml version="1.0" encoding="UTF-8"?>'
162
+ str << '<pivotTableDefinition xmlns="' << XML_NS << '" name="' << name << '" cacheId="' << cache_definition.cache_id.to_s << '" dataOnRows="1" applyNumberFormats="0" applyBorderFormats="0" applyFontFormats="0" applyPatternFormats="0" applyAlignmentFormats="0" applyWidthHeightFormats="1" dataCaption="Data" showMultipleLabel="0" showMemberPropertyTips="0" useAutoFormatting="1" indent="0" compact="0" compactData="0" gridDropZones="1" multipleFieldFilters="0">'
163
+ str << '<location firstDataCol="1" firstDataRow="1" firstHeaderRow="1" ref="' << ref << '"/>'
164
+ str << '<pivotFields count="' << header_cells_count.to_s << '">'
165
+ header_cell_values.each do |cell_value|
166
+ str << pivot_field_for(cell_value)
167
+ end
168
+ str << '</pivotFields>'
169
+ if rows.empty?
170
+ str << '<rowFields count="1"><field x="-2"/></rowFields>'
171
+ str << '<rowItems count="2"><i><x/></i> <i i="1"><x v="1"/></i></rowItems>'
172
+ else
173
+ str << '<rowFields count="' << rows.size.to_s << '">'
174
+ rows.each do |row_value|
175
+ str << '<field x="' << header_index_of(row_value).to_s << '"/>'
176
+ end
177
+ str << '</rowFields>'
178
+ str << '<rowItems count="' << rows.size.to_s << '">'
179
+ rows.size.times do |i|
180
+ str << '<i/>'
181
+ end
182
+ str << '</rowItems>'
183
+ end
184
+ if columns.empty?
185
+ str << '<colItems count="1"><i/></colItems>'
186
+ else
187
+ str << '<colFields count="' << columns.size.to_s << '">'
188
+ columns.each do |column_value|
189
+ str << '<field x="' << header_index_of(column_value).to_s << '"/>'
190
+ end
191
+ str << '</colFields>'
192
+ end
193
+ unless pages.empty?
194
+ str << '<pageFields count="' << pages.size.to_s << '">'
195
+ pages.each do |page_value|
196
+ str << '<pageField fld="' << header_index_of(page_value).to_s << '"/>'
197
+ end
198
+ str << '</pageFields>'
199
+ end
200
+ unless data.empty?
201
+ str << "<dataFields count=\"#{data.size}\">"
202
+ data.each do |datum_value|
203
+ str << "<dataField name='#{@subtotal} of #{datum_value[:ref]}' fld='#{header_index_of(datum_value[:ref])}' baseField='0' baseItem='0'"
204
+ str << " subtotal='#{datum_value[:subtotal]}' " if datum_value[:subtotal]
205
+ str << "/>"
206
+ end
207
+ str << '</dataFields>'
208
+ end
209
+ str << '</pivotTableDefinition>'
210
+ end
211
+
212
+ # References for header cells
213
+ # @return [Array]
214
+ def header_cell_refs
215
+ Axlsx::range_to_a(header_range).first
216
+ end
217
+
218
+ # The header cells for the pivot table
219
+ # @return [Array]
220
+ def header_cells
221
+ data_sheet[header_range]
222
+ end
223
+
224
+ # The values in the header cells collection
225
+ # @return [Array]
226
+ def header_cell_values
227
+ header_cells.map(&:value)
228
+ end
229
+
230
+ # The number of cells in the header_cells collection
231
+ # @return [Integer]
232
+ def header_cells_count
233
+ header_cells.count
234
+ end
235
+
236
+ # The index of a given value in the header cells
237
+ # @return [Integer]
238
+ def header_index_of(value)
239
+ header_cell_values.index(value)
240
+ end
241
+
242
+ private
243
+
244
+ def pivot_field_for(cell_ref)
245
+ if rows.include? cell_ref
246
+ '<pivotField axis="axisRow" compact="0" outline="0" subtotalTop="0" showAll="0" includeNewItemsInFilter="1">' <<
247
+ '<items count="1"><item t="default"/></items>' <<
248
+ '</pivotField>'
249
+ elsif columns.include? cell_ref
250
+ '<pivotField axis="axisCol" compact="0" outline="0" subtotalTop="0" showAll="0" includeNewItemsInFilter="1">' <<
251
+ '<items count="1"><item t="default"/></items>' <<
252
+ '</pivotField>'
253
+ elsif pages.include? cell_ref
254
+ '<pivotField axis="axisCol" compact="0" outline="0" subtotalTop="0" showAll="0" includeNewItemsInFilter="1">' <<
255
+ '<items count="1"><item t="default"/></items>' <<
256
+ '</pivotField>'
257
+ elsif data_refs.include? cell_ref
258
+ '<pivotField dataField="1" compact="0" outline="0" subtotalTop="0" showAll="0" includeNewItemsInFilter="1">' <<
259
+ '</pivotField>'
260
+ else
261
+ '<pivotField compact="0" outline="0" subtotalTop="0" showAll="0" includeNewItemsInFilter="1">' <<
262
+ '</pivotField>'
263
+ end
264
+ end
265
+ def data_refs
266
+ data.map { |hash| hash[:ref] }
267
+ end
268
+ def header_range
269
+ range.gsub(/^(\w+?)(\d+)\:(\w+?)\d+$/, '\1\2:\3\2')
270
+ end
271
+
272
+ end
273
+ end
@@ -0,0 +1,66 @@
1
+ # encoding: UTF-8
2
+ module Axlsx
3
+ # Table
4
+ # @note Worksheet#add_pivot_table is the recommended way to create tables for your worksheets.
5
+ # @see README for examples
6
+ class PivotTableCacheDefinition
7
+
8
+ include Axlsx::OptionsParser
9
+
10
+ # Creates a new PivotTable object
11
+ # @param [String] pivot_table The pivot table this cache definition is in
12
+ def initialize(pivot_table)
13
+ @pivot_table = pivot_table
14
+ end
15
+
16
+ # # The reference to the pivot table data
17
+ # # @return [PivotTable]
18
+ attr_reader :pivot_table
19
+
20
+ # The index of this chart in the workbooks charts collection
21
+ # @return [Integer]
22
+ def index
23
+ pivot_table.sheet.workbook.pivot_tables.index(pivot_table)
24
+ end
25
+
26
+ # The part name for this table
27
+ # @return [String]
28
+ def pn
29
+ "#{PIVOT_TABLE_CACHE_DEFINITION_PN % (index+1)}"
30
+ end
31
+
32
+ # The identifier for this cache
33
+ # @return [Integer]
34
+ def cache_id
35
+ index + 1
36
+ end
37
+
38
+ # The relationship id for this pivot table cache definition.
39
+ # @see Relationship#Id
40
+ # @return [String]
41
+ def rId
42
+ pivot_table.relationships.for(self).Id
43
+ end
44
+
45
+ # Serializes the object
46
+ # @param [String] str
47
+ # @return [String]
48
+ def to_xml_string(str = '')
49
+ str << '<?xml version="1.0" encoding="UTF-8"?>'
50
+ str << '<pivotCacheDefinition xmlns="' << XML_NS << '" xmlns:r="' << XML_NS_R << '" invalid="1" refreshOnLoad="1" recordCount="0">'
51
+ str << '<cacheSource type="worksheet">'
52
+ str << '<worksheetSource ref="' << pivot_table.range << '" sheet="' << pivot_table.data_sheet.name << '"/>'
53
+ str << '</cacheSource>'
54
+ str << '<cacheFields count="' << pivot_table.header_cells_count.to_s << '">'
55
+ pivot_table.header_cells.each do |cell|
56
+ str << '<cacheField name="' << cell.value << '" numFmtId="0">'
57
+ str << '<sharedItems count="0">'
58
+ str << '</sharedItems>'
59
+ str << '</cacheField>'
60
+ end
61
+ str << '</cacheFields>'
62
+ str << '</pivotCacheDefinition>'
63
+ end
64
+
65
+ end
66
+ end