caxlsx 3.2.0 → 3.4.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 (301) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +9 -9
  3. data/.yardopts_guide +18 -18
  4. data/CHANGELOG.md +394 -354
  5. data/LICENSE +21 -21
  6. data/README.md +184 -168
  7. data/Rakefile +28 -29
  8. data/examples/generate.rb +15 -15
  9. data/lib/axlsx/content_type/abstract_content_type.rb +29 -32
  10. data/lib/axlsx/content_type/content_type.rb +22 -26
  11. data/lib/axlsx/content_type/default.rb +21 -25
  12. data/lib/axlsx/content_type/override.rb +21 -25
  13. data/lib/axlsx/doc_props/app.rb +230 -235
  14. data/lib/axlsx/doc_props/core.rb +34 -39
  15. data/lib/axlsx/drawing/area_chart.rb +96 -99
  16. data/lib/axlsx/drawing/area_series.rb +107 -110
  17. data/lib/axlsx/drawing/ax_data_source.rb +21 -26
  18. data/lib/axlsx/drawing/axes.rb +60 -61
  19. data/lib/axlsx/drawing/axis.rb +185 -190
  20. data/lib/axlsx/drawing/bar_3D_chart.rb +145 -148
  21. data/lib/axlsx/drawing/bar_chart.rb +135 -138
  22. data/lib/axlsx/drawing/bar_series.rb +91 -97
  23. data/lib/axlsx/drawing/bubble_chart.rb +56 -59
  24. data/lib/axlsx/drawing/bubble_series.rb +60 -63
  25. data/lib/axlsx/drawing/cat_axis.rb +80 -85
  26. data/lib/axlsx/drawing/chart.rb +294 -276
  27. data/lib/axlsx/drawing/d_lbls.rb +92 -90
  28. data/lib/axlsx/drawing/drawing.rb +163 -167
  29. data/lib/axlsx/drawing/graphic_frame.rb +51 -54
  30. data/lib/axlsx/drawing/hyperlink.rb +97 -100
  31. data/lib/axlsx/drawing/line_3D_chart.rb +64 -68
  32. data/lib/axlsx/drawing/line_chart.rb +96 -99
  33. data/lib/axlsx/drawing/line_series.rb +107 -110
  34. data/lib/axlsx/drawing/marker.rb +80 -84
  35. data/lib/axlsx/drawing/num_data.rb +47 -52
  36. data/lib/axlsx/drawing/num_data_source.rb +58 -62
  37. data/lib/axlsx/drawing/num_val.rb +31 -34
  38. data/lib/axlsx/drawing/one_cell_anchor.rb +97 -99
  39. data/lib/axlsx/drawing/pic.rb +244 -211
  40. data/lib/axlsx/drawing/picture_locking.rb +39 -42
  41. data/lib/axlsx/drawing/pie_3D_chart.rb +42 -47
  42. data/lib/axlsx/drawing/pie_series.rb +69 -74
  43. data/lib/axlsx/drawing/scaling.rb +57 -60
  44. data/lib/axlsx/drawing/scatter_chart.rb +71 -74
  45. data/lib/axlsx/drawing/scatter_series.rb +126 -129
  46. data/lib/axlsx/drawing/ser_axis.rb +41 -45
  47. data/lib/axlsx/drawing/series.rb +67 -69
  48. data/lib/axlsx/drawing/series_title.rb +23 -25
  49. data/lib/axlsx/drawing/str_data.rb +37 -42
  50. data/lib/axlsx/drawing/str_val.rb +31 -34
  51. data/lib/axlsx/drawing/title.rb +104 -97
  52. data/lib/axlsx/drawing/two_cell_anchor.rb +95 -97
  53. data/lib/axlsx/drawing/val_axis.rb +34 -37
  54. data/lib/axlsx/drawing/view_3D.rb +115 -115
  55. data/lib/axlsx/drawing/vml_drawing.rb +39 -42
  56. data/lib/axlsx/drawing/vml_shape.rb +63 -66
  57. data/lib/axlsx/package.rb +397 -388
  58. data/lib/axlsx/rels/relationship.rb +127 -130
  59. data/lib/axlsx/rels/relationships.rb +29 -32
  60. data/lib/axlsx/stylesheet/border.rb +70 -73
  61. data/lib/axlsx/stylesheet/border_pr.rb +69 -71
  62. data/lib/axlsx/stylesheet/cell_alignment.rb +124 -132
  63. data/lib/axlsx/stylesheet/cell_protection.rb +38 -41
  64. data/lib/axlsx/stylesheet/cell_style.rb +68 -72
  65. data/lib/axlsx/stylesheet/color.rb +77 -76
  66. data/lib/axlsx/stylesheet/dxf.rb +75 -79
  67. data/lib/axlsx/stylesheet/fill.rb +31 -35
  68. data/lib/axlsx/stylesheet/font.rb +157 -156
  69. data/lib/axlsx/stylesheet/gradient_fill.rb +101 -103
  70. data/lib/axlsx/stylesheet/gradient_stop.rb +36 -37
  71. data/lib/axlsx/stylesheet/num_fmt.rb +83 -86
  72. data/lib/axlsx/stylesheet/pattern_fill.rb +71 -73
  73. data/lib/axlsx/stylesheet/styles.rb +543 -494
  74. data/lib/axlsx/stylesheet/table_style.rb +51 -54
  75. data/lib/axlsx/stylesheet/table_style_element.rb +74 -77
  76. data/lib/axlsx/stylesheet/table_styles.rb +42 -46
  77. data/lib/axlsx/stylesheet/xf.rb +144 -147
  78. data/lib/axlsx/util/accessors.rb +62 -64
  79. data/lib/axlsx/util/constants.rb +414 -410
  80. data/lib/axlsx/util/mime_type_utils.rb +24 -11
  81. data/lib/axlsx/util/options_parser.rb +15 -16
  82. data/lib/axlsx/util/serialized_attributes.rb +88 -89
  83. data/lib/axlsx/util/simple_typed_list.rb +180 -179
  84. data/lib/axlsx/util/storage.rb +142 -146
  85. data/lib/axlsx/util/validators.rb +315 -312
  86. data/lib/axlsx/util/zip_command.rb +71 -73
  87. data/lib/axlsx/version.rb +4 -5
  88. data/lib/axlsx/workbook/defined_name.rb +129 -128
  89. data/lib/axlsx/workbook/defined_names.rb +20 -21
  90. data/lib/axlsx/workbook/shared_strings_table.rb +74 -77
  91. data/lib/axlsx/workbook/workbook.rb +430 -395
  92. data/lib/axlsx/workbook/workbook_view.rb +75 -80
  93. data/lib/axlsx/workbook/workbook_views.rb +20 -22
  94. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +78 -77
  95. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -94
  96. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +243 -244
  97. data/lib/axlsx/workbook/worksheet/border_creator.rb +79 -0
  98. data/lib/axlsx/workbook/worksheet/break.rb +32 -35
  99. data/lib/axlsx/workbook/worksheet/cell.rb +552 -506
  100. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +164 -164
  101. data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -60
  102. data/lib/axlsx/workbook/worksheet/cfvos.rb +16 -18
  103. data/lib/axlsx/workbook/worksheet/col.rb +142 -145
  104. data/lib/axlsx/workbook/worksheet/col_breaks.rb +34 -35
  105. data/lib/axlsx/workbook/worksheet/color_scale.rb +108 -110
  106. data/lib/axlsx/workbook/worksheet/cols.rb +23 -23
  107. data/lib/axlsx/workbook/worksheet/comment.rb +90 -91
  108. data/lib/axlsx/workbook/worksheet/comments.rb +78 -82
  109. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +81 -82
  110. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +216 -220
  111. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +23 -25
  112. data/lib/axlsx/workbook/worksheet/data_bar.rb +127 -129
  113. data/lib/axlsx/workbook/worksheet/data_validation.rb +266 -246
  114. data/lib/axlsx/workbook/worksheet/data_validations.rb +25 -28
  115. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +28 -30
  116. data/lib/axlsx/workbook/worksheet/dimension.rb +65 -64
  117. data/lib/axlsx/workbook/worksheet/header_footer.rb +51 -52
  118. data/lib/axlsx/workbook/worksheet/icon_set.rb +80 -81
  119. data/lib/axlsx/workbook/worksheet/merged_cells.rb +37 -37
  120. data/lib/axlsx/workbook/worksheet/outline_pr.rb +32 -33
  121. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -97
  122. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +42 -44
  123. data/lib/axlsx/workbook/worksheet/page_setup.rb +237 -240
  124. data/lib/axlsx/workbook/worksheet/pane.rb +138 -139
  125. data/lib/axlsx/workbook/worksheet/pivot_table.rb +332 -296
  126. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +63 -66
  127. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +23 -24
  128. data/lib/axlsx/workbook/worksheet/print_options.rb +38 -39
  129. data/lib/axlsx/workbook/worksheet/protected_range.rb +46 -47
  130. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +37 -37
  131. data/lib/axlsx/workbook/worksheet/rich_text.rb +53 -55
  132. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +266 -250
  133. data/lib/axlsx/workbook/worksheet/row.rb +173 -164
  134. data/lib/axlsx/workbook/worksheet/row_breaks.rb +32 -33
  135. data/lib/axlsx/workbook/worksheet/selection.rb +99 -101
  136. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +28 -29
  137. data/lib/axlsx/workbook/worksheet/sheet_data.rb +25 -27
  138. data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +18 -18
  139. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +87 -87
  140. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +117 -118
  141. data/lib/axlsx/workbook/worksheet/sheet_view.rb +206 -213
  142. data/lib/axlsx/workbook/worksheet/table.rb +100 -102
  143. data/lib/axlsx/workbook/worksheet/table_style_info.rb +48 -49
  144. data/lib/axlsx/workbook/worksheet/tables.rb +34 -34
  145. data/lib/axlsx/workbook/worksheet/worksheet.rb +857 -786
  146. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -58
  147. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +59 -58
  148. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +73 -74
  149. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -38
  150. data/lib/axlsx.rb +218 -185
  151. data/lib/caxlsx.rb +1 -2
  152. data/lib/schema/dc.xsd +118 -118
  153. data/lib/schema/dcmitype.xsd +51 -51
  154. data/lib/schema/dcterms.xsd +331 -331
  155. data/lib/schema/dml-chartDrawing.xsd +146 -146
  156. data/lib/schema/dml-compatibility.xsd +14 -14
  157. data/lib/schema/dml-lockedCanvas.xsd +11 -11
  158. data/lib/schema/dml-main.xsd +3048 -3048
  159. data/lib/schema/dml-picture.xsd +23 -23
  160. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -185
  161. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -185
  162. data/lib/schema/shared-additionalCharacteristics.xsd +28 -28
  163. data/lib/schema/shared-bibliography.xsd +144 -144
  164. data/lib/schema/shared-commonSimpleTypes.xsd +166 -166
  165. data/lib/schema/shared-customXmlDataProperties.xsd +25 -25
  166. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -18
  167. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -59
  168. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -56
  169. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -195
  170. data/lib/schema/shared-relationshipReference.xsd +25 -25
  171. data/lib/schema/vml-main.xsd +569 -569
  172. data/lib/schema/vml-officeDrawing.xsd +509 -509
  173. data/lib/schema/vml-presentationDrawing.xsd +12 -12
  174. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -108
  175. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -96
  176. data/lib/schema/xml.xsd +116 -116
  177. metadata +5 -252
  178. data/test/benchmark.rb +0 -72
  179. data/test/content_type/tc_content_type.rb +0 -76
  180. data/test/content_type/tc_default.rb +0 -16
  181. data/test/content_type/tc_override.rb +0 -14
  182. data/test/doc_props/tc_app.rb +0 -43
  183. data/test/doc_props/tc_core.rb +0 -42
  184. data/test/drawing/tc_area_chart.rb +0 -39
  185. data/test/drawing/tc_area_series.rb +0 -71
  186. data/test/drawing/tc_axes.rb +0 -8
  187. data/test/drawing/tc_axis.rb +0 -112
  188. data/test/drawing/tc_bar_3D_chart.rb +0 -86
  189. data/test/drawing/tc_bar_chart.rb +0 -86
  190. data/test/drawing/tc_bar_series.rb +0 -46
  191. data/test/drawing/tc_bubble_chart.rb +0 -44
  192. data/test/drawing/tc_bubble_series.rb +0 -21
  193. data/test/drawing/tc_cat_axis.rb +0 -31
  194. data/test/drawing/tc_cat_axis_data.rb +0 -27
  195. data/test/drawing/tc_chart.rb +0 -123
  196. data/test/drawing/tc_d_lbls.rb +0 -57
  197. data/test/drawing/tc_data_source.rb +0 -23
  198. data/test/drawing/tc_drawing.rb +0 -80
  199. data/test/drawing/tc_graphic_frame.rb +0 -27
  200. data/test/drawing/tc_hyperlink.rb +0 -64
  201. data/test/drawing/tc_line_3d_chart.rb +0 -47
  202. data/test/drawing/tc_line_chart.rb +0 -39
  203. data/test/drawing/tc_line_series.rb +0 -71
  204. data/test/drawing/tc_marker.rb +0 -44
  205. data/test/drawing/tc_named_axis_data.rb +0 -27
  206. data/test/drawing/tc_num_data.rb +0 -31
  207. data/test/drawing/tc_num_val.rb +0 -29
  208. data/test/drawing/tc_one_cell_anchor.rb +0 -66
  209. data/test/drawing/tc_pic.rb +0 -103
  210. data/test/drawing/tc_picture_locking.rb +0 -72
  211. data/test/drawing/tc_pie_3D_chart.rb +0 -28
  212. data/test/drawing/tc_pie_series.rb +0 -33
  213. data/test/drawing/tc_scaling.rb +0 -36
  214. data/test/drawing/tc_scatter_chart.rb +0 -48
  215. data/test/drawing/tc_scatter_series.rb +0 -74
  216. data/test/drawing/tc_ser_axis.rb +0 -31
  217. data/test/drawing/tc_series.rb +0 -23
  218. data/test/drawing/tc_series_title.rb +0 -54
  219. data/test/drawing/tc_str_data.rb +0 -18
  220. data/test/drawing/tc_str_val.rb +0 -30
  221. data/test/drawing/tc_title.rb +0 -70
  222. data/test/drawing/tc_two_cell_anchor.rb +0 -36
  223. data/test/drawing/tc_val_axis.rb +0 -24
  224. data/test/drawing/tc_view_3D.rb +0 -54
  225. data/test/drawing/tc_vml_drawing.rb +0 -25
  226. data/test/drawing/tc_vml_shape.rb +0 -106
  227. data/test/fixtures/image1.gif +0 -0
  228. data/test/fixtures/image1.jpeg +0 -0
  229. data/test/fixtures/image1.jpg +0 -0
  230. data/test/fixtures/image1.png +0 -0
  231. data/test/fixtures/image1_fake.jpg +0 -0
  232. data/test/profile.rb +0 -24
  233. data/test/rels/tc_relationship.rb +0 -52
  234. data/test/rels/tc_relationships.rb +0 -37
  235. data/test/stylesheet/tc_border.rb +0 -37
  236. data/test/stylesheet/tc_border_pr.rb +0 -32
  237. data/test/stylesheet/tc_cell_alignment.rb +0 -81
  238. data/test/stylesheet/tc_cell_protection.rb +0 -29
  239. data/test/stylesheet/tc_cell_style.rb +0 -57
  240. data/test/stylesheet/tc_color.rb +0 -43
  241. data/test/stylesheet/tc_dxf.rb +0 -81
  242. data/test/stylesheet/tc_fill.rb +0 -18
  243. data/test/stylesheet/tc_font.rb +0 -133
  244. data/test/stylesheet/tc_gradient_fill.rb +0 -72
  245. data/test/stylesheet/tc_gradient_stop.rb +0 -31
  246. data/test/stylesheet/tc_num_fmt.rb +0 -30
  247. data/test/stylesheet/tc_pattern_fill.rb +0 -43
  248. data/test/stylesheet/tc_styles.rb +0 -309
  249. data/test/stylesheet/tc_table_style.rb +0 -44
  250. data/test/stylesheet/tc_table_style_element.rb +0 -45
  251. data/test/stylesheet/tc_table_styles.rb +0 -29
  252. data/test/stylesheet/tc_xf.rb +0 -120
  253. data/test/tc_axlsx.rb +0 -109
  254. data/test/tc_helper.rb +0 -10
  255. data/test/tc_package.rb +0 -317
  256. data/test/util/tc_mime_type_utils.rb +0 -13
  257. data/test/util/tc_serialized_attributes.rb +0 -19
  258. data/test/util/tc_simple_typed_list.rb +0 -77
  259. data/test/util/tc_validators.rb +0 -210
  260. data/test/workbook/tc_defined_name.rb +0 -49
  261. data/test/workbook/tc_shared_strings_table.rb +0 -59
  262. data/test/workbook/tc_workbook.rb +0 -165
  263. data/test/workbook/tc_workbook_view.rb +0 -50
  264. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +0 -38
  265. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +0 -76
  266. data/test/workbook/worksheet/auto_filter/tc_filters.rb +0 -50
  267. data/test/workbook/worksheet/tc_break.rb +0 -49
  268. data/test/workbook/worksheet/tc_cell.rb +0 -465
  269. data/test/workbook/worksheet/tc_cfvo.rb +0 -31
  270. data/test/workbook/worksheet/tc_col.rb +0 -93
  271. data/test/workbook/worksheet/tc_color_scale.rb +0 -58
  272. data/test/workbook/worksheet/tc_comment.rb +0 -72
  273. data/test/workbook/worksheet/tc_comments.rb +0 -57
  274. data/test/workbook/worksheet/tc_conditional_formatting.rb +0 -224
  275. data/test/workbook/worksheet/tc_data_bar.rb +0 -46
  276. data/test/workbook/worksheet/tc_data_validation.rb +0 -265
  277. data/test/workbook/worksheet/tc_date_time_converter.rb +0 -124
  278. data/test/workbook/worksheet/tc_header_footer.rb +0 -151
  279. data/test/workbook/worksheet/tc_icon_set.rb +0 -45
  280. data/test/workbook/worksheet/tc_outline_pr.rb +0 -19
  281. data/test/workbook/worksheet/tc_page_margins.rb +0 -97
  282. data/test/workbook/worksheet/tc_page_set_up_pr.rb +0 -15
  283. data/test/workbook/worksheet/tc_page_setup.rb +0 -143
  284. data/test/workbook/worksheet/tc_pane.rb +0 -54
  285. data/test/workbook/worksheet/tc_pivot_table.rb +0 -180
  286. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +0 -62
  287. data/test/workbook/worksheet/tc_print_options.rb +0 -72
  288. data/test/workbook/worksheet/tc_protected_range.rb +0 -17
  289. data/test/workbook/worksheet/tc_rich_text.rb +0 -44
  290. data/test/workbook/worksheet/tc_rich_text_run.rb +0 -173
  291. data/test/workbook/worksheet/tc_row.rb +0 -160
  292. data/test/workbook/worksheet/tc_selection.rb +0 -55
  293. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +0 -18
  294. data/test/workbook/worksheet/tc_sheet_format_pr.rb +0 -88
  295. data/test/workbook/worksheet/tc_sheet_pr.rb +0 -49
  296. data/test/workbook/worksheet/tc_sheet_protection.rb +0 -117
  297. data/test/workbook/worksheet/tc_sheet_view.rb +0 -214
  298. data/test/workbook/worksheet/tc_table.rb +0 -77
  299. data/test/workbook/worksheet/tc_table_style_info.rb +0 -53
  300. data/test/workbook/worksheet/tc_worksheet.rb +0 -632
  301. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +0 -55
