caxlsx 3.2.0 → 3.3.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 (300) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +9 -9
  3. data/.yardopts_guide +18 -18
  4. data/CHANGELOG.md +385 -354
  5. data/LICENSE +21 -21
  6. data/README.md +165 -168
  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 +299 -276
  27. data/lib/axlsx/drawing/d_lbls.rb +91 -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 -129
  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 +107 -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 +398 -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 -73
  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 +535 -494
  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 +416 -410
  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 +425 -395
  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/border_creator.rb +76 -0
  98. data/lib/axlsx/workbook/worksheet/break.rb +35 -35
  99. data/lib/axlsx/workbook/worksheet/cell.rb +532 -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 +18 -18
  103. data/lib/axlsx/workbook/worksheet/col.rb +145 -145
  104. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -35
  105. data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -110
  106. data/lib/axlsx/workbook/worksheet/cols.rb +23 -23
  107. data/lib/axlsx/workbook/worksheet/comment.rb +91 -91
  108. data/lib/axlsx/workbook/worksheet/comments.rb +82 -82
  109. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -82
  110. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -220
  111. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -25
  112. data/lib/axlsx/workbook/worksheet/data_bar.rb +129 -129
  113. data/lib/axlsx/workbook/worksheet/data_validation.rb +267 -246
  114. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -28
  115. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -30
  116. data/lib/axlsx/workbook/worksheet/dimension.rb +64 -64
  117. data/lib/axlsx/workbook/worksheet/header_footer.rb +52 -52
  118. data/lib/axlsx/workbook/worksheet/icon_set.rb +81 -81
  119. data/lib/axlsx/workbook/worksheet/merged_cells.rb +37 -37
  120. data/lib/axlsx/workbook/worksheet/outline_pr.rb +33 -33
  121. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -97
  122. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -44
  123. data/lib/axlsx/workbook/worksheet/page_setup.rb +240 -240
  124. data/lib/axlsx/workbook/worksheet/pane.rb +139 -139
  125. data/lib/axlsx/workbook/worksheet/pivot_table.rb +335 -296
  126. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -66
  127. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -24
  128. data/lib/axlsx/workbook/worksheet/print_options.rb +39 -39
  129. data/lib/axlsx/workbook/worksheet/protected_range.rb +47 -47
  130. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +37 -37
  131. data/lib/axlsx/workbook/worksheet/rich_text.rb +55 -55
  132. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +250 -250
  133. data/lib/axlsx/workbook/worksheet/row.rb +164 -164
  134. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -33
  135. data/lib/axlsx/workbook/worksheet/selection.rb +101 -101
  136. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -29
  137. data/lib/axlsx/workbook/worksheet/sheet_data.rb +27 -27
  138. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +87 -87
  139. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +118 -118
  140. data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -213
  141. data/lib/axlsx/workbook/worksheet/table.rb +102 -102
  142. data/lib/axlsx/workbook/worksheet/table_style_info.rb +49 -49
  143. data/lib/axlsx/workbook/worksheet/tables.rb +34 -34
  144. data/lib/axlsx/workbook/worksheet/worksheet.rb +829 -786
  145. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -58
  146. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -58
  147. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -74
  148. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -38
  149. data/lib/axlsx.rb +204 -185
  150. data/lib/caxlsx.rb +2 -2
  151. data/lib/schema/dc.xsd +118 -118
  152. data/lib/schema/dcmitype.xsd +51 -51
  153. data/lib/schema/dcterms.xsd +331 -331
  154. data/lib/schema/dml-chartDrawing.xsd +146 -146
  155. data/lib/schema/dml-compatibility.xsd +14 -14
  156. data/lib/schema/dml-lockedCanvas.xsd +11 -11
  157. data/lib/schema/dml-main.xsd +3048 -3048
  158. data/lib/schema/dml-picture.xsd +23 -23
  159. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -185
  160. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -185
  161. data/lib/schema/shared-additionalCharacteristics.xsd +28 -28
  162. data/lib/schema/shared-bibliography.xsd +144 -144
  163. data/lib/schema/shared-commonSimpleTypes.xsd +166 -166
  164. data/lib/schema/shared-customXmlDataProperties.xsd +25 -25
  165. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -18
  166. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -59
  167. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -56
  168. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -195
  169. data/lib/schema/shared-relationshipReference.xsd +25 -25
  170. data/lib/schema/vml-main.xsd +569 -569
  171. data/lib/schema/vml-officeDrawing.xsd +509 -509
  172. data/lib/schema/vml-presentationDrawing.xsd +12 -12
  173. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -108
  174. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -96
  175. data/lib/schema/xml.xsd +116 -116
  176. metadata +5 -252
  177. data/test/benchmark.rb +0 -72
  178. data/test/content_type/tc_content_type.rb +0 -76
  179. data/test/content_type/tc_default.rb +0 -16
  180. data/test/content_type/tc_override.rb +0 -14
  181. data/test/doc_props/tc_app.rb +0 -43
  182. data/test/doc_props/tc_core.rb +0 -42
  183. data/test/drawing/tc_area_chart.rb +0 -39
  184. data/test/drawing/tc_area_series.rb +0 -71
  185. data/test/drawing/tc_axes.rb +0 -8
  186. data/test/drawing/tc_axis.rb +0 -112
  187. data/test/drawing/tc_bar_3D_chart.rb +0 -86
  188. data/test/drawing/tc_bar_chart.rb +0 -86
  189. data/test/drawing/tc_bar_series.rb +0 -46
  190. data/test/drawing/tc_bubble_chart.rb +0 -44
  191. data/test/drawing/tc_bubble_series.rb +0 -21
  192. data/test/drawing/tc_cat_axis.rb +0 -31
  193. data/test/drawing/tc_cat_axis_data.rb +0 -27
  194. data/test/drawing/tc_chart.rb +0 -123
  195. data/test/drawing/tc_d_lbls.rb +0 -57
  196. data/test/drawing/tc_data_source.rb +0 -23
  197. data/test/drawing/tc_drawing.rb +0 -80
  198. data/test/drawing/tc_graphic_frame.rb +0 -27
  199. data/test/drawing/tc_hyperlink.rb +0 -64
  200. data/test/drawing/tc_line_3d_chart.rb +0 -47
  201. data/test/drawing/tc_line_chart.rb +0 -39
  202. data/test/drawing/tc_line_series.rb +0 -71
  203. data/test/drawing/tc_marker.rb +0 -44
  204. data/test/drawing/tc_named_axis_data.rb +0 -27
  205. data/test/drawing/tc_num_data.rb +0 -31
  206. data/test/drawing/tc_num_val.rb +0 -29
  207. data/test/drawing/tc_one_cell_anchor.rb +0 -66
  208. data/test/drawing/tc_pic.rb +0 -103
  209. data/test/drawing/tc_picture_locking.rb +0 -72
  210. data/test/drawing/tc_pie_3D_chart.rb +0 -28
  211. data/test/drawing/tc_pie_series.rb +0 -33
  212. data/test/drawing/tc_scaling.rb +0 -36
  213. data/test/drawing/tc_scatter_chart.rb +0 -48
  214. data/test/drawing/tc_scatter_series.rb +0 -74
  215. data/test/drawing/tc_ser_axis.rb +0 -31
  216. data/test/drawing/tc_series.rb +0 -23
  217. data/test/drawing/tc_series_title.rb +0 -54
  218. data/test/drawing/tc_str_data.rb +0 -18
  219. data/test/drawing/tc_str_val.rb +0 -30
  220. data/test/drawing/tc_title.rb +0 -70
  221. data/test/drawing/tc_two_cell_anchor.rb +0 -36
  222. data/test/drawing/tc_val_axis.rb +0 -24
  223. data/test/drawing/tc_view_3D.rb +0 -54
  224. data/test/drawing/tc_vml_drawing.rb +0 -25
  225. data/test/drawing/tc_vml_shape.rb +0 -106
  226. data/test/fixtures/image1.gif +0 -0
  227. data/test/fixtures/image1.jpeg +0 -0
  228. data/test/fixtures/image1.jpg +0 -0
  229. data/test/fixtures/image1.png +0 -0
  230. data/test/fixtures/image1_fake.jpg +0 -0
  231. data/test/profile.rb +0 -24
  232. data/test/rels/tc_relationship.rb +0 -52
  233. data/test/rels/tc_relationships.rb +0 -37
  234. data/test/stylesheet/tc_border.rb +0 -37
  235. data/test/stylesheet/tc_border_pr.rb +0 -32
  236. data/test/stylesheet/tc_cell_alignment.rb +0 -81
  237. data/test/stylesheet/tc_cell_protection.rb +0 -29
  238. data/test/stylesheet/tc_cell_style.rb +0 -57
  239. data/test/stylesheet/tc_color.rb +0 -43
  240. data/test/stylesheet/tc_dxf.rb +0 -81
  241. data/test/stylesheet/tc_fill.rb +0 -18
  242. data/test/stylesheet/tc_font.rb +0 -133
  243. data/test/stylesheet/tc_gradient_fill.rb +0 -72
  244. data/test/stylesheet/tc_gradient_stop.rb +0 -31
  245. data/test/stylesheet/tc_num_fmt.rb +0 -30
  246. data/test/stylesheet/tc_pattern_fill.rb +0 -43
  247. data/test/stylesheet/tc_styles.rb +0 -309
  248. data/test/stylesheet/tc_table_style.rb +0 -44
  249. data/test/stylesheet/tc_table_style_element.rb +0 -45
  250. data/test/stylesheet/tc_table_styles.rb +0 -29
  251. data/test/stylesheet/tc_xf.rb +0 -120
  252. data/test/tc_axlsx.rb +0 -109
  253. data/test/tc_helper.rb +0 -10
  254. data/test/tc_package.rb +0 -317
  255. data/test/util/tc_mime_type_utils.rb +0 -13
  256. data/test/util/tc_serialized_attributes.rb +0 -19
  257. data/test/util/tc_simple_typed_list.rb +0 -77
  258. data/test/util/tc_validators.rb +0 -210
  259. data/test/workbook/tc_defined_name.rb +0 -49
  260. data/test/workbook/tc_shared_strings_table.rb +0 -59
  261. data/test/workbook/tc_workbook.rb +0 -165
  262. data/test/workbook/tc_workbook_view.rb +0 -50
  263. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +0 -38
  264. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +0 -76
  265. data/test/workbook/worksheet/auto_filter/tc_filters.rb +0 -50
  266. data/test/workbook/worksheet/tc_break.rb +0 -49
  267. data/test/workbook/worksheet/tc_cell.rb +0 -465
  268. data/test/workbook/worksheet/tc_cfvo.rb +0 -31
  269. data/test/workbook/worksheet/tc_col.rb +0 -93
  270. data/test/workbook/worksheet/tc_color_scale.rb +0 -58
  271. data/test/workbook/worksheet/tc_comment.rb +0 -72
  272. data/test/workbook/worksheet/tc_comments.rb +0 -57
  273. data/test/workbook/worksheet/tc_conditional_formatting.rb +0 -224
  274. data/test/workbook/worksheet/tc_data_bar.rb +0 -46
  275. data/test/workbook/worksheet/tc_data_validation.rb +0 -265
  276. data/test/workbook/worksheet/tc_date_time_converter.rb +0 -124
  277. data/test/workbook/worksheet/tc_header_footer.rb +0 -151
  278. data/test/workbook/worksheet/tc_icon_set.rb +0 -45
  279. data/test/workbook/worksheet/tc_outline_pr.rb +0 -19
  280. data/test/workbook/worksheet/tc_page_margins.rb +0 -97
  281. data/test/workbook/worksheet/tc_page_set_up_pr.rb +0 -15
  282. data/test/workbook/worksheet/tc_page_setup.rb +0 -143
  283. data/test/workbook/worksheet/tc_pane.rb +0 -54
  284. data/test/workbook/worksheet/tc_pivot_table.rb +0 -180
  285. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +0 -62
  286. data/test/workbook/worksheet/tc_print_options.rb +0 -72
  287. data/test/workbook/worksheet/tc_protected_range.rb +0 -17
  288. data/test/workbook/worksheet/tc_rich_text.rb +0 -44
  289. data/test/workbook/worksheet/tc_rich_text_run.rb +0 -173
  290. data/test/workbook/worksheet/tc_row.rb +0 -160
  291. data/test/workbook/worksheet/tc_selection.rb +0 -55
  292. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +0 -18
  293. data/test/workbook/worksheet/tc_sheet_format_pr.rb +0 -88
  294. data/test/workbook/worksheet/tc_sheet_pr.rb +0 -49
  295. data/test/workbook/worksheet/tc_sheet_protection.rb +0 -117
  296. data/test/workbook/worksheet/tc_sheet_view.rb +0 -214
  297. data/test/workbook/worksheet/tc_table.rb +0 -77
  298. data/test/workbook/worksheet/tc_table_style_info.rb +0 -53
  299. data/test/workbook/worksheet/tc_worksheet.rb +0 -632
  300. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +0 -55
