caxlsx 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
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