@@ -1,29 +1,28 @@
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
1
+ module Axlsx
2
+ # the SheetCalcPr object for the worksheet
3
+ # This object contains calculation properties for the worksheet.
4
+ class SheetCalcPr
5
+ include Axlsx::OptionsParser
6
+ include Axlsx::SerializedAttributes
7
+ include Axlsx::Accessors
8
+ # creates a new SheetCalcPr
9
+ # @param [Hash] options Options for this object
10
+ # @option [Boolean] full_calc_on_load @see full_calc_on_load
11
+ def initialize(options = {})
12
+ @full_calc_on_load = true
13
+ parse_options options
14
+ end
15
+
16
+ boolean_attr_accessor :full_calc_on_load
17
+
18
+ serializable_attributes :full_calc_on_load
19
+
20
+ # Serialize the object
21
+ # @param [String] str the string to append this objects serialized
22
+ # content to.
23
+ # @return [String]
24
+ def to_xml_string(str = '')
25
+ str << "<sheetCalcPr #{serialized_attributes}/>"
26
+ end
27
+ end
28
+ end
@@ -1,27 +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 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
+ # This class manages the serialization of rows for worksheets
3
+ class SheetData
4
+ # Creates a new SheetData object
5
+ # @param [Worksheet] worksheet The worksheet that owns this sheet data.
6
+ def initialize(worksheet)
7
+ raise ArgumentError, "you must provide a worksheet" unless worksheet.is_a?(Worksheet)
8
+
9
+ @worksheet = worksheet
10
+ end
11
+
12
+ attr_reader :worksheet
13
+
14
+ # Serialize the sheet data
15
+ # @param [String] str the string this objects serializaton will be concacted to.
16
+ # @return [String]
17
+ def to_xml_string(str = '')
18
+ str << '<sheetData>'
19
+ worksheet.rows.each_with_index do |row, index|
20
+ row.to_xml_string(index, str)
21
+ end
22
+ str << '</sheetData>'
23
+ end
24
+ end
25
+ end
@@ -1,17 +1,16 @@
1
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>
2
+ # Sheet formatting properties
3
+ # <xsd:complexType name="CT_SheetFormatPr">
4
+ # <xsd:attribute name="baseColWidth" type="xsd:unsignedInt" use="optional" default="8"/>
5
+ # <xsd:attribute name="defaultColWidth" type="xsd:double" use="optional"/>
6
+ # <xsd:attribute name="defaultRowHeight" type="xsd:double" use="required"/>
7
+ # <xsd:attribute name="customHeight" type="xsd:boolean" use="optional" default="false"/>
8
+ # <xsd:attribute name="zeroHeight" type="xsd:boolean" use="optional" default="false"/>
9
+ # <xsd:attribute name="thickTop" type="xsd:boolean" use="optional" default="false"/>
10
+ # <xsd:attribute name="thickBottom" type="xsd:boolean" use="optional" default="false"/>
11
+ # <xsd:attribute name="outlineLevelRow" type="xsd:unsignedByte" use="optional" default="0"/>
12
+ # <xsd:attribute name="outlineLevelCol" type="xsd:unsignedByte" use="optional" default="0"/>
13
+ # </xsd:complexType>
15
14
 
