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,29 @@
1
+ module Axlsx
2
+
3
+ # the SheetCalcPr object for the worksheet
4
+ # This object contains calculation properties for the worksheet.
5
+ class SheetCalcPr
6
+ include Axlsx::OptionsParser
7
+ include Axlsx::SerializedAttributes
8
+ include Axlsx::Accessors
9
+ # creates a new SheetCalcPr
10
+ # @param [Hash] options Options for this object
11
+ # @option [Boolean] full_calc_on_load @see full_calc_on_load
12
+ def initialize(options={})
13
+ @full_calc_on_load = true
14
+ parse_options options
15
+ end
16
+
17
+ boolean_attr_accessor :full_calc_on_load
18
+
19
+ serializable_attributes :full_calc_on_load
20
+
21
+ # Serialize the object
22
+ # @param [String] str the string to append this objects serialized
23
+ # content to.
24
+ # @return [String]
25
+ def to_xml_string(str='')
26
+ str << "<sheetCalcPr #{serialized_attributes}/>"
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,25 @@
1
+ module Axlsx
2
+
3
+ # This class manages the serialization of rows for worksheets
4
+ class SheetData
5
+
6
+ # Creates a new SheetData object
7
+ # @param [Worksheet] worksheet The worksheet that owns this sheet data.
8
+ def initialize(worksheet)
9
+ raise ArgumentError, "you must provide a worksheet" unless worksheet.is_a?(Worksheet)
10
+ @worksheet = worksheet
11
+ end
12
+
13
+ attr_reader :worksheet
14
+
15
+ # Serialize the sheet data
16
+ # @param [String] str the string this objects serializaton will be concacted to.
17
+ # @return [String]
18
+ def to_xml_string(str = '')
19
+ str << '<sheetData>'
20
+ worksheet.rows.each_with_index{ |row, index| row.to_xml_string(index, str) }
21
+ str << '</sheetData>'
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,60 @@
1
+ module Axlsx
2
+
3
+ #Sheet formatting properties
4
+ # <xsd:complexType name="CT_SheetFormatPr">
5
+ # <xsd:attribute name="baseColWidth" type="xsd:unsignedInt" use="optional" default="8"/>
6
+ # <xsd:attribute name="defaultColWidth" type="xsd:double" use="optional"/>
7
+ # <xsd:attribute name="defaultRowHeight" type="xsd:double" use="required"/>
8
+ # <xsd:attribute name="customHeight" type="xsd:boolean" use="optional" default="false"/>
9
+ # <xsd:attribute name="zeroHeight" type="xsd:boolean" use="optional" default="false"/>
10
+ # <xsd:attribute name="thickTop" type="xsd:boolean" use="optional" default="false"/>
11
+ # <xsd:attribute name="thickBottom" type="xsd:boolean" use="optional" default="false"/>
12
+ # <xsd:attribute name="outlineLevelRow" type="xsd:unsignedByte" use="optional" default="0"/>
13
+ # <xsd:attribute name="outlineLevelCol" type="xsd:unsignedByte" use="optional" default="0"/>
14
+ #</xsd:complexType>
15
+
16
+ class SheetFormatPr
17
+ include Axlsx::SerializedAttributes
18
+ include Axlsx::OptionsParser
19
+ include Axlsx::Accessors
20
+
21
+ # creates a new sheet_format_pr object
22
+ # @param [Hash] options initialization options
23
+ # @option [Integer] base_col_width Specifies the number of characters of the maximum digit width of the normal style's font. This value does not include margin padding or extra padding for gridlines. It is only the number of characters.
24
+ # @option [Float] default_col_width Default column width measured as the number of characters of the maximum digit width of the normal style's font.
25
+ # @option [Float] default_row_height Default row height measured in point size. Optimization so we don't have to write the height on all rows. This can be written out if most rows have custom height, to achieve the optimization.
26
+ # @option [Boolean] custom_height 'True' if defaultRowHeight value has been manually set, or is different from the default value.
27
+ # @option [Boolean] zero_height 'True' if rows are hidden by default. This setting is an optimization used when most rows of the sheet are hidden.
28
+ # @option [Boolean] think_top 'True' if rows have a thick top border by default.
29
+ # @option [Boolean] thick_bottom 'True' if rows have a thick bottom border by default.
30
+ # @option [Integer] outline_level_row Highest number of outline level for rows in this sheet. These values shall be in synch with the actual sheet outline levels.
31
+ # @option [Integer] outline_level_col Highest number of outline levels for columns in this sheet. These values shall be in synch with the actual sheet outline levels.
32
+ def initialize(options={})
33
+ set_defaults
34
+ parse_options options
35
+ end
36
+
37
+ serializable_attributes :base_col_width, :default_col_width, :default_row_height,
38
+ :custom_height, :zero_height, :thick_top, :thick_bottom,
39
+ :outline_level_row, :outline_level_col
40
+
41
+ float_attr_accessor :default_col_width, :default_row_height
42
+
43
+ boolean_attr_accessor :custom_height, :zero_height, :thick_top, :thick_bottom
44
+
45
+ unsigned_int_attr_accessor :base_col_width, :outline_level_row, :outline_level_col
46
+
47
+ # serializes this object to an xml string
48
+ # @param [String] str The string this objects serialization will be appended to
49
+ # @return [String]
50
+ def to_xml_string(str='')
51
+ str << "<sheetFormatPr #{serialized_attributes}/>"
52
+ end
53
+
54
+ private
55
+ def set_defaults
56
+ @base_col_width = 8
57
+ @default_row_height = 18
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,69 @@
1
+ module Axlsx
2
+
3
+ # The SheetPr class manages serialization fo a worksheet's sheetPr element.
4
+ class SheetPr
5
+ include Axlsx::OptionsParser
6
+ include Axlsx::Accessors
7
+ include Axlsx::SerializedAttributes
8
+
9
+ serializable_attributes :sync_horizontal,
10
+ :sync_vertical,
11
+ :transtion_evaluation,
12
+ :transition_entry,
13
+ :published,
14
+ :filter_mode,
15
+ :enable_format_conditions_calculation,
16
+ :code_name,
17
+ :sync_ref
18
+
19
+ # These attributes are all boolean so I'm doing a bit of a hand
20
+ # waving magic show to set up the attriubte accessors
21
+ boolean_attr_accessor :sync_horizontal,
22
+ :sync_vertical,
23
+ :transtion_evaluation,
24
+ :transition_entry,
25
+ :published,
26
+ :filter_mode,
27
+ :enable_format_conditions_calculation
28
+
29
+ string_attr_accessor :code_name, :sync_ref
30
+
31
+ # Creates a new SheetPr object
32
+ # @param [Worksheet] worksheet The worksheet that owns this SheetPr object
33
+ def initialize(worksheet, options={})
34
+ raise ArgumentError, "you must provide a worksheet" unless worksheet.is_a?(Worksheet)
35
+ @worksheet = worksheet
36
+ parse_options options
37
+ end
38
+
39
+ # The worksheet these properties apply to!
40
+ # @return [Worksheet]
41
+ attr_reader :worksheet
42
+
43
+ # Serialize the object
44
+ # @param [String] str serialized output will be appended to this object if provided.
45
+ # @return [String]
46
+ def to_xml_string(str = '')
47
+ update_properties
48
+ str << "<sheetPr #{serialized_attributes}>"
49
+ page_setup_pr.to_xml_string(str)
50
+ str << "</sheetPr>"
51
+ end
52
+
53
+ # The PageSetUpPr for this sheet pr object
54
+ # @return [PageSetUpPr]
55
+ def page_setup_pr
56
+ @page_setup_pr ||= PageSetUpPr.new
57
+ end
58
+
59
+ private
60
+
61
+ def update_properties
62
+ page_setup_pr.fit_to_page = worksheet.fit_to_page?
63
+ if worksheet.auto_filter.columns.size > 0
64
+ self.filter_mode = 1
65
+ self.enable_format_conditions_calculation = 1
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,120 @@
1
+ # encoding: UTF-8
2
+ module Axlsx
3
+
4
+ # The SheetProtection object manages worksheet protection options per sheet.
5
+ class SheetProtection
6
+
7
+ include Axlsx::OptionsParser
8
+ include Axlsx::SerializedAttributes
9
+ include Axlsx::Accessors
10
+
11
+ # Creates a new SheetProtection instance
12
+ # @option options [Boolean] sheet @see SheetProtection#sheet
13
+ # @option options [Boolean] objects @see SheetProtection#objects
14
+ # @option options [Boolean] scenarios @see SheetProtection#scenarios
15
+ # @option options [Boolean] format_cells @see SheetProtection#objects
16
+ # @option options [Boolean] format_columns @see SheetProtection#format_columns
17
+ # @option options [Boolean] format_rows @see SheetProtection#format_rows
18
+ # @option options [Boolean] insert_columns @see SheetProtection#insert_columns
19
+ # @option options [Boolean] insert_rows @see SheetProtection#insert_rows
20
+ # @option options [Boolean] insert_hyperlinks @see SheetProtection#insert_hyperlinks
21
+ # @option options [Boolean] delete_columns @see SheetProtection#delete_columns
22
+ # @option options [Boolean] delete_rows @see SheetProtection#delete_rows
23
+ # @option options [Boolean] select_locked_cells @see SheetProtection#select_locked_cells
24
+ # @option options [Boolean] sort @see SheetProtection#sort
25
+ # @option options [Boolean] auto_filter @see SheetProtection#auto_filter
26
+ # @option options [Boolean] pivot_tables @see SheetProtection#pivot_tables
27
+ # @option options [Boolean] select_unlocked_cells @see SheetProtection#select_unlocked_cells
28
+ # @option options [String] password. The password required for unlocking. @see SheetProtection#password=
29
+ def initialize(options={})
30
+ @objects = @scenarios = @select_locked_cells = @select_unlocked_cells = false
31
+ @sheet = @format_cells = @format_rows = @format_columns = @insert_columns = @insert_rows = @insert_hyperlinks = @delete_columns = @delete_rows = @sort = @auto_filter = @pivot_tables = true
32
+ @password = nil
33
+ parse_options options
34
+ end
35
+
36
+ boolean_attr_accessor :sheet, :objects, :scenarios, :format_cells, :format_columns, :format_rows,
37
+ :insert_columns, :insert_rows, :insert_hyperlinks, :delete_columns, :delete_rows,
38
+ :select_locked_cells, :sort, :auto_filter, :pivot_tables, :select_unlocked_cells
39
+
40
+ serializable_attributes :sheet, :objects, :scenarios, :format_cells, :format_columns, :format_rows,
41
+ :insert_columns, :insert_rows, :insert_hyperlinks, :delete_columns, :delete_rows,
42
+ :select_locked_cells, :sort, :auto_filter, :pivot_tables, :select_unlocked_cells, :salt, :password
43
+
44
+ # Specifies the salt which was prepended to the user-supplied password before it was hashed using the hashing algorithm
45
+ # @return [String]
46
+ attr_reader :salt_value
47
+
48
+ # Password hash
49
+ # @return [String]
50
+ # default nil
51
+ attr_reader :password
52
+
53
+ # This block is intended to implement the salt_value, hash_value and spin count as per the ECMA-376 standard.
54
+ # However, it does not seem to actually work in EXCEL - instead they are using their old retro algorithm shown below
55
+ # defined in the transitional portion of the speck. I am leaving this code in in the hope that someday Ill be able to
56
+ # figure out why it does not work, and if Excel even supports it.
57
+ # def propper_password=(v)
58
+ # @algorithm_name = v == nil ? nil : 'SHA-1'
59
+ # @salt_value = @spin_count = @hash_value = v if v == nil
60
+ # return if v == nil
61
+ # require 'digest/sha1'
62
+ # @spin_count = 10000
63
+ # @salt_value = Digest::SHA1.hexdigest(rand(36**8).to_s(36))
64
+ # @spin_count.times do |count|
65
+ # @hash_value = Digest::SHA1.hexdigest((@hash_value ||= (@salt_value + v.to_s)) + Array(count).pack('V'))
66
+ # end
67
+ # end
68
+
69
+ # encodes password for protection locking
70
+ def password=(v)
71
+ return if v == nil
72
+ @password = create_password_hash(v)
73
+ end
74
+
75
+ # Serialize the object
76
+ # @param [String] str
77
+ # @return [String]
78
+ def to_xml_string(str = '')
79
+ str << '<sheetProtection '
80
+ serialized_attributes str
81
+ str << '/>'
82
+ end
83
+
84
+ private
85
+ # Creates a password hash for a given password
86
+ # @return [String]
87
+ def create_password_hash(password)
88
+ encoded_password = encode_password(password)
89
+
90
+ password_as_hex = [encoded_password].pack("v")
91
+ password_as_string = password_as_hex.unpack("H*").first.upcase
92
+
93
+ password_as_string[2..3] + password_as_string[0..1]
94
+ end
95
+
96
+ # Encodes a given password
97
+ # Based on the algorithm provided by Daniel Rentz of OpenOffice.
98
+ # http://www.openoffice.org/sc/excelfileformat.pdf, Revision 1.42, page 115 (21.05.2012)
99
+ # @return [String]
100
+ def encode_password(password)
101
+ i = 0
102
+ chars = password.split(//)
103
+ count = chars.size
104
+
105
+ chars.collect! do |char|
106
+ i += 1
107
+ char = char.unpack('c')[0] << i #ord << i
108
+ low_15 = char & 0x7fff
109
+ high_15 = char & 0x7fff << 15
110
+ high_15 = high_15 >> 15
111
+ char = low_15 | high_15
112
+ end
113
+
114
+ encoded_password = 0x0000
115
+ chars.each { |c| encoded_password ^= c }
116
+ encoded_password ^= count
117
+ encoded_password ^= 0xCE4B
118
+ end
119
+ end
120
+ end
@@ -0,0 +1,213 @@
1
+ # encoding: UTF-8
2
+ module Axlsx
3
+ # View options for a worksheet.
4
+ #
5
+ # @note The recommended way to manage the sheet view is via Worksheet#sheet_view
6
+ # @see Worksheet#sheet_view
7
+ class SheetView
8
+
9
+ include Axlsx::OptionsParser
10
+ include Axlsx::Accessors
11
+ include Axlsx::SerializedAttributes
12
+
13
+ # Creates a new {SheetView} object
14
+ # @option options [Integer] color_id Color Id
15
+ # @option options [Boolean] default_grid_color Default Grid Color
16
+ # @option options [Boolean] right_to_left Right To Left
17
+ # @option options [Boolean] show_formulas Show Formulas
18
+ # @option options [Boolean] show_grid_lines Show Grid Lines
19
+ # @option options [Boolean] show_outline_symbols Show Outline Symbols
20
+ # @option options [Boolean] show_row_col_headers Show Headers
21
+ # @option options [Boolean] show_ruler Show Ruler
22
+ # @option options [Boolean] show_white_space Show White Space
23
+ # @option options [Boolean] show_zeros Show Zero Values
24
+ # @option options [Boolean] tab_selected Sheet Tab Selected
25
+ # @option options [String, Cell] top_left_cell Top Left Visible Cell
26
+ # @option options [Symbol] view View Type
27
+ # @option options [Boolean] window_protection Window Protection
28
+ # @option options [Integer] workbook_view_id Workbook View Index
29
+ # @option options [Integer] zoom_scale
30
+ # @option options [Integer] zoom_scale_normal Zoom Scale Normal View
31
+ # @option options [Integer] zoom_scale_page_layout_view Zoom Scale Page Layout View
32
+ # @option options [Integer] zoom_scale_sheet_layout_view Zoom Scale Page Break Preview
33
+ def initialize(options={})
34
+ #defaults
35
+ @color_id = @top_left_cell = @pane = nil
36
+ @right_to_left = @show_formulas = @show_outline_symbols = @show_white_space = @tab_selected = @window_protection = false
37
+ @default_grid_color = @show_grid_lines = @show_row_col_headers = @show_ruler = @show_zeros = true
38
+ @zoom_scale = 100
39
+ @zoom_scale_normal = @zoom_scale_page_layout_view = @zoom_scale_sheet_layout_view = @workbook_view_id = 0
40
+ @selections = {}
41
+ parse_options options
42
+ end
43
+
44
+ boolean_attr_accessor :default_grid_color, :right_to_left, :show_formulas, :show_grid_lines,
45
+ :show_row_col_headers, :show_ruler, :show_white_space, :show_zeros, :tab_selected, :window_protection, :show_outline_symbols
46
+
47
+ serializable_attributes :default_grid_color, :right_to_left, :show_formulas, :show_grid_lines,
48
+ :show_row_col_headers, :show_ruler, :show_white_space, :show_zeros, :tab_selected, :window_protection, :show_outline_symbols,
49
+ :zoom_scale_sheet_layout_view, :zoom_scale_page_layout_view, :zoom_scale_normal, :workbook_view_id,
50
+ :view, :top_left_cell, :color_id, :zoom_scale
51
+
52
+
53
+ # instance values that must be serialized as their own elements - e.g. not attributes.
54
+ CHILD_ELEMENTS = [ :pane, :selections ]
55
+
56
+ # The pane object for the sheet view
57
+ # @return [Pane]
58
+ # @see [Pane]
59
+ def pane
60
+ @pane ||= Pane.new
61
+ yield @pane if block_given?
62
+ @pane
63
+ end
64
+
65
+ # A hash of selection objects keyed by pane type associated with this sheet view.
66
+ # @return [Hash]
67
+ attr_reader :selections
68
+
69
+ #
70
+ # Color Id
71
+ # Index to the color value for row/column
72
+ # text headings and gridlines. This is an
73
+ # 'index color value' (ICV) rather than
74
+ # rgb value.
75
+ # @see type
76
+ # @return [Integer]
77
+ # default nil
78
+ attr_reader :color_id
79
+
80
+ # Top Left Visible Cell
81
+ # Location of the top left visible cell Location
82
+ # of the top left visible cell in the bottom right
83
+ # pane (when in Left-to-Right mode).
84
+ # @see type
85
+ # @return [String]
86
+ # default nil
87
+ attr_reader :top_left_cell
88
+
89
+
90
+ # View Type
91
+ # Indicates the view type.
92
+ # Options are
93
+ # * normal: Normal view
94
+ # * page_break_preview: Page break preview
95
+ # * page_layout: Page Layout View
96
+ # @see type
97
+ # @return [Symbol]
98
+ # default :normal
99
+ attr_reader :view
100
+
101
+ # Workbook View Index
102
+ # Zero-based index of this workbook view, pointing
103
+ # to a workbookView element in the bookViews collection.
104
+ # @see type
105
+ # @return [Integer]
106
+ # default 0
107
+ attr_reader :workbook_view_id
108
+
109
+ # Zoom Scale
110
+ # Window zoom magnification for current view
111
+ # representing percent values. This attribute
112
+ # is restricted to values ranging from 10 to 400.
113
+ # Horizontal & Vertical scale together.
114
+ # Current view can be Normal, Page Layout, or
115
+ # Page Break Preview.
116
+ # @see type
117
+ # @return [Integer]
118
+ # default 100
119
+ attr_reader :zoom_scale
120
+
121
+
122
+ # Zoom Scale Normal View
123
+ # Zoom magnification to use when in normal view,
124
+ # representing percent values. This attribute is
125
+ # restricted to values ranging from 10 to 400.
126
+ # Horizontal & Vertical scale together.
127
+ # Applies for worksheets only; zero implies the
128
+ # automatic setting.
129
+ # @see type
130
+ # @return [Integer]
131
+ # default 0
132
+ attr_reader :zoom_scale_normal
133
+
134
+
135
+ # Zoom Scale Page Layout View
136
+ # Zoom magnification to use when in page layout
137
+ # view, representing percent values. This attribute
138
+ # is restricted to values ranging from 10 to 400.
139
+ # Horizontal & Vertical scale together.
140
+ # Applies for worksheets only; zero implies
141
+ # the automatic setting.
142
+ # @see type
143
+ # @return [Integer]
144
+ # default 0
145
+ attr_reader :zoom_scale_page_layout_view
146
+
147
+
148
+ # Zoom Scale Page Break Preview
149
+ # Zoom magnification to use when in page break
150
+ # preview, representing percent values. This
151
+ # attribute is restricted to values ranging
152
+ # from 10 to 400. Horizontal & Vertical scale
153
+ # together.
154
+ # Applies for worksheet only; zero implies
155
+ # the automatic setting.
156
+ # @see type
157
+ # @return [Integer]
158
+ # default 0
159
+ attr_reader :zoom_scale_sheet_layout_view
160
+
161
+ # Adds a new selection
162
+ # param [Symbol] pane
163
+ # param [Hash] options
164
+ # return [Selection]
165
+ def add_selection(pane, options = {})
166
+ @selections[pane] = Selection.new(options.merge(:pane => pane))
167
+ end
168
+
169
+ # @see color_id
170
+ def color_id=(v); Axlsx::validate_unsigned_int(v); @color_id = v end
171
+
172
+ # @see top_left_cell
173
+ def top_left_cell=(v)
174
+ cell = (v.class == Axlsx::Cell ? v.r_abs : v)
175
+ Axlsx::validate_string(cell)
176
+ @top_left_cell = cell
177
+ end
178
+
179
+ # @see view
180
+ def view=(v); Axlsx::validate_sheet_view_type(v); @view = v end
181
+
182
+ # @see workbook_view_id
183
+ def workbook_view_id=(v); Axlsx::validate_unsigned_int(v); @workbook_view_id = v end
184
+
185
+ # @see zoom_scale
186
+ def zoom_scale=(v); Axlsx::validate_scale_0_10_400(v); @zoom_scale = v end
187
+
188
+ # @see zoom_scale_normal
189
+ def zoom_scale_normal=(v); Axlsx::validate_scale_0_10_400(v); @zoom_scale_normal = v end
190
+
191
+ # @see zoom_scale_page_layout_view
192
+ def zoom_scale_page_layout_view=(v); Axlsx::validate_scale_0_10_400(v); @zoom_scale_page_layout_view = v end
193
+
194
+ # @see zoom_scale_sheet_layout_view
195
+ def zoom_scale_sheet_layout_view=(v); Axlsx::validate_scale_0_10_400(v); @zoom_scale_sheet_layout_view = v end
196
+
197
+ # Serializes the data validation
198
+ # @param [String] str
199
+ # @return [String]
200
+ def to_xml_string(str = '')
201
+ str << '<sheetViews>'
202
+ str << '<sheetView '
203
+ serialized_attributes str
204
+ str << '>'
205
+ @pane.to_xml_string(str) if @pane
206
+ @selections.each do |key, selection|
207
+ selection.to_xml_string(str)
208
+ end
209
+ str << '</sheetView>'
210
+ str << '</sheetViews>'
211
+ end
212
+ end
213
+ end