@@ -1,246 +1,267 @@
1
- # encoding: UTF-8
2
- module Axlsx
3
- # Data validation allows the validation of cell data
4
- #
5
- # @note The recommended way to manage data validations is via Worksheet#add_data_validation
6
- # @see Worksheet#add_data_validation
7
- class DataValidation
8
- include Axlsx::OptionsParser
9
-
10
- # Creates a new {DataValidation} object
11
- # @option options [String] formula1
12
- # @option options [String] formula2
13
- # @option options [Boolean] allowBlank - A boolean value indicating whether the data validation allows the use of empty or blank entries.
14
- # @option options [String] error - Message text of error alert.
15
- # @option options [Symbol] errorStyle - The style of error alert used for this data validation.
16
- # @option options [String] errorTitle - itle bar text of error alert.
17
- # @option options [Symbol] operator - The relational operator used with this data validation.
18
- # @option options [String] prompt - Message text of input prompt.
19
- # @option options [String] promptTitle - Title bar text of input prompt.
20
- # @option options [Boolean] showDropDown - A boolean value indicating whether to display a dropdown combo box for a list type data validation
21
- # @option options [Boolean] showErrorMessage - A boolean value indicating whether to display the error alert message when an invalid value has been entered, according to the criteria specified.
22
- # @option options [Boolean] showInputMessage - A boolean value indicating whether to display the input prompt message.
23
- # @option options [String] sqref - Range over which data validation is applied, in "A1:B2" format.
24
- # @option options [Symbol] type - The type of data validation.
25
- def initialize(options={})
26
- # defaults
27
- @formula1 = @formula2 = @error = @errorTitle = @operator = @prompt = @promptTitle = @sqref = nil
28
- @allowBlank = @showErrorMessage = true
29
- @showDropDown = @showInputMessage = false
30
- @type = :none
31
- @errorStyle = :stop
32
- parse_options options
33
- end
34
-
35
- # instance values that must be serialized as their own elements - e.g. not attributes.
36
- CHILD_ELEMENTS = [:formula1, :formula2].freeze
37
-
38
- # Formula1
39
- # Available for type whole, decimal, date, time, textLength, list, custom
40
- # @see type
41
- # @return [String]
42
- # default nil
43
- attr_reader :formula1
44
-
45
- # Formula2
46
- # Available for type whole, decimal, date, time, textLength
47
- # @see type
48
- # @return [String]
49
- # default nil
50
- attr_reader :formula2
51
-
52
- # Allow Blank
53
- # A boolean value indicating whether the data validation allows the use of empty or blank
54
- # entries. 1 means empty entries are OK and do not violate the validation constraints.
55
- # Available for type whole, decimal, date, time, textLength, list, custom
56
- # @see type
57
- # @return [Boolean]
58
- # default true
59
- attr_reader :allowBlank
60
-
61
- # Error Message
62
- # Message text of error alert.
63
- # Available for type whole, decimal, date, time, textLength, list, custom
64
- # @see type
65
- # @return [String]
66
- # default nil
67
- attr_reader :error
68
-
69
- # Error Style (ST_DataValidationErrorStyle)
70
- # The style of error alert used for this data validation.
71
- # Options are:
72
- # * information: This data validation error style uses an information icon in the error alert.
73
- # * stop: This data validation error style uses a stop icon in the error alert.
74
- # * warning: This data validation error style uses a warning icon in the error alert.
75
- # Available for type whole, decimal, date, time, textLength, list, custom
76
- # @see type
77
- # @return [Symbol]
78
- # default :stop
79
- attr_reader :errorStyle
80
-
81
- # Error Title
82
- # Title bar text of error alert.
83
- # Available for type whole, decimal, date, time, textLength, list, custom
84
- # @see type
85
- # @return [String]
86
- # default nil
87
- attr_reader :errorTitle
88
-
89
- # Operator (ST_DataValidationOperator)
90
- # The relational operator used with this data validation.
91
- # Options are:
92
- # * between: Data validation which checks if a value is between two other values.
93
- # * equal: Data validation which checks if a value is equal to a specified value.
94
- # * greater_than: Data validation which checks if a value is greater than a specified value.
95
- # * greater_than_or_equal: Data validation which checks if a value is greater than or equal to a specified value.
96
- # * less_than: Data validation which checks if a value is less than a specified value.
97
- # * less_than_or_equal: Data validation which checks if a value is less than or equal to a specified value.
98
- # * not_between: Data validation which checks if a value is not between two other values.
99
- # * not_equal: Data validation which checks if a value is not equal to a specified value.
100
- # Available for type whole, decimal, date, time, textLength
101
- # @see type
102
- # @return [Symbol]
103
- # default nil
104
- attr_reader :operator
105
-
106
- # Input prompt
107
- # Message text of input prompt.
108
- # Available for type whole, decimal, date, time, textLength, list, custom
109
- # @see type
110
- # @return [String]
111
- # default nil
112
- attr_reader :prompt
113
-
114
- # Prompt title
115
- # Title bar text of input prompt.
116
- # Available for type whole, decimal, date, time, textLength, list, custom
117
- # @see type
118
- # @return [String]
119
- # default nil
120
- attr_reader :promptTitle
121
-
122
- # Show drop down
123
- # A boolean value indicating whether to display a dropdown combo box for a list type data
124
- # validation. Be careful: false shows the dropdown list!
125
- # Available for type list
126
- # @see type
127
- # @return [Boolean]
128
- # default false
129
- attr_reader :showDropDown
130
-
131
- # Show error message
132
- # A boolean value indicating whether to display the error alert message when an invalid
133
- # value has been entered, according to the criteria specified.
134
- # Available for type whole, decimal, date, time, textLength, list, custom
135
- # @see type
136
- # @return [Boolean]
137
- # default false
138
- attr_reader :showErrorMessage
139
-
140
- # Show input message
141
- # A boolean value indicating whether to display the input prompt message.
142
- # Available for type whole, decimal, date, time, textLength, list, custom
143
- # @see type
144
- # @return [Boolean]
145
- # default false
146
- attr_reader :showInputMessage
147
-
148
- # Range over which data validation is applied, in "A1:B2" format
149
- # Available for type whole, decimal, date, time, textLength, list, custom
150
- # @see type
151
- # @return [String]
152
- # default nil
153
- attr_reader :sqref
154
-
155
- # The type (ST_DataValidationType) of data validation.
156
- # Options are:
157
- # * custom: Data validation which uses a custom formula to check the cell value.
158
- # * date: Data validation which checks for date values satisfying the given condition.
159
- # * decimal: Data validation which checks for decimal values satisfying the given condition.
160
- # * list: Data validation which checks for a value matching one of list of values.
161
- # * none: No data validation.
162
- # * textLength: Data validation which checks for text values, whose length satisfies the given condition.
163
- # * time: Data validation which checks for time values satisfying the given condition.
164
- # * whole: Data validation which checks for whole number values satisfying the given condition.
165
- # @return [Symbol]
166
- # default none
167
- attr_reader :type
168
-
169
-
170
- # @see formula1
171
- def formula1=(v); Axlsx::validate_string(v); @formula1 = v end
172
-
173
- # @see formula2
174
- def formula2=(v); Axlsx::validate_string(v); @formula2 = v end
175
-
176
- # @see allowBlank
177
- def allowBlank=(v); Axlsx::validate_boolean(v); @allowBlank = v end
178
-
179
- # @see error
180
- def error=(v); Axlsx::validate_string(v); @error = v end
181
-
182
- # @see errorStyle
183
- def errorStyle=(v); Axlsx::validate_data_validation_error_style(v); @errorStyle = v end
184
-
185
- # @see errorTitle
186
- def errorTitle=(v); Axlsx::validate_string(v); @errorTitle = v end
187
-
188
- # @see operator
189
- def operator=(v); Axlsx::validate_data_validation_operator(v); @operator = v end
190
-
191
- # @see prompt
192
- def prompt=(v); Axlsx::validate_string(v); @prompt = v end
193
-
194
- # @see promptTitle
195
- def promptTitle=(v); Axlsx::validate_string(v); @promptTitle = v end
196
-
197
- # @see showDropDown
198
- def showDropDown=(v); Axlsx::validate_boolean(v); @showDropDown = v end
199
-
200
- # @see showErrorMessage
201
- def showErrorMessage=(v); Axlsx::validate_boolean(v); @showErrorMessage = v end
202
-
203
- # @see showInputMessage
204
- def showInputMessage=(v); Axlsx::validate_boolean(v); @showInputMessage = v end
205
-
206
- # @see sqref
207
- def sqref=(v); Axlsx::validate_string(v); @sqref = v end
208
-
209
- # @see type
210
- def type=(v); Axlsx::validate_data_validation_type(v); @type = v end
211
-
212
- # Serializes the data validation
213
- # @param [String] str
214
- # @return [String]
215
- def to_xml_string(str = '')
216
- valid_attributes = get_valid_attributes
217
-
218
- str << '<dataValidation '
219
- str << instance_values.map do |key, value|
220
- '' << key << '="' << Axlsx.booleanize(value).to_s << '"' if (valid_attributes.include?(key.to_sym) && !CHILD_ELEMENTS.include?(key.to_sym))
221
- end.join(' ')
222
- str << '>'
223
- str << ('<formula1>' << self.formula1 << '</formula1>') if @formula1 and valid_attributes.include?(:formula1)
224
- str << ('<formula2>' << self.formula2 << '</formula2>') if @formula2 and valid_attributes.include?(:formula2)
225
- str << '</dataValidation>'
226
- end
227
-
228
- private
229
- def get_valid_attributes
230
- attributes = [:allowBlank, :error, :errorStyle, :errorTitle, :prompt, :promptTitle, :showErrorMessage, :showInputMessage, :sqref, :type ]
231
-
232
- if [:whole, :decimal, :data, :time, :date, :textLength].include?(@type)
233
- attributes << [:operator, :formula1]
234
- attributes << [:formula2] if [:between, :notBetween].include?(@operator)
235
- elsif @type == :list
236
- attributes << [:showDropDown, :formula1]
237
- elsif @type == :custom
238
- attributes << [:formula1]
239
- else
240
- attributes = []
241
- end
242
-
243
- attributes.flatten!
244
- end
245
- end
246
- end
1
+ # encoding: UTF-8
2
+ module Axlsx
3
+ # Data validation allows the validation of cell data
4
+ #
5
+ # @note The recommended way to manage data validations is via Worksheet#add_data_validation
6
+ # @see Worksheet#add_data_validation
7
+ class DataValidation
8
+ include Axlsx::OptionsParser
9
+
10
+ # Creates a new {DataValidation} object
11
+ # @option options [String] formula1
12
+ # @option options [String] formula2
13
+ # @option options [Boolean] allowBlank - A boolean value indicating whether the data validation allows the use of empty or blank entries.
14
+ # @option options [String] error - Message text of error alert.
15
+ # @option options [Symbol] errorStyle - The style of error alert used for this data validation.
16
+ # @option options [String] errorTitle - Title bar text of error alert.
17
+ # @option options [Symbol] operator - The relational operator used with this data validation.
18
+ # @option options [String] prompt - Message text of input prompt.
19
+ # @option options [String] promptTitle - Title bar text of input prompt.
20
+ # @option options [Boolean] showDropDown - A boolean value indicating whether to display a dropdown combo box for a list type data validation. Be careful: It has an inverted logic, false shows the dropdown list! You should use hideDropDown instead.
21
+ # @option options [Boolean] hideDropDown - A boolean value indicating whether to hide the dropdown combo box for a list type data validation. Defaults to `false` (meaning the dropdown is visible by default).
22
+ # @option options [Boolean] showErrorMessage - A boolean value indicating whether to display the error alert message when an invalid value has been entered, according to the criteria specified.
23
+ # @option options [Boolean] showInputMessage - A boolean value indicating whether to display the input prompt message.
24
+ # @option options [String] sqref - Range over which data validation is applied, in "A1:B2" format.
25
+ # @option options [Symbol] type - The type of data validation.
26
+ def initialize(options={})
27
+ # defaults
28
+ @formula1 = @formula2 = @error = @errorTitle = @operator = @prompt = @promptTitle = @sqref = nil
29
+ @allowBlank = @showErrorMessage = true
30
+ @showDropDown = @showInputMessage = false
31
+ @type = :none
32
+ @errorStyle = :stop
33
+ parse_options options
34
+ end
35
+
36
+ # instance values that must be serialized as their own elements - e.g. not attributes.
37
+ CHILD_ELEMENTS = [:formula1, :formula2].freeze
38
+
39
+ # Formula1
40
+ # Available for type whole, decimal, date, time, textLength, list, custom
41
+ # @see type
42
+ # @return [String]
43
+ # default nil
44
+ attr_reader :formula1
45
+
46
+ # Formula2
47
+ # Available for type whole, decimal, date, time, textLength
48
+ # @see type
49
+ # @return [String]
50
+ # default nil
51
+ attr_reader :formula2
52
+
53
+ # Allow Blank
54
+ # A boolean value indicating whether the data validation allows the use of empty or blank
55
+ # entries. 1 means empty entries are OK and do not violate the validation constraints.
56
+ # Available for type whole, decimal, date, time, textLength, list, custom
57
+ # @see type
58
+ # @return [Boolean]
59
+ # default true
60
+ attr_reader :allowBlank
61
+
62
+ # Error Message
63
+ # Message text of error alert.
64
+ # Available for type whole, decimal, date, time, textLength, list, custom
65
+ # @see type
66
+ # @return [String]
67
+ # default nil
68
+ attr_reader :error
69
+
70
+ # Error Style (ST_DataValidationErrorStyle)
71
+ # The style of error alert used for this data validation.
72
+ # Options are:
73
+ # * information: This data validation error style uses an information icon in the error alert.
74
+ # * stop: This data validation error style uses a stop icon in the error alert.
75
+ # * warning: This data validation error style uses a warning icon in the error alert.
76
+ # Available for type whole, decimal, date, time, textLength, list, custom
77
+ # @see type
78
+ # @return [Symbol]
79
+ # default :stop
80
+ attr_reader :errorStyle
81
+
82
+ # Error Title
83
+ # Title bar text of error alert.
84
+ # Available for type whole, decimal, date, time, textLength, list, custom
85
+ # @see type
86
+ # @return [String]
87
+ # default nil
88
+ attr_reader :errorTitle
89
+
90
+ # Operator (ST_DataValidationOperator)
91
+ # The relational operator used with this data validation.
92
+ # Options are:
93
+ # * between: Data validation which checks if a value is between two other values.
94
+ # * equal: Data validation which checks if a value is equal to a specified value.
95
+ # * greater_than: Data validation which checks if a value is greater than a specified value.
96
+ # * greater_than_or_equal: Data validation which checks if a value is greater than or equal to a specified value.
97
+ # * less_than: Data validation which checks if a value is less than a specified value.
98
+ # * less_than_or_equal: Data validation which checks if a value is less than or equal to a specified value.
99
+ # * not_between: Data validation which checks if a value is not between two other values.
100
+ # * not_equal: Data validation which checks if a value is not equal to a specified value.
101
+ # Available for type whole, decimal, date, time, textLength
102
+ # @see type
103
+ # @return [Symbol]
104
+ # default nil
105
+ attr_reader :operator
106
+
107
+ # Input prompt
108
+ # Message text of input prompt.
109
+ # Available for type whole, decimal, date, time, textLength, list, custom
110
+ # @see type
111
+ # @return [String]
112
+ # default nil
113
+ attr_reader :prompt
114
+
115
+ # Prompt title
116
+ # Title bar text of input prompt.
117
+ # Available for type whole, decimal, date, time, textLength, list, custom
118
+ # @see type
119
+ # @return [String]
120
+ # default nil
121
+ attr_reader :promptTitle
122
+
123
+ # Show drop down
124
+ # A boolean value indicating whether to display a dropdown combo box for a list type data
125
+ # validation. Be careful: It has an inverted logic, false shows the dropdown list!
126
+ # Available for type list
127
+ # @see type
128
+ # @return [Boolean]
129
+ # default false
130
+ attr_reader :showDropDown
131
+
132
+ # Hide drop down
133
+ # A boolean value indicating whether to hide a dropdown combo box for a list type data
134
+ # validation. Defaults to `false` (meaning the dropdown is visible by default).
135
+ # Available for type list
136
+ # @see type
137
+ # @return [Boolean]
138
+ # default false
139
+ alias :hideDropDown :showDropDown
140
+
141
+ # Show error message
142
+ # A boolean value indicating whether to display the error alert message when an invalid
143
+ # value has been entered, according to the criteria specified.
144
+ # Available for type whole, decimal, date, time, textLength, list, custom
145
+ # @see type
146
+ # @return [Boolean]
147
+ # default false
148
+ attr_reader :showErrorMessage
149
+
150
+ # Show input message
151
+ # A boolean value indicating whether to display the input prompt message.
152
+ # Available for type whole, decimal, date, time, textLength, list, custom
153
+ # @see type
154
+ # @return [Boolean]
155
+ # default false
156
+ attr_reader :showInputMessage
157
+
158
+ # Range over which data validation is applied, in "A1:B2" format
159
+ # Available for type whole, decimal, date, time, textLength, list, custom
160
+ # @see type
161
+ # @return [String]
162
+ # default nil
163
+ attr_reader :sqref
164
+
165
+ # The type (ST_DataValidationType) of data validation.
166
+ # Options are:
167
+ # * custom: Data validation which uses a custom formula to check the cell value.
168
+ # * date: Data validation which checks for date values satisfying the given condition.
169
+ # * decimal: Data validation which checks for decimal values satisfying the given condition.
170
+ # * list: Data validation which checks for a value matching one of list of values.
171
+ # * none: No data validation.
172
+ # * textLength: Data validation which checks for text values, whose length satisfies the given condition.
173
+ # * time: Data validation which checks for time values satisfying the given condition.
174
+ # * whole: Data validation which checks for whole number values satisfying the given condition.
175
+ # @return [Symbol]
176
+ # default none
177
+ attr_reader :type
178
+
179
+
180
+ # @see formula1
181
+ def formula1=(v); Axlsx::validate_string(v); @formula1 = v end
182
+
183
+ # @see formula2
184
+ def formula2=(v); Axlsx::validate_string(v); @formula2 = v end
185
+
186
+ # @see allowBlank
187
+ def allowBlank=(v); Axlsx::validate_boolean(v); @allowBlank = v end
188
+
189
+ # @see error
190
+ def error=(v); Axlsx::validate_string(v); @error = v end
191
+
192
+ # @see errorStyle
193
+ def errorStyle=(v); Axlsx::validate_data_validation_error_style(v); @errorStyle = v end
194
+
195
+ # @see errorTitle
196
+ def errorTitle=(v); Axlsx::validate_string(v); @errorTitle = v end
197
+
198
+ # @see operator
199
+ def operator=(v); Axlsx::validate_data_validation_operator(v); @operator = v end
200
+
201
+ # @see prompt
202
+ def prompt=(v); Axlsx::validate_string(v); @prompt = v end
203
+
204
+ # @see promptTitle
205
+ def promptTitle=(v); Axlsx::validate_string(v); @promptTitle = v end
206
+
207
+ # @see showDropDown
208
+ def showDropDown=(v)
209
+ warn 'The `showDropDown` has an inverted logic, false shows the dropdown list! You should use `hideDropDown` instead.'
210
+ Axlsx::validate_boolean(v)
211
+ @showDropDown = v
212
+ end
213
+
214
+ # @see hideDropDown
215
+ def hideDropDown=(v)
216
+ Axlsx::validate_boolean(v)
217
+ # It's just an alias for the showDropDown attribute, hideDropDown should set the value of the original showDropDown.
218
+ @showDropDown = v
219
+ end
220
+
221
+ # @see showErrorMessage
222
+ def showErrorMessage=(v); Axlsx::validate_boolean(v); @showErrorMessage = v end
223
+
224
+ # @see showInputMessage
225
+ def showInputMessage=(v); Axlsx::validate_boolean(v); @showInputMessage = v end
226
+
227
+ # @see sqref
228
+ def sqref=(v); Axlsx::validate_string(v); @sqref = v end
229
+
230
+ # @see type
231
+ def type=(v); Axlsx::validate_data_validation_type(v); @type = v end
232
+
233
+ # Serializes the data validation
234
+ # @param [String] str
235
+ # @return [String]
236
+ def to_xml_string(str = '')
237
+ valid_attributes = get_valid_attributes
238
+
239
+ str << '<dataValidation '
240
+ str << Axlsx.instance_values_for(self).map do |key, value|
241
+ '' << key << '="' << Axlsx.booleanize(value).to_s << '"' if (valid_attributes.include?(key.to_sym) && !CHILD_ELEMENTS.include?(key.to_sym))
242
+ end.join(' ')
243
+ str << '>'
244
+ str << ('<formula1>' << self.formula1 << '</formula1>') if @formula1 and valid_attributes.include?(:formula1)
245
+ str << ('<formula2>' << self.formula2 << '</formula2>') if @formula2 and valid_attributes.include?(:formula2)
246
+ str << '</dataValidation>'
247
+ end
248
+
249
+ private
250
+ def get_valid_attributes
251
+ attributes = [:allowBlank, :error, :errorStyle, :errorTitle, :prompt, :promptTitle, :showErrorMessage, :showInputMessage, :sqref, :type ]
252
+
253
+ if [:whole, :decimal, :data, :time, :date, :textLength].include?(@type)
254
+ attributes << [:operator, :formula1]
255
+ attributes << [:formula2] if [:between, :notBetween].include?(@operator)
256
+ elsif @type == :list
257
+ attributes << [:showDropDown, :formula1]
258
+ elsif @type == :custom
259
+ attributes << [:formula1]
260
+ else
261
+ attributes = []
262
+ end
263
+
264
+ attributes.flatten!
265
+ end
266
+ end
267
+ end
@@ -1,28 +1,28 @@
1
- module Axlsx
2
-
3
- # A simple, self serializing class for storing conditional formattings
4
- class DataValidations < SimpleTypedList
5
-
6
- # creates a new Tables object
7
- def initialize(worksheet)
8
- raise ArgumentError, "you must provide a worksheet" unless worksheet.is_a?(Worksheet)
9
- super DataValidation
10
- @worksheet = worksheet
11
- end
12
-
13
- # The worksheet that owns this collection of tables
14
- # @return [Worksheet]
15
- attr_reader :worksheet
16
-
17
- # serialize the conditional formattings
18
- def to_xml_string(str = "")
19
- return if empty?
20
- str << "<dataValidations count='#{size}'>"
21
- each { |item| item.to_xml_string(str) }
22
- str << '</dataValidations>'
23
- end
24
- end
25
-
26
- end
27
-
28
-
1
+ module Axlsx
2
+
3
+ # A simple, self serializing class for storing conditional formattings
4
+ class DataValidations < SimpleTypedList
5
+
6
+ # creates a new Tables object
7
+ def initialize(worksheet)
8
+ raise ArgumentError, "you must provide a worksheet" unless worksheet.is_a?(Worksheet)
9
+ super DataValidation
10
+ @worksheet = worksheet
11
+ end
12
+
13
+ # The worksheet that owns this collection of tables
14
+ # @return [Worksheet]
15
+ attr_reader :worksheet
16
+
17
+ # serialize the conditional formattings
18
+ def to_xml_string(str = "")
19
+ return if empty?
20
+ str << "<dataValidations count='#{size}'>"
21
+ each { |item| item.to_xml_string(str) }
22
+ str << '</dataValidations>'
23
+ end
24
+ end
25
+
26
+ end
27
+
28
+
@@ -1,30 +1,30 @@
1
- # encoding: UTF-8
2
- require "date"
3
-
4
- module Axlsx
5
- # The DateTimeConverter class converts both data and time types to their apprpriate excel serializations
6
- class DateTimeConverter
7
-
8
- # The date_to_serial method converts Date objects to the equivelant excel serialized forms
9
- # @param [Date] date the date to be serialized
10
- # @return [Numeric]
11
- def self.date_to_serial(date)
12
- epoch = Axlsx::Workbook::date1904 ? Date.new(1904) : Date.new(1899, 12, 30)
13
- offset_date = date.respond_to?(:utc_offset) ? date + date.utc_offset.seconds : date
14
- (offset_date - epoch).to_f
15
- end
16
-
17
- # The time_to_serial methond converts a Time object its excel serialized form.
18
- # @param [Time] time the time to be serialized
19
- # @return [Numeric]
20
- def self.time_to_serial(time)
21
- # Using hardcoded offsets here as some operating systems will not except
22
- # a 'negative' offset from the ruby epoch.
23
- epoch1900 = -2209161600.0 # Time.utc(1899, 12, 30).to_i
24
- epoch1904 = -2082844800.0 # Time.utc(1904, 1, 1).to_i
25
- seconds_per_day = 86400.0 # 60*60*24
26
- epoch = Axlsx::Workbook::date1904 ? epoch1904 : epoch1900
27
- (time.utc_offset + time.to_f - epoch)/seconds_per_day
28
- end
29
- end
30
- end
1
+ # encoding: UTF-8
2
+ require "date"
3
+
4
+ module Axlsx
5
+ # The DateTimeConverter class converts both data and time types to their apprpriate excel serializations
6
+ class DateTimeConverter
7
+
8
+ # The date_to_serial method converts Date objects to the equivelant excel serialized forms
9
+ # @param [Date] date the date to be serialized
10
+ # @return [Numeric]
11
+ def self.date_to_serial(date)
12
+ epoch = Axlsx::Workbook::date1904 ? Date.new(1904) : Date.new(1899, 12, 30)
13
+ offset_date = date.respond_to?(:utc_offset) ? date + date.utc_offset.seconds : date
14
+ (offset_date - epoch).to_f
15
+ end
16
+
17
+ # The time_to_serial methond converts a Time object its excel serialized form.
18
+ # @param [Time] time the time to be serialized
19
+ # @return [Numeric]
20
+ def self.time_to_serial(time)
21
+ # Using hardcoded offsets here as some operating systems will not except
22
+ # a 'negative' offset from the ruby epoch.
23
+ epoch1900 = -2209161600.0 # Time.utc(1899, 12, 30).to_i
24
+ epoch1904 = -2082844800.0 # Time.utc(1904, 1, 1).to_i
25
+ seconds_per_day = 86400.0 # 60*60*24
26
+ epoch = Axlsx::Workbook::date1904 ? epoch1904 : epoch1900
27
+ (time.utc_offset + time.to_f - epoch)/seconds_per_day
28
+ end
29
+ end
30
+ end