16
15
  class SheetFormatPr
17
16
  include Axlsx::SerializedAttributes
@@ -29,29 +28,30 @@ module Axlsx
29
28
  # @option [Boolean] thick_bottom 'True' if rows have a thick bottom border by default.
30
29
  # @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
30
  # @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={})
31
+ def initialize(options = {})
33
32
  set_defaults
34
33
  parse_options options
35
34
  end
36
35
 
37
36
  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
37
+ :custom_height, :zero_height, :thick_top, :thick_bottom,
38
+ :outline_level_row, :outline_level_col
40
39
 
41
40
  float_attr_accessor :default_col_width, :default_row_height
42
41
 
43
42
  boolean_attr_accessor :custom_height, :zero_height, :thick_top, :thick_bottom
44
43
 
45
- unsigned_int_attr_accessor :base_col_width, :outline_level_row, :outline_level_col
44
+ unsigned_int_attr_accessor :base_col_width, :outline_level_row, :outline_level_col
46
45
 
47
46
  # serializes this object to an xml string
48
47
  # @param [String] str The string this objects serialization will be appended to
49
48
  # @return [String]
50
- def to_xml_string(str='')
49
+ def to_xml_string(str = '')
51
50
  str << "<sheetFormatPr #{serialized_attributes}/>"
