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,64 @@
1
+ module Axlsx
2
+
3
+ # This class manages the dimensions for a worksheet.
4
+ # While this node is optional in the specification some readers like
5
+ # LibraOffice require this node to render the sheet
6
+ class Dimension
7
+
8
+ # the default value for the first cell in the dimension
9
+ # @return [String]
10
+ def self.default_first
11
+ @@default_first ||= 'A1'
12
+ end
13
+
14
+ # the default value for the last cell in the dimension
15
+ # @return [String]
16
+ def self.default_last
17
+ @@default_last ||= 'AA200'
18
+ end
19
+
20
+ # Creates a new dimension object
21
+ # @param[Worksheet] worksheet - the worksheet this dimension applies
22
+ # to.
23
+ def initialize(worksheet)
24
+ raise ArgumentError, "you must provide a worksheet" unless worksheet.is_a?(Worksheet)
25
+ @worksheet = worksheet
26
+ end
27
+
28
+ attr_reader :worksheet
29
+
30
+ # the full refernece for this dimension
31
+ # @return [String]
32
+ def sqref
33
+ "#{first_cell_reference}:#{last_cell_reference}"
34
+ end
35
+
36
+ # serialize the object
37
+ # @return [String]
38
+ def to_xml_string(str = '')
39
+ return if worksheet.rows.empty?
40
+ str << "<dimension ref=\"%s\"></dimension>" % sqref
41
+ end
42
+
43
+ # The first cell in the dimension
44
+ # @return [String]
45
+ def first_cell_reference
46
+ dimension_reference(worksheet.rows.first.cells.first, Dimension.default_first)
47
+ end
48
+
49
+ # the last cell in the dimension
50
+ # @return [String]
51
+ def last_cell_reference
52
+ dimension_reference(worksheet.rows.last.cells.last, Dimension.default_last)
53
+ end
54
+
55
+ private
56
+
57
+ # Returns the reference of a cell or the default specified
58
+ # @return [String]
59
+ def dimension_reference(cell, default)
60
+ return default unless cell.respond_to?(:r)
61
+ cell.r
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,54 @@
1
+ module Axlsx
2
+ # Header/Footer options for printing a worksheet. All settings are optional.
3
+ #
4
+ # Headers and footers are generated using a string which is a combination
5
+ # of plain text and control characters. A fairly comprehensive list of control
6
+ # characters can be found here:
7
+ # https://github.com/randym/axlsx/blob/master/notes_on_header_footer.md
8
+ #     
9
+ # @note The recommended way of managing header/footers is via Worksheet#header_footer
10
+ # @see Worksheet#initialize
11
+ class HeaderFooter
12
+
13
+ include Axlsx::OptionsParser
14
+ include Axlsx::SerializedAttributes
15
+ include Axlsx::Accessors
16
+
17
+ # Creates a new HeaderFooter object
18
+ # @option options [String] odd_header The content for headers on odd numbered pages.
19
+ # @option options [String] odd_footer The content for footers on odd numbered pages.
20
+ # @option options [String] even_header The content for headers on even numbered pages.
21
+ # @option options [String] even_footer The content for footers on even numbered pages.
22
+ # @option options [String] first_header The content for headers on even numbered pages.
23
+ # @option options [String] first_footer The content for footers on even numbered pages.
24
+ # @option options [Boolean] different_odd_even Setting this to true will show different headers/footers on odd and even pages. When false, the odd headers/footers are used on each page. (Default: false)
25
+ # @option options [Boolean] different_first If true, will use the first header/footer on page 1. Otherwise, the odd header/footer is used.
26
+ def initialize(options = {})
27
+ parse_options options
28
+ end
29
+
30
+ serializable_attributes :different_odd_even, :different_first
31
+ serializable_element_attributes :odd_header, :odd_footer, :even_header, :even_footer, :first_header, :first_footer
32
+ string_attr_accessor :odd_header, :odd_footer, :even_header, :even_footer, :first_header, :first_footer
33
+ boolean_attr_accessor :different_odd_even, :different_first
34
+
35
+ # Set some or all header/footers at once.
36
+ # @param [Hash] options The header/footer options to set (possible keys are :odd_header, :odd_footer, :even_header, :even_footer, :first_header, :first_footer, :different_odd_even, and :different_first).
37
+ def set(options)
38
+ parse_options options
39
+ end
40
+
41
+ # Serializes the header/footer object.
42
+ # @param [String] str
43
+ # @return [String]
44
+ def to_xml_string(str = '')
45
+ str << "<headerFooter "
46
+ serialized_attributes str
47
+ str << ">"
48
+ serialized_element_attributes(str) do |value|
49
+ value = ::CGI.escapeHTML(value)
50
+ end
51
+ str << "</headerFooter>"
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,83 @@
1
+ module Axlsx
2
+ # Conditional Format Rule icon sets
3
+ # Describes an icon set conditional formatting rule.
4
+
5
+ # @note The recommended way to manage these rules is via Worksheet#add_conditional_formatting
6
+ # @see Worksheet#add_conditional_formatting
7
+ # @see ConditionalFormattingRule#initialize
8
+ class IconSet
9
+
10
+ include Axlsx::OptionsParser
11
+ include Axlsx::SerializedAttributes
12
+
13
+ # Creates a new icon set object
14
+ # @option options [String] iconSet
15
+ # @option options [Boolean] reverse
16
+ # @option options [Boolean] percent
17
+ # @option options [Boolean] showValue
18
+ def initialize(options = {})
19
+ @percent = @showValue = true
20
+ @reverse = false
21
+ @iconSet = "3TrafficLights1"
22
+ initialize_value_objects
23
+ parse_options options
24
+ yield self if block_given?
25
+ end
26
+
27
+ serializable_attributes :iconSet, :percent, :reverse, :showValue
28
+
29
+ # The icon set to display.
30
+ # Allowed values are: 3Arrows, 3ArrowsGray, 3Flags, 3TrafficLights1, 3TrafficLights2, 3Signs, 3Symbols, 3Symbols2, 4Arrows, 4ArrowsGray, 4RedToBlack, 4Rating, 4TrafficLights, 5Arrows, 5ArrowsGray, 5Rating, 5Quarters
31
+ # The default value is 3TrafficLights1
32
+ # @return [String]
33
+ attr_reader :iconSet
34
+
35
+ # Indicates whether the thresholds indicate percentile values, instead of number values.
36
+ # The default falue is true
37
+ # @return [Boolean]
38
+ attr_reader :percent
39
+
40
+ # If true, reverses the default order of the icons in this icon set.maxLength attribute
41
+ # The default value is false
42
+ # @return [Boolean]
43
+ attr_reader :reverse
44
+
45
+ # Indicates whether to show the values of the cells on which this data bar is applied.
46
+ # The default value is true
47
+ # @return [Boolean]
48
+ attr_reader :showValue
49
+
50
+ # @see iconSet
51
+ def iconSet=(v); Axlsx::validate_icon_set(v); @iconSet = v end
52
+
53
+ # @see showValue
54
+ def showValue=(v); Axlsx.validate_boolean(v); @showValue = v end
55
+
56
+ # @see percent
57
+ def percent=(v); Axlsx.validate_boolean(v); @percent = v end
58
+
59
+ # @see reverse
60
+ def reverse=(v); Axlsx.validate_boolean(v); @reverse = v end
61
+
62
+ # Serialize this object to an xml string
63
+ # @param [String] str
64
+ # @return [String]
65
+ def to_xml_string(str="")
66
+ str << '<iconSet '
67
+ serialized_attributes str
68
+ str << '>'
69
+ @value_objects.each { |cfvo| cfvo.to_xml_string(str) }
70
+ str << '</iconSet>'
71
+ end
72
+
73
+ private
74
+
75
+ # Initalize the simple typed list of value objects
76
+ # I am keeping this private for now as I am not sure what impact changes to the required two cfvo objects will do.
77
+ def initialize_value_objects
78
+ @value_objects = SimpleTypedList.new Cfvo
79
+ @value_objects.concat [Cfvo.new(:type => :percent, :val => 0), Cfvo.new(:type => :percent, :val => 33), Cfvo.new(:type => :percent, :val => 67)]
80
+ @value_objects.lock
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,35 @@
1
+ module Axlsx
2
+
3
+ # A simple list of merged cells
4
+ class MergedCells < SimpleTypedList
5
+
6
+ # creates a new MergedCells object
7
+ # @param [Worksheet] worksheet
8
+ def initialize(worksheet)
9
+ raise ArgumentError, 'you must provide a worksheet' unless worksheet.is_a?(Worksheet)
10
+ super String
11
+ end
12
+
13
+ # adds cells to the merged cells collection
14
+ # @param [Array||String] cells The cells to add to the merged cells
15
+ # collection. This can be an array of actual cells or a string style
16
+ # range like 'A1:C1'
17
+ def add(cells)
18
+ @list << if cells.is_a?(String)
19
+ cells
20
+ elsif cells.is_a?(Array)
21
+ Axlsx::cell_range(cells, false)
22
+ end
23
+ end
24
+
25
+ # serialize the object
26
+ # @param [String] str
27
+ # @return [String]
28
+ def to_xml_string(str = '')
29
+ return if @list.empty?
30
+ str << "<mergeCells count='#{size}'>"
31
+ each { |merged_cell| str << "<mergeCell ref='#{merged_cell}'></mergeCell>" }
32
+ str << '</mergeCells>'
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,99 @@
1
+ module Axlsx
2
+ # PageMargins specify the margins when printing a worksheet.
3
+ #
4
+ # For compatibility, PageMargins serialize to an empty string, unless at least one custom margin value
5
+ # has been specified. Otherwise, it serializes to a PageMargin element specifying all 6 margin values
6
+ # (using default values for margins that have not been specified explicitly).
7
+ #
8
+ # @note The recommended way to manage page margins is via Worksheet#page_margins
9
+ # @see Worksheet#page_margins
10
+ # @see Worksheet#initialize
11
+ class PageMargins
12
+
13
+ include Axlsx::OptionsParser
14
+ include Axlsx::SerializedAttributes
15
+
16
+ # Creates a new PageMargins object
17
+ # @option options [Numeric] left The left margin in inches
18
+ # @option options [Numeric] right The right margin in inches
19
+ # @option options [Numeric] bottom The bottom margin in inches
20
+ # @option options [Numeric] top The top margin in inches
21
+ # @option options [Numeric] header The header margin in inches
22
+ # @option options [Numeric] footer The footer margin in inches
23
+ def initialize(options={})
24
+ # Default values taken from MS Excel for Mac 2011
25
+ @left = @right = DEFAULT_LEFT_RIGHT
26
+ @top = @bottom = DEFAULT_TOP_BOTTOM
27
+ @header = @footer = DEFAULT_HEADER_FOOTER
28
+ parse_options options
29
+ end
30
+
31
+ serializable_attributes :left, :right, :bottom, :top, :header, :footer
32
+
33
+ # Default left and right margin (in inches)
34
+ DEFAULT_LEFT_RIGHT = 0.75
35
+
36
+ # Default top and bottom margins (in inches)
37
+ DEFAULT_TOP_BOTTOM = 1.00
38
+
39
+ # Default header and footer margins (in inches)
40
+ DEFAULT_HEADER_FOOTER = 0.50
41
+
42
+ # Left margin (in inches)
43
+ # @return [Float]
44
+ attr_reader :left
45
+
46
+ # Right margin (in inches)
47
+ # @return [Float]
48
+ attr_reader :right
49
+
50
+ # Top margin (in inches)
51
+ # @return [Float]
52
+ attr_reader :top
53
+
54
+ # Bottom margin (in inches)
55
+ # @return [Float]
56
+ attr_reader :bottom
57
+
58
+ # Header margin (in inches)
59
+ # @return [Float]
60
+ attr_reader :header
61
+
62
+ # Footer margin (in inches)
63
+ # @return [Float]
64
+ attr_reader :footer
65
+
66
+ # Set some or all margins at once.
67
+ # @param [Hash] margins the margins to set (possible keys are :left, :right, :top, :bottom, :header and :footer).
68
+ def set(margins)
69
+ margins.select do |k, v|
70
+ next unless [:left, :right, :top, :bottom, :header, :footer].include? k
71
+ send("#{k}=", v)
72
+ end
73
+ end
74
+
75
+ # @see left
76
+ def left=(v); Axlsx::validate_unsigned_numeric(v); @left = v end
77
+ # @see right
78
+ def right=(v); Axlsx::validate_unsigned_numeric(v); @right = v end
79
+ # @see top
80
+ def top=(v); Axlsx::validate_unsigned_numeric(v); @top = v end
81
+ # @see bottom
82
+ def bottom=(v); Axlsx::validate_unsigned_numeric(v); @bottom = v end
83
+ # @see header
84
+ def header=(v); Axlsx::validate_unsigned_numeric(v); @header = v end
85
+ # @see footer
86
+ def footer=(v); Axlsx::validate_unsigned_numeric(v); @footer = v end
87
+
88
+ # Serializes the page margins element
89
+ # @param [String] str
90
+ # @return [String]
91
+ # @note For compatibility, this is a noop unless custom margins have been specified.
92
+ # @see #custom_margins_specified?
93
+ def to_xml_string(str = '')
94
+ str << '<pageMargins '
95
+ serialized_attributes str
96
+ str << '/>'
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,44 @@
1
+ module Axlsx
2
+
3
+ # Page setup properties of the worksheet
4
+ # This class name is not a typo, its spec.
5
+ class PageSetUpPr
6
+
7
+ include Axlsx::OptionsParser
8
+ include Axlsx::SerializedAttributes
9
+
10
+ # creates a new page setup properties object
11
+ # @param [Hash] options
12
+ # @option [Boolean] auto_page_breaks Flag indicating whether the sheet displays Automatic Page Breaks.
13
+ # @option [Boolean] fit_to_page Flag indicating whether the Fit to Page print option is enabled.
14
+ def initialize(options = {})
15
+ parse_options options
16
+ end
17
+
18
+ serializable_attributes :auto_page_breaks, :fit_to_page
19
+
20
+ attr_reader :auto_page_breaks
21
+ attr_reader :fit_to_page
22
+
23
+ # Flag indicating whether the Fit to Page print option is enabled.
24
+ # @param [Boolean] value
25
+ # @return [Boolean]
26
+ def fit_to_page=(value)
27
+ Axlsx.validate_boolean value
28
+ @fit_to_page = value
29
+ end
30
+
31
+ # Flag indicating whether the sheet displays Automatic Page Breaks.
32
+ # @param [Boolean] value
33
+ # @return [Boolean]
34
+ def auto_page_breaks=(value)
35
+ Axlsx.validate_boolean value
36
+ @auto_page_breaks = value
37
+ end
38
+
39
+ # serialize to xml
40
+ def to_xml_string(str='')
41
+ str << '<pageSetUpPr ' << serialized_attributes << '/>'
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,242 @@
1
+ module Axlsx
2
+ # Page setup settings for printing a worksheet. All settings are optional.
3
+ #
4
+ # @note The recommended way to manage print options is via Worksheet#page_setup
5
+ # @see Worksheet#print_options
6
+ # @see Worksheet#initialize
7
+ class PageSetup
8
+
9
+ include Axlsx::OptionsParser
10
+ include Axlsx::SerializedAttributes
11
+
12
+ # Creates a new PageSetup object
13
+ # @option options [Integer] fit_to_height Number of vertical pages to fit on
14
+ # @option options [Integer] fit_to_width Number of horizontal pages to fit on
15
+ # @option options [Symbol] orientation Orientation of the page (:default, :landscape, :portrait)
16
+ # @option options [String] paper_height Height of paper (number followed by unit identifier: "297mm", "11in")
17
+ # @option options [String] paper_width Width of paper (number followed by unit identifier: "210mm", "8.5in")
18
+ # @option options [Integer] scale Print scaling (percent value, integer ranging from 10 to 400)
19
+ # @option options [Integer] paper_size - the size of paper to use
20
+ def initialize(options = {})
21
+ parse_options options
22
+ end
23
+
24
+ serializable_attributes :fit_to_height, :fit_to_width, :orientation, :paper_height, :paper_width, :scale, :paper_size
25
+
26
+ # TODO: Attributes defined by Open XML spec that are not implemented yet:
27
+ # * blackAndWhite
28
+ # * cellComments
29
+ # * copies
30
+ # * draft
31
+ # * errors
32
+ # * firstPageNumber
33
+ # * horizontalDpi
34
+ # * pageOrder
35
+ # * useFirstPageNumber
36
+ # * usePrinterDefaults
37
+ # * verticalDpi
38
+
39
+ # Number of vertical pages to fit on.
40
+ # @note PageSetup#fit_to is the recomended way to manage page fitting as only specifying one of fit_to_width/fit_to_height will result in the counterpart
41
+ # being set to 1.
42
+ # @return [Integer]
43
+ attr_reader :fit_to_height
44
+
45
+ # Number of horizontal pages to fit on.
46
+ # @note PageSetup#fit_to is the recomended way to manage page fitting as only specifying one of width/height will result in the counterpart
47
+ # being set to 1.
48
+ # @return [Integer]
49
+ attr_reader :fit_to_width
50
+
51
+ # Orientation of the page (:default, :landscape, :portrait)
52
+ # @return [Symbol]
53
+ attr_reader :orientation
54
+
55
+ # Height of paper (string containing a number followed by a unit identifier: "297mm", "11in")
56
+ # @return [String]
57
+ attr_reader :paper_height
58
+
59
+ # Width of paper (string containing a number followed by a unit identifier: "210mm", "8.5in")
60
+ # @return [String]
61
+ attr_reader :paper_width
62
+
63
+ # Print scaling (percent value, given as integer ranging from 10 to 400)
64
+ # @return [Integer]
65
+ attr_reader :scale
66
+
67
+ # The paper size to use in printing
68
+ #1 = Letter paper (8.5 in. by 11 in.)
69
+ #2 = Letter small paper (8.5 in. by 11 in.)
70
+ #3 = Tabloid paper (11 in. by 17 in.)
71
+ #4 = Ledger paper (17 in. by 11 in.)
72
+ #5 = Legal paper (8.5 in. by 14 in.)
73
+ #6 = Statement paper (5.5 in. by 8.5 in.)
74
+ #7 = Executive paper (7.25 in. by 10.5 in.)
75
+ #8 = A3 paper (297 mm by 420 mm)
76
+ #9 = A4 paper (210 mm by 297 mm)
77
+ #10 = A4 small paper (210 mm by 297 mm)
78
+ #11 = A5 paper (148 mm by 210 mm)
79
+ #12 = B4 paper (250 mm by 353 mm)
80
+ #13 = B5 paper (176 mm by 250 mm)
81
+ #14 = Folio paper (8.5 in. by 13 in.)
82
+ #15 = Quarto paper (215 mm by 275 mm)
83
+ #16 = Standard paper (10 in. by 14 in.)
84
+ #17 = Standard paper (11 in. by 17 in.)
85
+ #18 = Note paper (8.5 in. by 11 in.)
86
+ #19 = #9 envelope (3.875 in. by 8.875 in.)
87
+ #20 = #10 envelope (4.125 in. by 9.5 in.)
88
+ #21 = #11 envelope (4.5 in. by 10.375 in.)
89
+ #22 = #12 envelope (4.75 in. by 11 in.)
90
+ #23 = #14 envelope (5 in. by 11.5 in.) 24 = C paper (17 in. by 22 in.)
91
+ #25 = D paper (22 in. by 34 in.)
92
+ #26 = E paper (34 in. by 44 in.)
93
+ #27 = DL envelope (110 mm by 220 mm)
94
+ #28 = C5 envelope (162 mm by 229 mm)
95
+ #29 = C3 envelope (324 mm by 458 mm)
96
+ #30 = C4 envelope (229 mm by 324 mm)
97
+ #31 = C6 envelope (114 mm by 162 mm)
98
+ #32 = C65 envelope (114 mm by 229 mm)
99
+ #33 = B4 envelope (250 mm by 353 mm)
100
+ #34 = B5 envelope (176 mm by 250 mm)
101
+ #35 = B6 envelope (176 mm by 125 mm)
102
+ #36 = Italy envelope (110 mm by 230 mm)
103
+ #37 = Monarch envelope (3.875 in. by 7.5 in.). 38 = 6 3/4 envelope (3.625 in. by 6.5 in.)
104
+ #39 = US standard fanfold (14.875 in. by 11 in.)
105
+ #40 = German standard fanfold (8.5 in. by 12 in.)
106
+ #41 = German legal fanfold (8.5 in. by 13 in.)
107
+ #42 = ISO B4 (250 mm by 353 mm)
108
+ #43 = Japanese double postcard (200 mm by 148 mm)
109
+ #44 = Standard paper (9 in. by 11 in.)
110
+ #45 = Standard paper (10 in. by 11 in.)
111
+ #46 = Standard paper (15 in. by 11 in.)
112
+ #47 = Invite envelope (220 mm by 220 mm)
113
+ #50 = Letter extra paper (9.275 in. by 12 in.)
114
+ #51 = Legal extra paper (9.275 in. by 15 in.)
115
+ #52 = Tabloid extra paper (11.69 in. by 18 in.)
116
+ #53 = A4 extra paper (236 mm by 322 mm)
117
+ #54 = Letter transverse paper (8.275 in. by 11 in.)
118
+ #55 = A4 transverse paper (210 mm by 297 mm)
119
+ #56 = Letter extra transverse paper (9.275 in. by 12 in.)
120
+ #57 = SuperA/SuperA/A4 paper (227 mm by 356 mm)
121
+ #58 = SuperB/SuperB/A3 paper (305 mm by 487 mm)
122
+ #59 = Letter plus paper (8.5 in. by 12.69 in.)
123
+ #60 = A4 plus paper (210 mm by 330 mm)
124
+ #61 = A5 transverse paper (148 mm by 210 mm)
125
+ #62 = JIS B5 transverse paper (182 mm by 257 mm)
126
+ #63 = A3 extra paper (322 mm by 445 mm)
127
+ #64 = A5 extra paper (174 mm by 235 mm)
128
+ #65 = ISO B5 extra paper (201 mm by 276 mm)
129
+ #66 = A2 paper (420 mm by 594 mm)
130
+ #67 = A3 transverse paper (297 mm by 420 mm)
131
+ #68 = A3 extra transverse paper (322 mm by 445 mm)
132
+ #69 = Japanese Double Postcard (200 mm x 148 mm)
133
+ #70 = A6 (105 mm x 148 mm
134
+ #71 = Japanese Envelope Kaku #2
135
+ #72 = Japanese Envelope Kaku #3
136
+ #73 = Japanese Envelope Chou #3
137
+ #74 = Japanese Envelope Chou #4
138
+ #75 = Letter Rotated (11in x 8 1/2 11 in)
139
+ #76 = A3 Rotated (420 mm x 297 mm)
140
+ #77 = A4 Rotated (297 mm x 210 mm)
141
+ #78 = A5 Rotated (210 mm x 148 mm)
142
+ #79 = B4 (JIS) Rotated (364 mm x 257 mm)
143
+ #80 = B5 (JIS) Rotated (257 mm x 182 mm)
144
+ #81 = Japanese Postcard Rotated (148 mm x 100 mm)
145
+ #82 = Double Japanese Postcard Rotated (148 mm x 200 mm)
146
+ #83 = A6 Rotated (148 mm x 105 mm)
147
+ #84 = Japanese Envelope Kaku #2 Rotated
148
+ #85 = Japanese Envelope Kaku #3 Rotated
149
+ #86 = Japanese Envelope Chou #3 Rotated
150
+ #87 = Japanese Envelope Chou #4 Rotated
151
+ #88 = B6 (JIS) (128 mm x 182 mm)
152
+ #89 = B6 (JIS) Rotated (182 mm x 128 mm)
153
+ #90 = (12 in x 11 in)
154
+ #91 = Japanese Envelope You #4
155
+ #92 = Japanese Envelope You #4 Rotated
156
+ #93 = PRC 16K (146 mm x 215 mm)
157
+ #94 = PRC 32K (97 mm x 151 mm)
158
+ #95 = PRC 32K(Big) (97 mm x 151 mm)
159
+ #96 = PRC Envelope #1 (102 mm x 165 mm)
160
+ #97 = PRC Envelope #2 (102 mm x 176 mm)
161
+ #98 = PRC Envelope #3 (125 mm x 176 mm)
162
+ #99 = PRC Envelope #4 (110 mm x 208 mm)
163
+ #100 = PRC Envelope #5 (110 mm x 220 mm)
164
+ #101 = PRC Envelope #6 (120 mm x 230 mm)
165
+ #102 = PRC Envelope #7 (160 mm x 230 mm)
166
+ #103 = PRC Envelope #8 (120 mm x 309 mm)
167
+ #104 = PRC Envelope #9 (229 mm x 324 mm)
168
+ #105 = PRC Envelope #10 (324 mm x 458 mm)
169
+ #106 = PRC 16K Rotated
170
+ #107 = PRC 32K Rotated
171
+ #108 = PRC 32K(Big) Rotated
172
+ #109 = PRC Envelope #1 Rotated (165 mm x 102 mm)
173
+ #110 = PRC Envelope #2 Rotated (176 mm x 102 mm)
174
+ #111 = PRC Envelope #3 Rotated (176 mm x 125 mm)
175
+ #112 = PRC Envelope #4 Rotated (208 mm x 110 mm)
176
+ #113 = PRC Envelope #5 Rotated (220 mm x 110 mm)
177
+ #114 = PRC Envelope #6 Rotated (230 mm x 120 mm)
178
+ #115 = PRC Envelope #7 Rotated (230 mm x 160 mm)
179
+ #116 = PRC Envelope #8 Rotated (309 mm x 120 mm)
180
+ #117 = PRC Envelope #9 Rotated (324 mm x 229 mm)
181
+ #118 = PRC Envelope #10 Rotated (458 mm x 324 mm)
182
+ # @return [Integer]
183
+ attr_reader :paper_size
184
+
185
+
186
+ # Sets the paper size for printing.
187
+ # @see PageSetup#paper_size
188
+ # @return integer
189
+ def paper_size=(size)
190
+ RestrictionValidator.validate 'paper_size', (1..118), size
191
+ @paper_size = size
192
+ end
193
+
194
+ # Set some or all page settings at once.
195
+ # @param [Hash] options The page settings to set (possible keys are :fit_to_height, :fit_to_width, :orientation, :paper_height, :paper_width, and :scale).
196
+ def set(options)
197
+ parse_options options
198
+ end
199
+
200
+ # @see fit_to_height
201
+ def fit_to_height=(v); Axlsx::validate_unsigned_int(v); @fit_to_height = v; end
202
+ # @see fit_to_width
203
+ def fit_to_width=(v); Axlsx::validate_unsigned_int(v); @fit_to_width = v; end
204
+ # @see orientation
205
+ def orientation=(v); Axlsx::validate_page_orientation(v); @orientation = v; end
206
+ # @see paper_height
207
+ def paper_height=(v); Axlsx::validate_number_with_unit(v); @paper_height = v; end
208
+ # @see paper_width
209
+ def paper_width=(v); Axlsx::validate_number_with_unit(v); @paper_width = v; end
210
+ # @see scale
211
+ def scale=(v); Axlsx::validate_scale_10_400(v); @scale = v; end
212
+
213
+ # convenience method to achieve sanity when setting fit_to_width and fit_to_height
214
+ # as they both default to 1 if only their counterpart is specified.
215
+ # @note This method will overwrite any value you explicitly set via the fit_to_height or fit_to_width methods.
216
+ # @option options [Integer] width The number of pages to fit this worksheet on horizontally. Default 9999
217
+ # @option options [Integer] height The number of pages to fit this worksheet on vertically. Default 9999
218
+ def fit_to(options={})
219
+ self.fit_to_width = options[:width] || 9999
220
+ self.fit_to_height = options[:height] || 9999
221
+ [@fit_to_width, @fit_to_height]
222
+ end
223
+
224
+
225
+ # helper method for worksheet to determine if the page setup is configured for fit to page printing
226
+ # We treat any page set up that has a value set for fit_to_width or fit_to_height value as fit_to_page.
227
+ # @return [Boolean]
228
+ def fit_to_page?
229
+ # is there some better what to express this?
230
+ (fit_to_width != nil || fit_to_height != nil)
231
+ end
232
+
233
+ # Serializes the page settings element.
234
+ # @param [String] str
235
+ # @return [String]
236
+ def to_xml_string(str = '')
237
+ str << '<pageSetup '
238
+ serialized_attributes str
239
+ str << '/>'
240
+ end
241
+ end
242
+ end