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,220 +1,216 @@
1
- # -*- coding: utf-8 -*-
2
- module Axlsx
3
- # Conditional formatting rules specify formulas whose evaluations
4
- # format cells
5
- #
6
- # @note The recommended way to manage these rules is via Worksheet#add_conditional_formatting
7
- # @see Worksheet#add_conditional_formatting
8
- # @see ConditionalFormattingRule#initialize
9
- class ConditionalFormattingRule
10
-
11
- include Axlsx::OptionsParser
12
- include Axlsx::SerializedAttributes
13
-
14
- # Creates a new Conditional Formatting Rule object
15
- # @option options [Symbol] type The type of this formatting rule
16
- # @option options [Boolean] aboveAverage This is an aboveAverage rule
17
- # @option options [Boolean] bottom This is a bottom N rule.
18
- # @option options [Integer] dxfId The formatting id to apply to matches
19
- # @option options [Boolean] equalAverage Is the aboveAverage or belowAverage rule inclusive
20
- # @option options [Integer] priority The priority of the rule, 1 is highest
21
- # @option options [Symbol] operator Which operator to apply
22
- # @option options [String] text The value to apply a text operator against
23
- # @option options [Boolean] percent If a top/bottom N rule, evaluate as N% rather than N
24
- # @option options [Integer] rank If a top/bottom N rule, the value of N
25
- # @option options [Integer] stdDev The number of standard deviations above or below the average to match
26
- # @option options [Boolean] stopIfTrue Stop evaluating rules after this rule matches
27
- # @option options [Symbol] timePeriod The time period in a date occuring... rule
28
- # @option options [String] formula The formula to match against in i.e. an equal rule. Use a [minimum, maximum] array for cellIs between/notBetween conditionals.
29
- def initialize(options={})
30
- @color_scale = @data_bar = @icon_set = @formula = nil
31
- parse_options options
32
- end
33
-
34
- serializable_attributes :type, :aboveAverage, :bottom, :dxfId, :equalAverage,
35
- :priority, :operator, :text, :percent, :rank, :stdDev,
36
- :stopIfTrue, :timePeriod
37
-
38
- # Formula
39
- # The formula or value to match against (e.g. 5 with an operator of :greaterThan to specify cell_value > 5).
40
- # If the operator is :between or :notBetween, use an array to specify [minimum, maximum]
41
- # @return [String]
42
- attr_reader :formula
43
-
44
- # Type (ST_CfType)
45
- # options are expression, cellIs, colorScale, dataBar, iconSet,
46
- # top10, uniqueValues, duplicateValues, containsText,
47
- # notContainsText, beginsWith, endsWith, containsBlanks,
48
- # notContainsBlanks, containsErrors, notContainsErrors,
49
- # timePeriod, aboveAverage
50
- # @return [Symbol]
51
- attr_reader :type
52
-
53
- # Above average rule
54
- # Indicates whether the rule is an "above average" rule. True
55
- # indicates 'above average'. This attribute is ignored if type is
56
- # not equal to aboveAverage.
57
- # @return [Boolean]
58
- attr_reader :aboveAverage
59
-
60
- # Bottom N rule
61
- # @return [Boolean]
62
- attr_reader :bottom
63
-
64
- # Differential Formatting Id
65
- # @return [Integer]
66
- attr_reader :dxfId
67
-
68
- # Equal Average
69
- # Flag indicating whether the 'aboveAverage' and 'belowAverage'
70
- # criteria is inclusive of the average itself, or exclusive of
71
- # that value.
72
- # @return [Boolean]
73
- attr_reader :equalAverage
74
-
75
- # Operator
76
- # The operator in a "cell value is" conditional formatting
77
- # rule. This attribute is ignored if type is not equal to cellIs
78
- #
79
- # Operator must be one of lessThan, lessThanOrEqual, equal,
80
- # notEqual, greaterThanOrEqual, greaterThan, between, notBetween,
81
- # containsText, notContains, beginsWith, endsWith
82
- # @return [Symbol]
83
- attr_reader :operator
84
-
85
- # Priority
86
- # The priority of this conditional formatting rule. This value is
87
- # used to determine which format should be evaluated and
88
- # rendered. Lower numeric values are higher priority than higher
89
- # numeric values, where '1' is the highest priority.
90
- # @return [Integer]
91
- attr_reader :priority
92
-
93
- # Text
94
- # used in a "text contains" conditional formatting
95
- # rule.
96
- # @return [String]
97
- attr_reader :text
98
-
99
- # percent (Top 10 Percent)
100
- # indicates whether a "top/bottom n" rule is a "top/bottom n
101
- # percent" rule. This attribute is ignored if type is not equal to
102
- # top10.
103
- # @return [Boolean]
104
- attr_reader :percent
105
-
106
- # rank (Rank)
107
- # The value of "n" in a "top/bottom n" conditional formatting
108
- # rule. This attribute is ignored if type is not equal to top10.
109
- # @return [Integer]
110
- attr_reader :rank
111
-
112
- # stdDev (StdDev)
113
- # The number of standard deviations to include above or below the
114
- # average in the conditional formatting rule. This attribute is
115
- # ignored if type is not equal to aboveAverage. If a value is
116
- # present for stdDev and the rule type = aboveAverage, then this
117
- # rule is automatically an "above or below N standard deviations"
118
- # rule.
119
- # @return [Integer]
120
- attr_reader :stdDev
121
-
122
- # stopIfTrue (Stop If True)
123
- # If this flag is '1', no rules with lower priority shall be
124
- # applied over this rule, when this rule evaluates to true.
125
- # @return [Boolean]
126
- attr_reader :stopIfTrue
127
-
128
- # timePeriod (Time Period)
129
- # The applicable time period in a "date occurring…" conditional
130
- # formatting rule. This attribute is ignored if type is not equal
131
- # to timePeriod.
132
- # Valid types are today, yesterday, tomorrow, last7Days,
133
- # thisMonth, lastMonth, nextMonth, thisWeek, lastWeek, nextWeek
134
- attr_reader :timePeriod
135
-
136
-
137
- # colorScale (Color Scale)
138
- # The color scale to apply to this conditional formatting
139
- # @return [ColorScale]
140
- def color_scale
141
- @color_scale ||= ColorScale.new
142
- end
143
-
144
- # dataBar (Data Bar)
145
- # The data bar to apply to this conditional formatting
146
- # @return [DataBar]
147
- def data_bar
148
- @data_bar ||= DataBar.new
149
- end
150
-
151
- # iconSet (Icon Set)
152
- # The icon set to apply to this conditional formatting
153
- # @return [IconSet]
154
- def icon_set
155
- @icon_set ||= IconSet.new
156
- end
157
-
158
- # @see type
159
- def type=(v); Axlsx::validate_conditional_formatting_type(v); @type = v end
160
- # @see aboveAverage
161
- def aboveAverage=(v); Axlsx::validate_boolean(v); @aboveAverage = v end
162
- # @see bottom
163
- def bottom=(v); Axlsx::validate_boolean(v); @bottom = v end
164
- # @see dxfId
165
- def dxfId=(v); Axlsx::validate_unsigned_numeric(v); @dxfId = v end
166
- # @see equalAverage
167
- def equalAverage=(v); Axlsx::validate_boolean(v); @equalAverage = v end
168
- # @see priority
169
- def priority=(v); Axlsx::validate_unsigned_numeric(v); @priority = v end
170
- # @see operator
171
- def operator=(v); Axlsx::validate_conditional_formatting_operator(v); @operator = v end
172
- # @see text
173
- def text=(v); Axlsx::validate_string(v); @text = v end
174
- # @see percent
175
- def percent=(v); Axlsx::validate_boolean(v); @percent = v end
176
- # @see rank
177
- def rank=(v); Axlsx::validate_unsigned_numeric(v); @rank = v end
178
- # @see stdDev
179
- def stdDev=(v); Axlsx::validate_unsigned_numeric(v); @stdDev = v end
180
- # @see stopIfTrue
181
- def stopIfTrue=(v); Axlsx::validate_boolean(v); @stopIfTrue = v end
182
- # @see timePeriod
183
- def timePeriod=(v); Axlsx::validate_time_period_type(v); @timePeriod = v end
184
- # @see formula
185
- def formula=(v); [*v].each {|x| Axlsx::validate_string(x) }; @formula = [*v].map { |form| ::CGI.escapeHTML(form) } end
186
-
187
- # @see color_scale
188
- def color_scale=(v)
189
- Axlsx::DataTypeValidator.validate 'conditional_formatting_rule.color_scale', ColorScale, v
190
- @color_scale = v
191
- end
192
-
193
- # @see data_bar
194
- def data_bar=(v)
195
- Axlsx::DataTypeValidator.validate 'conditional_formatting_rule.data_bar', DataBar, v
196
- @data_bar = v
197
- end
198
-
199
- # @see icon_set
200
- def icon_set=(v)
201
- Axlsx::DataTypeValidator.validate 'conditional_formatting_rule.icon_set', IconSet, v
202
- @icon_set = v
203
- end
204
-
205
-
206
- # Serializes the conditional formatting rule
207
- # @param [String] str
208
- # @return [String]
209
- def to_xml_string(str = '')
210
- str << '<cfRule '
211
- serialized_attributes str
212
- str << '>'
213
- str << ('<formula>' << [*self.formula].join('</formula><formula>') << '</formula>') if @formula
214
- @color_scale.to_xml_string(str) if @color_scale && @type == :colorScale
215
- @data_bar.to_xml_string(str) if @data_bar && @type == :dataBar
216
- @icon_set.to_xml_string(str) if @icon_set && @type == :iconSet
217
- str << '</cfRule>'
218
- end
219
- end
220
- end
1
+ module Axlsx
2
+ # Conditional formatting rules specify formulas whose evaluations
3
+ # format cells
4
+ #
5
+ # @note The recommended way to manage these rules is via Worksheet#add_conditional_formatting
6
+ # @see Worksheet#add_conditional_formatting
7
+ # @see ConditionalFormattingRule#initialize
8
+ class ConditionalFormattingRule
9
+ include Axlsx::OptionsParser
10
+ include Axlsx::SerializedAttributes
11
+
12
+ # Creates a new Conditional Formatting Rule object
13
+ # @option options [Symbol] type The type of this formatting rule
14
+ # @option options [Boolean] aboveAverage This is an aboveAverage rule
15
+ # @option options [Boolean] bottom This is a bottom N rule.
16
+ # @option options [Integer] dxfId The formatting id to apply to matches
17
+ # @option options [Boolean] equalAverage Is the aboveAverage or belowAverage rule inclusive
18
+ # @option options [Integer] priority The priority of the rule, 1 is highest
19
+ # @option options [Symbol] operator Which operator to apply
20
+ # @option options [String] text The value to apply a text operator against
21
+ # @option options [Boolean] percent If a top/bottom N rule, evaluate as N% rather than N
22
+ # @option options [Integer] rank If a top/bottom N rule, the value of N
23
+ # @option options [Integer] stdDev The number of standard deviations above or below the average to match
24
+ # @option options [Boolean] stopIfTrue Stop evaluating rules after this rule matches
25
+ # @option options [Symbol] timePeriod The time period in a date occuring... rule
26
+ # @option options [String] formula The formula to match against in i.e. an equal rule. Use a [minimum, maximum] array for cellIs between/notBetween conditionals.
27
+ def initialize(options = {})
28
+ @color_scale = @data_bar = @icon_set = @formula = nil
29
+ parse_options options
30
+ end
31
+
32
+ serializable_attributes :type, :aboveAverage, :bottom, :dxfId, :equalAverage,
33
+ :priority, :operator, :text, :percent, :rank, :stdDev,
34
+ :stopIfTrue, :timePeriod
35
+
36
+ # Formula
37
+ # The formula or value to match against (e.g. 5 with an operator of :greaterThan to specify cell_value > 5).
38
+ # If the operator is :between or :notBetween, use an array to specify [minimum, maximum]
39
+ # @return [String]
40
+ attr_reader :formula
41
+
42
+ # Type (ST_CfType)
43
+ # options are expression, cellIs, colorScale, dataBar, iconSet,
44
+ # top10, uniqueValues, duplicateValues, containsText,
45
+ # notContainsText, beginsWith, endsWith, containsBlanks,
46
+ # notContainsBlanks, containsErrors, notContainsErrors,
47
+ # timePeriod, aboveAverage
48
+ # @return [Symbol]
49
+ attr_reader :type
50
+
51
+ # Above average rule
52
+ # Indicates whether the rule is an "above average" rule. True
53
+ # indicates 'above average'. This attribute is ignored if type is
54
+ # not equal to aboveAverage.
55
+ # @return [Boolean]
56
+ attr_reader :aboveAverage
57
+
58
+ # Bottom N rule
59
+ # @return [Boolean]
60
+ attr_reader :bottom
61
+
62
+ # Differential Formatting Id
63
+ # @return [Integer]
64
+ attr_reader :dxfId
65
+
66
+ # Equal Average
67
+ # Flag indicating whether the 'aboveAverage' and 'belowAverage'
68
+ # criteria is inclusive of the average itself, or exclusive of
69
+ # that value.
70
+ # @return [Boolean]
71
+ attr_reader :equalAverage
72
+
73
+ # Operator
74
+ # The operator in a "cell value is" conditional formatting
75
+ # rule. This attribute is ignored if type is not equal to cellIs
76
+ #
77
+ # Operator must be one of lessThan, lessThanOrEqual, equal,
78
+ # notEqual, greaterThanOrEqual, greaterThan, between, notBetween,
79
+ # containsText, notContains, beginsWith, endsWith
80
+ # @return [Symbol]
81
+ attr_reader :operator
82
+
83
+ # Priority
84
+ # The priority of this conditional formatting rule. This value is
85
+ # used to determine which format should be evaluated and
86
+ # rendered. Lower numeric values are higher priority than higher
87
+ # numeric values, where '1' is the highest priority.
88
+ # @return [Integer]
89
+ attr_reader :priority
90
+
91
+ # Text
92
+ # used in a "text contains" conditional formatting
93
+ # rule.
94
+ # @return [String]
95
+ attr_reader :text
96
+
97
+ # percent (Top 10 Percent)
98
+ # indicates whether a "top/bottom n" rule is a "top/bottom n
99
+ # percent" rule. This attribute is ignored if type is not equal to
100
+ # top10.
101
+ # @return [Boolean]
102
+ attr_reader :percent
103
+
104
+ # rank (Rank)
105
+ # The value of "n" in a "top/bottom n" conditional formatting
106
+ # rule. This attribute is ignored if type is not equal to top10.
107
+ # @return [Integer]
108
+ attr_reader :rank
109
+
110
+ # stdDev (StdDev)
111
+ # The number of standard deviations to include above or below the
112
+ # average in the conditional formatting rule. This attribute is
113
+ # ignored if type is not equal to aboveAverage. If a value is
114
+ # present for stdDev and the rule type = aboveAverage, then this
115
+ # rule is automatically an "above or below N standard deviations"
116
+ # rule.
117
+ # @return [Integer]
118
+ attr_reader :stdDev
119
+
120
+ # stopIfTrue (Stop If True)
121
+ # If this flag is '1', no rules with lower priority shall be
122
+ # applied over this rule, when this rule evaluates to true.
123
+ # @return [Boolean]
124
+ attr_reader :stopIfTrue
125
+
126
+ # timePeriod (Time Period)
127
+ # The applicable time period in a "date occurring…" conditional
128
+ # formatting rule. This attribute is ignored if type is not equal
129
+ # to timePeriod.
130
+ # Valid types are today, yesterday, tomorrow, last7Days,
131
+ # thisMonth, lastMonth, nextMonth, thisWeek, lastWeek, nextWeek
132
+ attr_reader :timePeriod
133
+
134
+ # colorScale (Color Scale)
135
+ # The color scale to apply to this conditional formatting
136
+ # @return [ColorScale]
137
+ def color_scale
138
+ @color_scale ||= ColorScale.new
139
+ end
140
+
141
+ # dataBar (Data Bar)
142
+ # The data bar to apply to this conditional formatting
143
+ # @return [DataBar]
144
+ def data_bar
145
+ @data_bar ||= DataBar.new
146
+ end
147
+
148
+ # iconSet (Icon Set)
149
+ # The icon set to apply to this conditional formatting
150
+ # @return [IconSet]
151
+ def icon_set
152
+ @icon_set ||= IconSet.new
153
+ end
154
+
155
+ # @see type
156
+ def type=(v); Axlsx::validate_conditional_formatting_type(v); @type = v end
157
+ # @see aboveAverage
158
+ def aboveAverage=(v); Axlsx::validate_boolean(v); @aboveAverage = v end
159
+ # @see bottom
160
+ def bottom=(v); Axlsx::validate_boolean(v); @bottom = v end
161
+ # @see dxfId
162
+ def dxfId=(v); Axlsx::validate_unsigned_numeric(v); @dxfId = v end
163
+ # @see equalAverage
164
+ def equalAverage=(v); Axlsx::validate_boolean(v); @equalAverage = v end
165
+ # @see priority
166
+ def priority=(v); Axlsx::validate_unsigned_numeric(v); @priority = v end
167
+ # @see operator
168
+ def operator=(v); Axlsx::validate_conditional_formatting_operator(v); @operator = v end
169
+ # @see text
170
+ def text=(v); Axlsx::validate_string(v); @text = v end
171
+ # @see percent
172
+ def percent=(v); Axlsx::validate_boolean(v); @percent = v end
173
+ # @see rank
174
+ def rank=(v); Axlsx::validate_unsigned_numeric(v); @rank = v end
175
+ # @see stdDev
176
+ def stdDev=(v); Axlsx::validate_unsigned_numeric(v); @stdDev = v end
177
+ # @see stopIfTrue
178
+ def stopIfTrue=(v); Axlsx::validate_boolean(v); @stopIfTrue = v end
179
+ # @see timePeriod
180
+ def timePeriod=(v); Axlsx::validate_time_period_type(v); @timePeriod = v end
181
+ # @see formula
182
+ def formula=(v); [*v].each { |x| Axlsx::validate_string(x) }; @formula = [*v].map { |form| ::CGI.escapeHTML(form) } end
183
+
184
+ # @see color_scale
185
+ def color_scale=(v)
186
+ Axlsx::DataTypeValidator.validate 'conditional_formatting_rule.color_scale', ColorScale, v
187
+ @color_scale = v
188
+ end
189
+
190
+ # @see data_bar
191
+ def data_bar=(v)
192
+ Axlsx::DataTypeValidator.validate 'conditional_formatting_rule.data_bar', DataBar, v
193
+ @data_bar = v
194
+ end
195
+
196
+ # @see icon_set
197
+ def icon_set=(v)
198
+ Axlsx::DataTypeValidator.validate 'conditional_formatting_rule.icon_set', IconSet, v
199
+ @icon_set = v
200
+ end
201
+
202
+ # Serializes the conditional formatting rule
203
+ # @param [String] str
204
+ # @return [String]
205
+ def to_xml_string(str = '')
206
+ str << '<cfRule '
207
+ serialized_attributes str
208
+ str << '>'
209
+ str << ('<formula>' << [*self.formula].join('</formula><formula>') << '</formula>') if @formula
210
+ @color_scale.to_xml_string(str) if @color_scale && @type == :colorScale
211
+ @data_bar.to_xml_string(str) if @data_bar && @type == :dataBar
212
+ @icon_set.to_xml_string(str) if @icon_set && @type == :iconSet
213
+ str << '</cfRule>'
214
+ end
215
+ end
216
+ end
@@ -1,25 +1,23 @@
1
- module Axlsx
2
-
3
- # A simple, self serializing class for storing conditional formattings
4
- class ConditionalFormattings < 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 ConditionalFormatting
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
- each { |item| item.to_xml_string(str) }
21
- end
22
- end
23
-
24
- end
25
-
1
+ module Axlsx
2
+ # A simple, self serializing class for storing conditional formattings
3
+ class ConditionalFormattings < SimpleTypedList
4
+ # creates a new Tables object
5
+ def initialize(worksheet)
6
+ raise ArgumentError, "you must provide a worksheet" unless worksheet.is_a?(Worksheet)
7
+
8
+ super ConditionalFormatting
9
+ @worksheet = worksheet
10
+ end
11
+
12
+ # The worksheet that owns this collection of tables
13
+ # @return [Worksheet]
14
+ attr_reader :worksheet
15
+
16
+ # serialize the conditional formattings
17
+ def to_xml_string(str = "")
18
+ return if empty?
19
+
20
+ each { |item| item.to_xml_string(str) }
21
+ end
22
+ end
23
+ end