caxlsx 3.1.1 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (294) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +9 -9
  3. data/.yardopts_guide +18 -18
  4. data/CHANGELOG.md +354 -343
  5. data/LICENSE +21 -21
  6. data/README.md +168 -172
  7. data/Rakefile +29 -29
  8. data/examples/generate.rb +15 -15
  9. data/lib/axlsx/content_type/abstract_content_type.rb +32 -32
  10. data/lib/axlsx/content_type/content_type.rb +26 -26
  11. data/lib/axlsx/content_type/default.rb +25 -25
  12. data/lib/axlsx/content_type/override.rb +25 -25
  13. data/lib/axlsx/doc_props/app.rb +235 -235
  14. data/lib/axlsx/doc_props/core.rb +39 -39
  15. data/lib/axlsx/drawing/area_chart.rb +99 -99
  16. data/lib/axlsx/drawing/area_series.rb +110 -110
  17. data/lib/axlsx/drawing/ax_data_source.rb +26 -26
  18. data/lib/axlsx/drawing/axes.rb +61 -61
  19. data/lib/axlsx/drawing/axis.rb +190 -190
  20. data/lib/axlsx/drawing/bar_3D_chart.rb +148 -148
  21. data/lib/axlsx/drawing/bar_chart.rb +138 -138
  22. data/lib/axlsx/drawing/bar_series.rb +97 -97
  23. data/lib/axlsx/drawing/bubble_chart.rb +59 -59
  24. data/lib/axlsx/drawing/bubble_series.rb +63 -63
  25. data/lib/axlsx/drawing/cat_axis.rb +85 -85
  26. data/lib/axlsx/drawing/chart.rb +276 -276
  27. data/lib/axlsx/drawing/d_lbls.rb +90 -90
  28. data/lib/axlsx/drawing/drawing.rb +167 -167
  29. data/lib/axlsx/drawing/graphic_frame.rb +54 -54
  30. data/lib/axlsx/drawing/hyperlink.rb +100 -100
  31. data/lib/axlsx/drawing/line_3D_chart.rb +68 -68
  32. data/lib/axlsx/drawing/line_chart.rb +99 -99
  33. data/lib/axlsx/drawing/line_series.rb +110 -110
  34. data/lib/axlsx/drawing/marker.rb +84 -84
  35. data/lib/axlsx/drawing/num_data.rb +52 -52
  36. data/lib/axlsx/drawing/num_data_source.rb +62 -62
  37. data/lib/axlsx/drawing/num_val.rb +34 -34
  38. data/lib/axlsx/drawing/one_cell_anchor.rb +99 -99
  39. data/lib/axlsx/drawing/pic.rb +211 -211
  40. data/lib/axlsx/drawing/picture_locking.rb +42 -42
  41. data/lib/axlsx/drawing/pie_3D_chart.rb +47 -47
  42. data/lib/axlsx/drawing/pie_series.rb +74 -74
  43. data/lib/axlsx/drawing/scaling.rb +60 -60
  44. data/lib/axlsx/drawing/scatter_chart.rb +74 -74
  45. data/lib/axlsx/drawing/scatter_series.rb +129 -98
  46. data/lib/axlsx/drawing/ser_axis.rb +45 -45
  47. data/lib/axlsx/drawing/series.rb +69 -69
  48. data/lib/axlsx/drawing/series_title.rb +25 -25
  49. data/lib/axlsx/drawing/str_data.rb +42 -42
  50. data/lib/axlsx/drawing/str_val.rb +34 -34
  51. data/lib/axlsx/drawing/title.rb +97 -97
  52. data/lib/axlsx/drawing/two_cell_anchor.rb +97 -97
  53. data/lib/axlsx/drawing/val_axis.rb +37 -37
  54. data/lib/axlsx/drawing/view_3D.rb +115 -115
  55. data/lib/axlsx/drawing/vml_drawing.rb +42 -42
  56. data/lib/axlsx/drawing/vml_shape.rb +66 -66
  57. data/lib/axlsx/package.rb +388 -388
  58. data/lib/axlsx/rels/relationship.rb +130 -130
  59. data/lib/axlsx/rels/relationships.rb +32 -32
  60. data/lib/axlsx/stylesheet/border.rb +73 -71
  61. data/lib/axlsx/stylesheet/border_pr.rb +71 -71
  62. data/lib/axlsx/stylesheet/cell_alignment.rb +132 -132
  63. data/lib/axlsx/stylesheet/cell_protection.rb +41 -41
  64. data/lib/axlsx/stylesheet/cell_style.rb +72 -72
  65. data/lib/axlsx/stylesheet/color.rb +76 -76
  66. data/lib/axlsx/stylesheet/dxf.rb +79 -79
  67. data/lib/axlsx/stylesheet/fill.rb +35 -35
  68. data/lib/axlsx/stylesheet/font.rb +156 -156
  69. data/lib/axlsx/stylesheet/gradient_fill.rb +103 -103
  70. data/lib/axlsx/stylesheet/gradient_stop.rb +37 -37
  71. data/lib/axlsx/stylesheet/num_fmt.rb +86 -86
  72. data/lib/axlsx/stylesheet/pattern_fill.rb +73 -73
  73. data/lib/axlsx/stylesheet/styles.rb +494 -420
  74. data/lib/axlsx/stylesheet/table_style.rb +54 -54
  75. data/lib/axlsx/stylesheet/table_style_element.rb +77 -77
  76. data/lib/axlsx/stylesheet/table_styles.rb +46 -46
  77. data/lib/axlsx/stylesheet/xf.rb +147 -147
  78. data/lib/axlsx/util/accessors.rb +64 -64
  79. data/lib/axlsx/util/constants.rb +410 -401
  80. data/lib/axlsx/util/mime_type_utils.rb +11 -11
  81. data/lib/axlsx/util/options_parser.rb +16 -16
  82. data/lib/axlsx/util/serialized_attributes.rb +89 -89
  83. data/lib/axlsx/util/simple_typed_list.rb +179 -179
  84. data/lib/axlsx/util/storage.rb +146 -146
  85. data/lib/axlsx/util/validators.rb +312 -312
  86. data/lib/axlsx/util/zip_command.rb +73 -73
  87. data/lib/axlsx/version.rb +5 -5
  88. data/lib/axlsx/workbook/defined_name.rb +128 -128
  89. data/lib/axlsx/workbook/defined_names.rb +21 -21
  90. data/lib/axlsx/workbook/shared_strings_table.rb +77 -77
  91. data/lib/axlsx/workbook/workbook.rb +395 -370
  92. data/lib/axlsx/workbook/workbook_view.rb +80 -80
  93. data/lib/axlsx/workbook/workbook_views.rb +22 -22
  94. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -77
  95. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -94
  96. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +244 -244
  97. data/lib/axlsx/workbook/worksheet/break.rb +35 -35
  98. data/lib/axlsx/workbook/worksheet/cell.rb +506 -505
  99. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +164 -164
  100. data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -60
  101. data/lib/axlsx/workbook/worksheet/cfvos.rb +18 -18
  102. data/lib/axlsx/workbook/worksheet/col.rb +145 -145
  103. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -35
  104. data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -110
  105. data/lib/axlsx/workbook/worksheet/cols.rb +23 -23
  106. data/lib/axlsx/workbook/worksheet/comment.rb +91 -91
  107. data/lib/axlsx/workbook/worksheet/comments.rb +82 -82
  108. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -82
  109. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -220
  110. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -25
  111. data/lib/axlsx/workbook/worksheet/data_bar.rb +129 -129
  112. data/lib/axlsx/workbook/worksheet/data_validation.rb +246 -246
  113. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -28
  114. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -30
  115. data/lib/axlsx/workbook/worksheet/dimension.rb +64 -64
  116. data/lib/axlsx/workbook/worksheet/header_footer.rb +52 -52
  117. data/lib/axlsx/workbook/worksheet/icon_set.rb +81 -81
  118. data/lib/axlsx/workbook/worksheet/merged_cells.rb +37 -37
  119. data/lib/axlsx/workbook/worksheet/outline_pr.rb +33 -33
  120. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -97
  121. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -44
  122. data/lib/axlsx/workbook/worksheet/page_setup.rb +240 -240
  123. data/lib/axlsx/workbook/worksheet/pane.rb +139 -139
  124. data/lib/axlsx/workbook/worksheet/pivot_table.rb +296 -294
  125. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -66
  126. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -24
  127. data/lib/axlsx/workbook/worksheet/print_options.rb +39 -39
  128. data/lib/axlsx/workbook/worksheet/protected_range.rb +47 -47
  129. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +37 -37
  130. data/lib/axlsx/workbook/worksheet/rich_text.rb +55 -55
  131. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +250 -250
  132. data/lib/axlsx/workbook/worksheet/row.rb +164 -164
  133. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -33
  134. data/lib/axlsx/workbook/worksheet/selection.rb +101 -101
  135. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -29
  136. data/lib/axlsx/workbook/worksheet/sheet_data.rb +27 -27
  137. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +87 -87
  138. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +118 -118
  139. data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -213
  140. data/lib/axlsx/workbook/worksheet/table.rb +102 -102
  141. data/lib/axlsx/workbook/worksheet/table_style_info.rb +49 -49
  142. data/lib/axlsx/workbook/worksheet/tables.rb +34 -34
  143. data/lib/axlsx/workbook/worksheet/worksheet.rb +786 -768
  144. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -58
  145. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -58
  146. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -74
  147. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -38
  148. data/lib/axlsx.rb +185 -171
  149. data/lib/caxlsx.rb +2 -2
  150. data/lib/schema/dc.xsd +118 -118
  151. data/lib/schema/dcmitype.xsd +51 -51
  152. data/lib/schema/dcterms.xsd +331 -331
  153. data/lib/schema/dml-chartDrawing.xsd +146 -146
  154. data/lib/schema/dml-compatibility.xsd +14 -14
  155. data/lib/schema/dml-lockedCanvas.xsd +11 -11
  156. data/lib/schema/dml-main.xsd +3048 -3048
  157. data/lib/schema/dml-picture.xsd +23 -23
  158. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -185
  159. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -185
  160. data/lib/schema/shared-additionalCharacteristics.xsd +28 -28
  161. data/lib/schema/shared-bibliography.xsd +144 -144
  162. data/lib/schema/shared-commonSimpleTypes.xsd +166 -166
  163. data/lib/schema/shared-customXmlDataProperties.xsd +25 -25
  164. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -18
  165. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -59
  166. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -56
  167. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -195
  168. data/lib/schema/shared-relationshipReference.xsd +25 -25
  169. data/lib/schema/vml-main.xsd +569 -569
  170. data/lib/schema/vml-officeDrawing.xsd +509 -509
  171. data/lib/schema/vml-presentationDrawing.xsd +12 -12
  172. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -108
  173. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -96
  174. data/lib/schema/xml.xsd +116 -116
  175. data/test/benchmark.rb +72 -72
  176. data/test/content_type/tc_content_type.rb +76 -76
  177. data/test/content_type/tc_default.rb +16 -16
  178. data/test/content_type/tc_override.rb +14 -14
  179. data/test/doc_props/tc_app.rb +43 -43
  180. data/test/doc_props/tc_core.rb +42 -42
  181. data/test/drawing/tc_area_chart.rb +39 -39
  182. data/test/drawing/tc_area_series.rb +71 -71
  183. data/test/drawing/tc_axes.rb +7 -7
  184. data/test/drawing/tc_axis.rb +112 -112
  185. data/test/drawing/tc_bar_3D_chart.rb +86 -86
  186. data/test/drawing/tc_bar_chart.rb +86 -86
  187. data/test/drawing/tc_bar_series.rb +46 -46
  188. data/test/drawing/tc_bubble_chart.rb +44 -44
  189. data/test/drawing/tc_bubble_series.rb +21 -21
  190. data/test/drawing/tc_cat_axis.rb +31 -31
  191. data/test/drawing/tc_cat_axis_data.rb +27 -27
  192. data/test/drawing/tc_chart.rb +123 -123
  193. data/test/drawing/tc_d_lbls.rb +57 -57
  194. data/test/drawing/tc_data_source.rb +23 -23
  195. data/test/drawing/tc_drawing.rb +80 -80
  196. data/test/drawing/tc_graphic_frame.rb +27 -27
  197. data/test/drawing/tc_hyperlink.rb +64 -64
  198. data/test/drawing/tc_line_3d_chart.rb +47 -47
  199. data/test/drawing/tc_line_chart.rb +39 -39
  200. data/test/drawing/tc_line_series.rb +71 -71
  201. data/test/drawing/tc_marker.rb +44 -44
  202. data/test/drawing/tc_named_axis_data.rb +27 -27
  203. data/test/drawing/tc_num_data.rb +31 -31
  204. data/test/drawing/tc_num_val.rb +29 -29
  205. data/test/drawing/tc_one_cell_anchor.rb +66 -66
  206. data/test/drawing/tc_pic.rb +103 -103
  207. data/test/drawing/tc_picture_locking.rb +72 -72
  208. data/test/drawing/tc_pie_3D_chart.rb +28 -28
  209. data/test/drawing/tc_pie_series.rb +33 -33
  210. data/test/drawing/tc_scaling.rb +36 -36
  211. data/test/drawing/tc_scatter_chart.rb +48 -48
  212. data/test/drawing/tc_scatter_series.rb +74 -56
  213. data/test/drawing/tc_ser_axis.rb +31 -31
  214. data/test/drawing/tc_series.rb +23 -23
  215. data/test/drawing/tc_series_title.rb +54 -54
  216. data/test/drawing/tc_str_data.rb +18 -18
  217. data/test/drawing/tc_str_val.rb +30 -30
  218. data/test/drawing/tc_title.rb +70 -70
  219. data/test/drawing/tc_two_cell_anchor.rb +36 -36
  220. data/test/drawing/tc_val_axis.rb +24 -24
  221. data/test/drawing/tc_view_3D.rb +54 -54
  222. data/test/drawing/tc_vml_drawing.rb +25 -25
  223. data/test/drawing/tc_vml_shape.rb +106 -106
  224. data/test/profile.rb +24 -24
  225. data/test/rels/tc_relationship.rb +52 -52
  226. data/test/rels/tc_relationships.rb +37 -37
  227. data/test/stylesheet/tc_border.rb +37 -37
  228. data/test/stylesheet/tc_border_pr.rb +32 -32
  229. data/test/stylesheet/tc_cell_alignment.rb +81 -81
  230. data/test/stylesheet/tc_cell_protection.rb +29 -29
  231. data/test/stylesheet/tc_cell_style.rb +57 -57
  232. data/test/stylesheet/tc_color.rb +43 -43
  233. data/test/stylesheet/tc_dxf.rb +81 -81
  234. data/test/stylesheet/tc_fill.rb +18 -18
  235. data/test/stylesheet/tc_font.rb +133 -133
  236. data/test/stylesheet/tc_gradient_fill.rb +72 -72
  237. data/test/stylesheet/tc_gradient_stop.rb +31 -31
  238. data/test/stylesheet/tc_num_fmt.rb +30 -30
  239. data/test/stylesheet/tc_pattern_fill.rb +43 -43
  240. data/test/stylesheet/tc_styles.rb +309 -261
  241. data/test/stylesheet/tc_table_style.rb +44 -44
  242. data/test/stylesheet/tc_table_style_element.rb +45 -45
  243. data/test/stylesheet/tc_table_styles.rb +29 -29
  244. data/test/stylesheet/tc_xf.rb +120 -120
  245. data/test/tc_axlsx.rb +109 -109
  246. data/test/tc_helper.rb +10 -10
  247. data/test/tc_package.rb +317 -314
  248. data/test/util/tc_mime_type_utils.rb +13 -13
  249. data/test/util/tc_serialized_attributes.rb +19 -19
  250. data/test/util/tc_simple_typed_list.rb +77 -77
  251. data/test/util/tc_validators.rb +210 -210
  252. data/test/workbook/tc_defined_name.rb +49 -49
  253. data/test/workbook/tc_shared_strings_table.rb +59 -59
  254. data/test/workbook/tc_workbook.rb +165 -160
  255. data/test/workbook/tc_workbook_view.rb +50 -50
  256. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -38
  257. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -76
  258. data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -50
  259. data/test/workbook/worksheet/tc_break.rb +49 -49
  260. data/test/workbook/worksheet/tc_cell.rb +465 -453
  261. data/test/workbook/worksheet/tc_cfvo.rb +31 -31
  262. data/test/workbook/worksheet/tc_col.rb +93 -93
  263. data/test/workbook/worksheet/tc_color_scale.rb +58 -58
  264. data/test/workbook/worksheet/tc_comment.rb +72 -72
  265. data/test/workbook/worksheet/tc_comments.rb +57 -57
  266. data/test/workbook/worksheet/tc_conditional_formatting.rb +224 -224
  267. data/test/workbook/worksheet/tc_data_bar.rb +46 -46
  268. data/test/workbook/worksheet/tc_data_validation.rb +265 -265
  269. data/test/workbook/worksheet/tc_date_time_converter.rb +124 -124
  270. data/test/workbook/worksheet/tc_header_footer.rb +151 -151
  271. data/test/workbook/worksheet/tc_icon_set.rb +45 -45
  272. data/test/workbook/worksheet/tc_outline_pr.rb +19 -19
  273. data/test/workbook/worksheet/tc_page_margins.rb +97 -97
  274. data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -15
  275. data/test/workbook/worksheet/tc_page_setup.rb +143 -143
  276. data/test/workbook/worksheet/tc_pane.rb +54 -54
  277. data/test/workbook/worksheet/tc_pivot_table.rb +180 -143
  278. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +62 -62
  279. data/test/workbook/worksheet/tc_print_options.rb +72 -72
  280. data/test/workbook/worksheet/tc_protected_range.rb +17 -17
  281. data/test/workbook/worksheet/tc_rich_text.rb +44 -44
  282. data/test/workbook/worksheet/tc_rich_text_run.rb +173 -173
  283. data/test/workbook/worksheet/tc_row.rb +160 -160
  284. data/test/workbook/worksheet/tc_selection.rb +55 -55
  285. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -18
  286. data/test/workbook/worksheet/tc_sheet_format_pr.rb +88 -88
  287. data/test/workbook/worksheet/tc_sheet_pr.rb +49 -49
  288. data/test/workbook/worksheet/tc_sheet_protection.rb +117 -117
  289. data/test/workbook/worksheet/tc_sheet_view.rb +214 -214
  290. data/test/workbook/worksheet/tc_table.rb +77 -77
  291. data/test/workbook/worksheet/tc_table_style_info.rb +53 -53
  292. data/test/workbook/worksheet/tc_worksheet.rb +632 -601
  293. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +55 -55
  294. metadata +101 -101