52
51
  end
53
52
 
54
53
  private
54
+
55
55
  def set_defaults
56
56
  @base_col_width = 8
57
57
  @default_row_height = 18
@@ -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
+ # The SheetPr class manages serialization of a worksheet's sheetPr element.
3
+ class SheetPr
4
+ include Axlsx::OptionsParser
5
+ include Axlsx::Accessors
6
+ include Axlsx::SerializedAttributes
7
+
8
+ serializable_attributes :sync_horizontal,
9
+ :sync_vertical,
10
+ :transition_evaluation,
11
+ :transition_entry,
12
+ :published,
13
+ :filter_mode,
14
+ :enable_format_conditions_calculation,
15
+ :code_name,
16
+ :sync_ref
17
+
18
+ # These attributes are all boolean so I'm doing a bit of a hand
19
+ # waving magic show to set up the attriubte accessors
20
+ boolean_attr_accessor :sync_horizontal,
21
+ :sync_vertical,
22
+ :transition_evaluation,
23
+ :transition_entry,
24
+ :published,
25
+ :filter_mode,
26
+ :enable_format_conditions_calculation
27
+
28
+ string_attr_accessor :code_name, :sync_ref
29
+
30
+ # Creates a new SheetPr object
31
+ # @param [Worksheet] worksheet The worksheet that owns this SheetPr object
32
+ def initialize(worksheet, options = {})
33
+ raise ArgumentError, "you must provide a worksheet" unless worksheet.is_a?(Worksheet)
34
+
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,117 @@
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
+ module Axlsx
2
+ # The SheetProtection object manages worksheet protection options per sheet.
3
+ class SheetProtection
4
+ include Axlsx::OptionsParser
5
+ include Axlsx::SerializedAttributes
6
+ include Axlsx::Accessors
7
+
8
+ # Creates a new SheetProtection instance
9
+ # @option options [Boolean] sheet @see SheetProtection#sheet
10
+ # @option options [Boolean] objects @see SheetProtection#objects
11
+ # @option options [Boolean] scenarios @see SheetProtection#scenarios
12
+ # @option options [Boolean] format_cells @see SheetProtection#objects
13
+ # @option options [Boolean] format_columns @see SheetProtection#format_columns
14
+ # @option options [Boolean] format_rows @see SheetProtection#format_rows
15
+ # @option options [Boolean] insert_columns @see SheetProtection#insert_columns
16
+ # @option options [Boolean] insert_rows @see SheetProtection#insert_rows
17
+ # @option options [Boolean] insert_hyperlinks @see SheetProtection#insert_hyperlinks
18
+ # @option options [Boolean] delete_columns @see SheetProtection#delete_columns
19
+ # @option options [Boolean] delete_rows @see SheetProtection#delete_rows
20
+ # @option options [Boolean] select_locked_cells @see SheetProtection#select_locked_cells
21
+ # @option options [Boolean] sort @see SheetProtection#sort
22
+ # @option options [Boolean] auto_filter @see SheetProtection#auto_filter
23
+ # @option options [Boolean] pivot_tables @see SheetProtection#pivot_tables
24
+ # @option options [Boolean] select_unlocked_cells @see SheetProtection#select_unlocked_cells
25
+ # @option options [String] password. The password required for unlocking. @see SheetProtection#password=
26
+ def initialize(options = {})
27
+ @objects = @scenarios = @select_locked_cells = @select_unlocked_cells = false
28
+ @sheet = @format_cells = @format_rows = @format_columns = @insert_columns = @insert_rows = @insert_hyperlinks = @delete_columns = @delete_rows = @sort = @auto_filter = @pivot_tables = true
29
+ @password = nil
30
+ parse_options options
31
+ end
32
+
33
+ boolean_attr_accessor :sheet, :objects, :scenarios, :format_cells, :format_columns, :format_rows,
34
+ :insert_columns, :insert_rows, :insert_hyperlinks, :delete_columns, :delete_rows,
35
+ :select_locked_cells, :sort, :auto_filter, :pivot_tables, :select_unlocked_cells
36
+
37
+ serializable_attributes :sheet, :objects, :scenarios, :format_cells, :format_columns, :format_rows,
38
+ :insert_columns, :insert_rows, :insert_hyperlinks, :delete_columns, :delete_rows,
39
+ :select_locked_cells, :sort, :auto_filter, :pivot_tables, :select_unlocked_cells, :salt, :password
40
+
41
+ # Specifies the salt which was prepended to the user-supplied password before it was hashed using the hashing algorithm
42
+ # @return [String]
43
+ attr_reader :salt_value
44
+
45
+ # Password hash
46
+ # @return [String]
47
+ # default nil
48
+ attr_reader :password
49
+
50
+ # This block is intended to implement the salt_value, hash_value and spin count as per the ECMA-376 standard.
51
+ # However, it does not seem to actually work in EXCEL - instead they are using their old retro algorithm shown below
52
+ # defined in the transitional portion of the speck. I am leaving this code in in the hope that someday Ill be able to
53
+ # figure out why it does not work, and if Excel even supports it.
54
+ # def propper_password=(v)
55
+ # @algorithm_name = v == nil ? nil : 'SHA-1'
56
+ # @salt_value = @spin_count = @hash_value = v if v == nil
57
+ # return if v == nil
58
+ # require 'digest/sha1'
59
+ # @spin_count = 10000
60
+ # @salt_value = Digest::SHA1.hexdigest(rand(36**8).to_s(36))
61
+ # @spin_count.times do |count|
62
+ # @hash_value = Digest::SHA1.hexdigest((@hash_value ||= (@salt_value + v.to_s)) + Array(count).pack('V'))
63
+ # end
64
+ # end
65
+
66
+ # encodes password for protection locking
67
+ def password=(v)
68
+ return if v == nil
69
+
70
+ @password = create_password_hash(v)
71
+ end
72
+
73
+ # Serialize the object
74
+ # @param [String] str
75
+ # @return [String]
76
+ def to_xml_string(str = '')
77
+ serialized_tag('sheetProtection', str)
78
+ end
79
+
80
+ private
81
+
82
+ # Creates a password hash for a given password
83
+ # @return [String]
84
+ def create_password_hash(password)
85
+ encoded_password = encode_password(password)
86
+
87
+ password_as_hex = [encoded_password].pack("v")
88
+ password_as_string = password_as_hex.unpack("H*").first.upcase
89
+
90
+ password_as_string[2..3] + password_as_string[0..1]
91
+ end
92
+
93
+ # Encodes a given password
94
+ # Based on the algorithm provided by Daniel Rentz of OpenOffice.
95
+ # http://www.openoffice.org/sc/excelfileformat.pdf, Revision 1.42, page 115 (21.05.2012)
96
+ # @return [String]
97
+ def encode_password(password)
98
+ i = 0
99
+ chars = password.split(//)
100
+ count = chars.size
101
+
102
+ chars.collect! do |char|
103
+ i += 1
104
+ char = char.unpack('c')[0] << i # ord << i
105
+ low_15 = char & 0x7fff
106
+ high_15 = char & 0x7fff << 15
107
+ high_15 = high_15 >> 15
108
+ char = low_15 | high_15
109
+ end
110
+
111
+ encoded_password = 0x0000
112
+ chars.each { |c| encoded_password ^= c }
113
+ encoded_password ^= count
114
+ encoded_password ^= 0xCE4B
115
+ end
116
+ end
117
+ end