@@ -1,27 +1,27 @@
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 do |row, index|
21
- row.to_xml_string(index, str)
22
- end
23
- str << '</sheetData>'
24
- end
25
-
26
- end
27
- end
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 do |row, index|
21
+ row.to_xml_string(index, str)
22
+ end
23
+ str << '</sheetData>'
24
+ end
25
+
26
+ end
27
+ end
@@ -1,87 +1,87 @@
1
- module Axlsx
2
-
3
- # The SheetPr class manages serialization of 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
- :transition_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
- :transition_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
- @outline_pr = nil
37
- parse_options options
38
- end
39
-
40
- # The worksheet these properties apply to!
41
- # @return [Worksheet]
42
- attr_reader :worksheet
43
-
44
- # The tab color of the sheet.
45
- # @return [Color]
46
- attr_reader :tab_color
47
-
48
- # Serialize the object
49
- # @param [String] str serialized output will be appended to this object if provided.
50
- # @return [String]
51
- def to_xml_string(str = '')
52
- update_properties
53
- str << "<sheetPr #{serialized_attributes}>"
54
- tab_color.to_xml_string(str, 'tabColor') if tab_color
55
- outline_pr.to_xml_string(str) if @outline_pr
56
- page_setup_pr.to_xml_string(str)
57
- str << "</sheetPr>"
58
- end
59
-
60
- # The PageSetUpPr for this sheet pr object
61
- # @return [PageSetUpPr]
62
- def page_setup_pr
63
- @page_setup_pr ||= PageSetUpPr.new
64
- end
65
-
66
- # The OutlinePr for this sheet pr object
67
- # @return [OutlinePr]
68
- def outline_pr
69
- @outline_pr ||= OutlinePr.new
70
- end
71
-
72
- # @see tab_color
73
- def tab_color=(v)
74
- @tab_color ||= Color.new(:rgb => v)
75
- end
76
-
77
- private
78
-
79
- def update_properties
80
- page_setup_pr.fit_to_page = worksheet.fit_to_page?
81
- if worksheet.auto_filter.columns.size > 0
82
- self.filter_mode = 1
83
- self.enable_format_conditions_calculation = 1
84
- end
85
- end
86
- end
87
- end
1
+ module Axlsx
2
+
3
+ # The SheetPr class manages serialization of 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
+ :transition_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
+ :transition_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
+ @outline_pr = nil
37
+ parse_options options
38
+ end
39
+
40
+ # The worksheet these properties apply to!
41
+ # @return [Worksheet]
42
+ attr_reader :worksheet
43
+
44
+ # The tab color of the sheet.
45
+ # @return [Color]
46
+ attr_reader :tab_color
47
+
48
+ # Serialize the object
49
+ # @param [String] str serialized output will be appended to this object if provided.
50
+ # @return [String]
51
+ def to_xml_string(str = '')
52
+ update_properties
53
+ str << "<sheetPr #{serialized_attributes}>"
54
+ tab_color.to_xml_string(str, 'tabColor') if tab_color
55
+ outline_pr.to_xml_string(str) if @outline_pr
56
+ page_setup_pr.to_xml_string(str)
57
+ str << "</sheetPr>"
58
+ end
59
+
60
+ # The PageSetUpPr for this sheet pr object
61
+ # @return [PageSetUpPr]
62
+ def page_setup_pr
63
+ @page_setup_pr ||= PageSetUpPr.new
64
+ end
65
+
66
+ # The OutlinePr for this sheet pr object
67
+ # @return [OutlinePr]
68
+ def outline_pr
69
+ @outline_pr ||= OutlinePr.new
70
+ end
71
+
72
+ # @see tab_color
73
+ def tab_color=(v)
74
+ @tab_color ||= Color.new(:rgb => v)
75
+ end
76
+
77
+ private
78
+
79
+ def update_properties
80
+ page_setup_pr.fit_to_page = worksheet.fit_to_page?
81
+ if worksheet.auto_filter.columns.size > 0
82
+ self.filter_mode = 1
83
+ self.enable_format_conditions_calculation = 1
84
+ end
85
+ end
86
+ end
87
+ end
@@ -1,118 +1,118 @@
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
- serialized_tag('sheetProtection', str)
80
- end
81
-
82
- private
83
- # Creates a password hash for a given password
84
- # @return [String]
85
- def create_password_hash(password)
86
- encoded_password = encode_password(password)
87
-
88
- password_as_hex = [encoded_password].pack("v")
89
- password_as_string = password_as_hex.unpack("H*").first.upcase
90
-
91
- password_as_string[2..3] + password_as_string[0..1]
92
- end
93
-
94
- # Encodes a given password
95
- # Based on the algorithm provided by Daniel Rentz of OpenOffice.
96
- # http://www.openoffice.org/sc/excelfileformat.pdf, Revision 1.42, page 115 (21.05.2012)
97
- # @return [String]
98
- def encode_password(password)
99
- i = 0
100
- chars = password.split(//)
101
- count = chars.size
102
-
103
- chars.collect! do |char|
104
- i += 1
105
- char = char.unpack('c')[0] << i #ord << i
106
- low_15 = char & 0x7fff
107
- high_15 = char & 0x7fff << 15
108
- high_15 = high_15 >> 15
109
- char = low_15 | high_15
110
- end
111
-
112
- encoded_password = 0x0000
113
- chars.each { |c| encoded_password ^= c }
114
- encoded_password ^= count
115
- encoded_password ^= 0xCE4B
116
- end
117
- end
118
- end
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
+ serialized_tag('sheetProtection', str)
80
+ end
81
+
82
+ private
83
+ # Creates a password hash for a given password
84
+ # @return [String]
85
+ def create_password_hash(password)
86
+ encoded_password = encode_password(password)
87
+
88
+ password_as_hex = [encoded_password].pack("v")
89
+ password_as_string = password_as_hex.unpack("H*").first.upcase
90
+
91
+ password_as_string[2..3] + password_as_string[0..1]
92
+ end
93
+
94
+ # Encodes a given password
95
+ # Based on the algorithm provided by Daniel Rentz of OpenOffice.
96
+ # http://www.openoffice.org/sc/excelfileformat.pdf, Revision 1.42, page 115 (21.05.2012)
97
+ # @return [String]
98
+ def encode_password(password)
99
+ i = 0
100
+ chars = password.split(//)
101
+ count = chars.size
102
+
103
+ chars.collect! do |char|
104
+ i += 1
105
+ char = char.unpack('c')[0] << i #ord << i
106
+ low_15 = char & 0x7fff
107
+ high_15 = char & 0x7fff << 15
108
+ high_15 = high_15 >> 15
109
+ char = low_15 | high_15
110
+ end
111
+
112
+ encoded_password = 0x0000
113
+ chars.each { |c| encoded_password ^= c }
114
+ encoded_password ^= count
115
+ encoded_password ^= 0xCE4B
116
+ end
117
+ end
118
+ end